1 (edited by Andrei 2019-06-19 07:18:28)

Topic: Запомнить Id записи в переменную

Добрый день.
На форме frmAddSch есть кнопка Button1 - сохранение данных в таблицу Sch.
У кнопки есть процедура. frmAddSch1_Button1_OnClick.

Подскажите пожалуйста как в процедуре frmAddSch1_Button1_OnClick запомнить переменную idsch: string (значение sch.id)

procedure frmAddSch1_Button1_OnClick (Sender: TObject);
var
      idsch: string;
         begin
         idsch := SQLExecute('SELECT id FROM sch = ' + IntToStr(frmAddSch1.Button1.dbGeneralTableId));
        SQLExecute ('INSERT INTO res (id_sch) VALUES ( '+IntToStr(idsch));
     end;

Данный код Правильный?
Если да, то подскажите ошибку в синтаксисе.

Re: Запомнить Id записи в переменную

Приветствую.


В событии OnClick еще не известно, какой id записи присвоен, т.к. данное событие возникает перед тем, как запись будет сохранена.
Узнать id записи можно в событии OnAfterClick


Если я правильно понимаю, вам необходимо выполнить SQL запрос только при создании новой записи, но не при редактировании записи.


Поэтому необходимо сделать так, чтобы в событии OnAfterClick мы смогли отличить, когда запись создается, а когда редактируется

procedure frmAddSch1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin     
    if frmAddSch1.dbAction = 'NewRecord' then frmAddSch1.Tag := 1 else frmAddSch1.Tag := 0;
end; 

procedure frmAddSch1_Button1_OnAfterClick (Sender: TObject); 
begin 
    if frmAddSch1.Tag = 1 then // условие выполняется при создании новой записи
    begin 
        SQLExecute ('INSERT INTO res (id_sch) VALUES ( '+IntToStr(frmAddSch1.Button1.dbGeneralTableId));    
    end;
end;
Dmitry.

Re: Запомнить Id записи в переменную

Спасибо работает.

Вот только все таки хотелось бы результаты id выполнения процедуры frmAddSch1_Button1_OnAfterClick при создании новой записи ( '+IntToStr(frmAddSch1.Button1.dbGeneralTableId)
получить в переменную, которую в дальнейшем использовать для расчетов.

Re: Запомнить Id записи в переменную

Andrei wrote:

Спасибо работает.

Вот только все таки хотелось бы результаты id выполнения процедуры frmAddSch1_Button1_OnAfterClick при создании новой записи ( '+IntToStr(frmAddSch1.Button1.dbGeneralTableId)
получить в переменную, которую в дальнейшем использовать для расчетов.


procedure frmAddSch1_Button1_OnAfterClick (Sender: TObject); 
var
  tmpNewID:integer; // переменная для хранения добавленного значения
begin 
    if frmAddSch1.Tag = 1 then // условие выполняется при создании новой записи
    begin 
        tmpNewID := frmAddSch1.Button1.dbGeneralTableId;
        SQLExecute ('INSERT INTO res (id_sch) VALUES ( '+IntToStr(tmpNewID));    
        // далее - ваш код
    end;
end;
Визуальное программирование: блог и телеграм-канал.

5 (edited by Andrei 2019-06-19 11:10:50)

Re: Запомнить Id записи в переменную

ПОМОГИТЕ НЕ РАБОТАЕТ?.... Красный курсор перед оператором THEN. Почему???
Ошибка возникает когда добавляю переменную maxpok и условие AND

procedure frmAddSch1_Button1_OnAfterClick (Sender: TObject);
 var
    vyrab_otp: string;     
    maxpok: string;
     begin
     if frmAddSch1.Tag = 1 then
     begin
   vyrab_otp := SQLExecute('SELECT IFNULL(vyrab_otp, 0) FROM sch LEFT и т.д....        
   maxpok:= SQLExecute('SELECT MAX(sch) as max FROM sch WHERE id_print = '+ IntToStr(idprint));
       if ((ValidInt(vyrab_otp)) and ((' + IntToStr(frmAddSch1.Edit1.Value) <= (ValidInt(maxpok))') then MessageDlg('Не то....', mtInformation, mbOK, 1)  else SQLExecute ('INSERT INTO res и т.д....

Re: Запомнить Id записи в переменную

нужен пример... на что материться сама программа

Re: Запомнить Id записи в переменную

Напишите сюда код данного события полностью.

Dmitry.

8 (edited by Andrei 2019-06-21 07:28:50)

Re: Запомнить Id записи в переменную

DriveSoft wrote:

Напишите сюда код данного события полностью.

рабочий код.
procedure frmAddSch1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
     begin
     if frmAddSch1.dbAction = 'NewRecord' then frmAddSch1.Tag := 1 else frmAddSch1.Tag := 0;
end;

procedure frmAddSch1_Button1_OnAfterClick (Sender: TObject);
var
     vyrab_otp: string;
     begin
     if frmAddSch1.Tag = 1 then
     begin
         vyrab_otp := SQLExecute('SELECT IFNULL(vyrab_otp, 0) FROM sch LEFT OUTER JOIN print ON print.id=sch.id_print WHERE sch.id = ' + IntToStr(frmAddSch1.Button1.dbGeneralTableId));
            if ValidInt(vyrab_otp) then SQLExecute ('INSERT INTO res (res, date,id_print, id_sch) VALUES('+IntToStr(Trunc(frmAddSch1.Edit1.Value) - StrToInt(vyrab_otp))+', now(), ' + IntToStr(idprint)+', '+ IntToStr(frmAddSch1.Button1.dbGeneralTableId)+')');
    end;


С учетом замечаний vovka3003. Ошибка перед оператором THEN осталась.

procedure frmAddSch1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
     begin
     if frmAddSch1.dbAction = 'NewRecord' then frmAddSch1.Tag := 1 else frmAddSch1.Tag := 0;
 end;

procedure frmAddSch1_Button1_OnAfterClick (Sender: TObject);
 var
     vyrab_otp: string;
     maxpok: string;
     begin
     if frmAddSch1.Tag = 1 then
     begin
         vyrab_otp := SQLExecute('SELECT IFNULL(vyrab_otp, 0) FROM sch LEFT OUTER JOIN print ON print.id=sch.id_print WHERE sch.id = ' + IntToStr(frmAddSch1.Button1.dbGeneralTableId));
         maxpok := SQLExecute('SELECT MAX(sch) FROM sch WHERE id_print = '+ IntToStr(idprint));
       if (ValidInt(vyrab_otp) and (IntToStr(frmAddSch1.Edit1.Value) <= (ValidInt(maxpok)) then MessageDlg('Идите лесом....', mtInformation, mbOK, 1)
       else SQLExecute ('INSERT INTO res (res, date, id_print, id_sch) VALUES('+IntToStr(Trunc(frmAddSch1.Edit1.Value) - StrToInt(vyrab_otp))+', now(), ' + IntToStr(idprint)+', '+ IntToStr(frmAddSch1.Button1.dbGeneralTableId)+')');     
end;