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

Тема в разделе "Delphi - Базы данных", создана пользователем ksmak, 10 июл 2014.

  1. ksmak

    ksmak New Member

    Регистрация:
    9 авг 2013
    Сообщения:
    3
    Симпатии:
    0
    Здраствуйте.

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

    вот коды
    Код (Delphi):
    {Действие ОК}
    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;
    Код (Delphi):
    {Сохранение документа}
    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;
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    А SQL запрос какой выполняется в Вашей транзакции?
    Не "SELECT ALL FROM ... bla bla..." случаем? <_<
     
Загрузка...

Поделиться этой страницей