2016-05-24 2 views
2

Привет, я хочу отправить поле calc (cemi) в таблицу (sql). когда я вычисляю все поле, последнее поле не публикуется в таблице sql. потому что последнее поле (cemi) типа fkcalc, как я могу разместить поле типа fkcalc в sql-таблице. Спасибо заранее!Поле Calc не публикуется

procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet); 
begin  
    ADOQuery1.FieldValues['cemi']:= 
    ((ADOQuery1.FieldValues['boyuk1'] + ADOQuery1.FieldValues['boyuk2'] + 
    ADOQuery1.FieldValues['boyuk3'])*0.35)+((ADOQuery1.FieldValues['kicik1'] + 
    ADOQuery1.FieldValues['kicik2'])*0.25) +(ADOQuery1.FieldValues['qara1']*0.30); 
end; 
+0

Какое имя поля в таблице, в которую вы хотите отправить поле calc? – nolaspeaker

ответ

4

Я не совсем уверен, что вы имеете в виду

последнее поле не размещать на SQL таблицы

Если «последнее поле» вы имеете в виду это ваш «Cemi» один и, который является столбцом, который находится в таблице на вашем SQL Server, он не будет отправлен назад, если вы определили его как вычисленное поле в своем AdoQuery1 в O инспектор bject. Поля с FieldKind из fkCalculated являются локальными для AdoQuery.

Просто присваивать значение вычисленному полю достаточно, чтобы «отправить» его локально в AdoQuery, как я думаю, вы знаете. Что вы хотите сделать, чтобы отладить свою проблему (потому что такие читатели, как я, не могут отлаживать ее), проще понять, какое значение, если таковое имеется, -.

С этой точки зрения ваш код страдает от «преждевременной оптимизации», что затруднит вам увидеть, что происходит не так. Попробуйте это вместо:

В своем ADOQuery1CalcFields объявите локальную переменную для каждого из полей, к которым вы обращаетесь, включая вычисленную. Выберите типы переменных в соответствии с полями:

var 
    Boyuk1 : Double; // or Integer, etc 
    [...] 
    Cemi : Double; 

присваивают значения локальных переменных, используя AsXXXX (типа) полей:

Cemi := 0; 
if not AdoQuery1.FieldByName('Boyuk1').IsNull then 
    Cemi := Cemi + AdoQuery1.FieldByName('Boyuk1').AsFloat; 
[etc] 

Таким образом, по крайней мере, вы будете иметь возможность чтобы увидеть точку, в которой расчет идет не так (если это так).

Я использовал FieldByName(). AsFloat, а не FieldValues ​​[], потому что FieldValues ​​[] - это вариант, который может быть Null, и вы не хотите, чтобы при назначении ему значений, которые сами по себе быть вариантами.

Также

  • Убедитесь, что AutoCalcFields установлен в Справедливо для AdoQuery1.

  • Поместите контрольную точку отладчика в первую строку ADOQuery1CalcFields. Скомпилируйте и запустите и убедитесь, что точка останова попала - если нет, вы получите ответ. Выполните одноэтапный отладчик через каждую строку процедуры и, после последней строки, используйте Ctrl-F7 для оценки значения AdoQuery1.FieldByName ('Cemi'). AsFloat.

+0

Привет, Мартин. Это мое маленькое видео, которое я объясняю в видео. Https://www.youtube.com/watch?v=L3-oMIikqI8&feature=youtu.be –

+0

Я пробовал youtube, но он говорит, что ваше видео было удалено. – MartynA

+0

Привет. Извините, что попробуйте это: https://www.youtube.com/watch?v=QfdKhQunbFk&feature=youtu.be –

Смежные вопросы