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