![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Неактивный пользователь
Пол:
Регистрация: 04.03.2007
Сообщений: 21
Репутация: 1
|
Есть таблицы Т1 и Т2, связанные между собой Query.
SELECT * FROM T1 Использую CalcField DM.TableVsego.Value:=TableOstatok.AsFloat+TablePri hod.AsFloat; Работает или Query или CalcField. При вводе данных в DBGrid выводится сообщение Stack overflow. Как исправить это? Что я не так сделал? ![]() |
|
|
|
| Реклама: | Мебельный магазин: столы кухонные стеклянные - Переходи на сайт! | yandex gpt api | будут ли ледовое шоу в хабаровске - redkassa.ru | Мебельный магазин: гуд лакк - Переходи на сайт! | интеграция озон с вайлдберриз |
|
|
#2
|
|
Неактивный пользователь
Пол:
Регистрация: 07.04.2008
Сообщений: 45
Репутация: 12
|
А что ты хотел при открытом DataSet'e пытаешься добавить поля?
Скажи а что тебе мешает добавить это поле в самом запросе? Типа: SELECT T1.Ostatok,T1.Prihod, (T1.Prihod+T1.Ostatok) as Vsego FROM T1 |
|
|
|
|
|
#3
|
|
Неактивный пользователь
Регистрация: 06.12.2007
Сообщений: 6
Репутация: 3
|
при открытом датасете добавлять вычисляемые поля сам бог велел (нафиг они еще нужны? или на дизайнтайме свет клином сошелся?)
Делаем так: связку DataSource1 + DbGrid1 создаем в дизайнтайме. Заводим обработчик OnCalcFields procedure TForm1.MyCalcFields(DataSet: TDataSet); var Calc, Fld: TField; begin Fld := DataSet.FieldByName('Weight'); Calc := DataSet.FieldByName('Calc'); if Assigned(Calc) and Assigned(Fld) then // это на всякий случай. можно убрать ![]() Calc.AsFloat := Fld.AsFloat * 2; end; затем выполняем процедуру procedure Form1.a; var Q: TQuery; Fld: TField; i: Integer; begin Q := TQuery.Create(Database1); Q.DatabaseName := Database1.DatabaseName; Q.SQL.Text := 'select Weight from Animals'; Q.OnCalcFields := Query1CalcFields; Q.Prepare; Q.FieldDefs.Updated := false; Q.FieldDefs.Update; for i := 0 to Q.FieldDefs.Count - 1 do if Q.FindField(Q.FieldDefs[i].Name) = nil then Q.FieldDefs.Items[i].CreateField(Q); Fld := TFloatField.Create(Q); with Fld do begin FieldKind := fkCalculated; FieldName := 'Calc'; DisplayLabel := 'this is Calc!'; Visible := True; DataSet := Q; end; DataSource1.DataSet := Q; Q.Open; end; а путь SELECT T1.Ostatok,T1.Prihod, (T1.Prihod+T1.Ostatok) as Vsego FROM T1 еретичен, ибо тянет лишнее на клиента ![]() |
|
|
|
|
|
#4
|
|
Неактивный пользователь
Регистрация: 06.12.2007
Сообщений: 6
Репутация: 3
|
забыл сказать, что Database1.AliasName = 'DbDemos', что в данном примере тоже было проделано в дизайнтайме
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Вывод Яндексом ответа на запрос | panadol | Раскрутка вебсайта | 1 | 20.01.2009 23:32 |
| Простой вопрос по ssh | wolx | UNIX, Linux, MacOs для PC и другие ОС | 19 | 27.08.2007 17:11 |
| самый простой вопрос! | Plush | Windows XP | 6 | 13.03.2007 10:43 |
| WordPad нет ответа | shatuna | Архив | 8 | 20.11.2006 13:52 |
|
|