Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

По какому событию пересчитывать рекордсет?   Найти похожие ветки 

 
Вася   (2012-04-24 13:38) [0]

Есть рекордсет, отображен в дбгриде, после правки записи, нужно программно пересчитать последующие строки. По какому событию это лучше делать? Пробовал recordset.afteredit - при переводе рекордсета в режим редактирования - бесконечный цикл.
(lazarus+MSSQL)


 
Сергей М. ©   (2012-04-24 13:45) [1]

афтерпост


 
Вася   (2012-04-24 14:07) [2]

в этом случае бесконечный цикл при вызове recordset.post


 
icWasya ©   (2012-04-24 17:10) [3]

Для ухода от такой рекурсии
Заводим у формы поле
 FInRecalc:boolean;
внутри процедуры обработки

begin
 if FInRecalc then Exit;
try
  пересчитываем
finally
 FInRecalc:=false;
end;
end;


 
Вася   (2012-04-26 12:19) [4]

Нет, не пойдет. Вобще отлично работает событие DBGridEditingDone? Но здесь возникают проблемы при нажатии клавиши энтер или таб при окончании редактировния - прога вылетает. Если мышей или стрелками переходить на другую ячейку - проблем нет


 
oldman ©   (2012-04-26 12:27) [5]


> после правки записи, нужно программно пересчитать последующие
> строки


запретить правку в дбгриде, вызывать окно редактирования.
по кнопке ОК в окне редактирования производить телодвижения


 
Вася   (2012-04-26 12:37) [6]

это не кошерно, проще уж как сейчас - отдельно кнопка для пересчета


 
sniknik ©   (2012-04-26 12:43) [7]

> в этом случае бесконечный цикл при вызове recordset.post
во первых считать нужно только если изменилось значение поля. во вторых пересчитывать только для одной следующей записи, и только если не конец рекордсета.
бесконечного цикла не будет.


 
Вася   (2012-04-26 13:05) [8]

procedure TForm1.SQLkardsPerescet(); //пересчитіваем всю карточку
var
 id_rec:integer; //номер строки до пересчета
 spid_kon:integer; //конечные показания спидометра
 ost_kon:double;//остаток на конец дня

begin
id_rec:=sqlkards.RecNo;
spid_kon:=0;
ost_kon:=0.00;
sqlkards.First;
while not sqlkards.EOF do
begin
 //готовим данные
 sqlkards.Edit;

 //*****************если не замена и не первая запись
if (sqlkards.FieldByName("chainge").asinteger=0) and (sqlkards.recno>1) then
   begin
    sqlkards.FieldByName("spid1").asinteger:=spid_kon;     //переносим конечные данные спидоматре на начало
    sqlkards.FieldByName("ostat").asfloat:=ost_kon;      //остатки бензина
   end
else
begin   //остатки в случае смены спидометра
//********************если замена
if  (sqlkards.FieldByName("chainge").asinteger=1) and (sqlkards.recno>1)
then
   begin
    sqlkards.FieldByName("ostat").asfloat:=ost_kon;
    end;
 end;
//***************если первая запись
 if  (sqlkards.recno>1)
then
   begin
   end;

 sqlkards.FieldByName("ostkon").asfloat:=sqlkards.FieldByName("liters").asinteger +sqlkards.FieldByName("ostat").asfloat-sqlkards.FieldByName("fakt").asinteger;

//запоминаем конечные данные
 spid_kon:=sqlkards.FieldByName("spid2").asinteger;
 ost_kon:=sqlkards.FieldByName("ostkon").asinteger;

 sqlkards.Next;
 end;
end;  


 
Сергей М. ©   (2012-04-26 13:12) [9]

Используя RecNo ты сам себе готовишь грабли


 
Вася   (2012-04-26 13:17) [10]

sqlkards.First; - вот где грабли, а я на него и не обращал внимания


 
Сергей М. ©   (2012-04-26 13:35) [11]


> вот где грабли


эти грабли сами по себе , а RecNo-грабли - это другие грабли, которые рано или поздно выстрелят)


 
Вася   (2012-04-26 13:46) [12]

Ок, всем спасибо,  REcNo - учту. )



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.057 c
2-1329309791
Киса
2012-02-15 16:43
2013.03.22
Вопрос по компоненту EmbeddedWB


2-1338127419
Глеб
2012-05-27 18:03
2013.03.22
Перенос данных из дельфи в хмл


15-1330115402
Юрий
2012-02-25 00:30
2013.03.22
С днем рождения ! 25 февраля 2012 суббота


2-1342665323
NBAH19901
2012-07-19 06:35
2013.03.22
Парсинг Json в delphi хе2


15-1346305970
ZeroDivide
2012-08-30 09:52
2013.03.22
Современный смартфон с долгой батарейкой. Есть такие?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский