Сохранение Данных

  • Автор темы ksmak
  • Дата начала
K

ksmak

Здраствуйте.

Никак не пойму почему так происходит, программирую на delphi 7 + FIBPlus8.6 + Firebird 2.5. Так вот, на форме пользователь по идее должен редактировать таблицу (использую EhLib) которая привязана к датасету. Сама таблица не редактируема (ReadOnly), только при двойном щелчке появляется другая форма где находится навигатор и группа полей связанные с тем же датасетом. Т.е. пользователь двойным щелчком открывает дополнительную форму добавляет/изменяет/удаляет записи, нажимает кнопку ОК, дополнительная форма закрывается, а затем на основной форме нажимает на кнопку Сохранить и данные отправляются на сервер. Все работает хорошо, только единственно есть случай когда пользователь ошибочно добавил запись в таблицу, а потом еще раз открыв доп форму удаляет эту запись Но при нажатии кнопку Сохранить удаленная запись снова появляется (т.е. все равно сохраняется)!

вот коды
Код:
{Действие ОК}
procedure TfrmMGroup.actSaveExecute(Sender: TObject);
begin
MClosing := True;
if StateForm = 1 then
begin
frmBlank.dst[gr_ind].First;
while not frmBlank.dst[gr_ind].Eof do
begin
if frmBlank.dst[gr_ind].Modified then
frmBlank.dst[gr_ind].Post;
frmBlank.dst[gr_ind].Next;
end;
end;
Close;
end;

Код:
{Сохранение документа}
procedure TfrmBlank.SaveDoc;
var
i, j, n, cnt: Integer;
begin
for i := 1 to Length(dst) - 1 do
begin
if dst[i].Modified then
dst[i].Post;
dst[i].First;
while not dst[i].Eof do
begin
if dst[i].Modified then
dst[i].Post;
dst[i].Next;
end;
dst[i].ApplyUpdates;
dst[i].Transaction.Commit;
end;
for i := 1 to Length(dst) - 1 do
begin
dst[i].Transaction.StartTransaction;
dst[i].Open;
n := 1;
cnt := dst[i].RecordCountFromSrv;
dst[i].First;
while not dst[i].Eof do
begin
dst[i].Edit;
if (n <> cnt) then
begin
for j := 0 to Length(Buff[buf_ind].rek) - 1 do
begin
if (Buff[buf_ind].rek[j].ds = i) and
(Buff[buf_ind].rek[j].calc = 2) then
dst[i].FieldByName(Buff[buf_ind].rek[j].fld).Value := null;
end;
end;
dst[i].FieldByName('LST').Value := 0;
dst[i].Post;
dst[i].Next;
Inc(n);
end;
dst[i].ApplyUpdates;
dst[i].Last;
dst[i].Edit;
dst[i].FieldByName('LST').Value := 1;
dst[i].Post;
dst[i].ApplyUpdates;
dst[i].Transaction.Commit;
end;
if dst[0].Modified then dst[0].Post;
dst[0].ApplyUpdates;
dst[0].Transaction.Commit;
end;
 
S

sinkopa

Здраствуйте.
Никак не пойму почему так происходит, при нажатии кнопку Сохранить удаленная запись снова появляется (т.е. все равно сохраняется)!
Код:
dst[0].Transaction.Commit;
А SQL запрос какой выполняется в Вашей транзакции?
Не "SELECT ALL FROM ... bla bla..." случаем? <_<
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!