Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Vampir_k
0 / 0 / 0
Регистрация: 13.05.2018
Сообщений: 1
1

Ошибка при вызове метода DS.Post

18.07.2018, 06:16. Просмотров 272. Ответов 1
Метки нет (Все метки)

Здравствуйте, при выполнении запроса на вставку строки в таблицу возникает ошибка именно при выполнении метода Post "Can't read Buffer.Incorect Record", подскажите в чем ошибка и как исправить?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.NxButton4Click(Sender: TObject);
begin
  if Memo4.Text='' then
    MessageDlg('Выберите работу из списка!',mtInformation,[mbOk],1)
  else    begin
        if (SPIS_INZH1.ItemIndex=(-1)) or (SVOYSTVA1.Enabled=True and (SVOYSTVA1.ItemIndex=-1)) or(NxEdit1.Text='') then
          MessageDlg('Заполнены не все поля!',mtInformation,[mbOk],1)
      else
        begin
        ActiveRab(nil);
          if DM.DS_ACT_RAB.RecordCountFromSrv=0 then
            begin
            DM.DS_RAB.UpdateSQL.Text:='UPDATE RABOTA SET ACTIVE_W=1 WHERE ID_WRK='+IntToStr(rab);
            DM.DS_RAB.Edit;
            DM.DS_RAB.Post;
            DM.DB.DefaultTransaction.CommitRetaining;
            end;
          if SVOYSTVA1.Enabled=True then
            sv:=Integer(SVOYSTVA1.Items.Objects[SVOYSTVA1.ItemIndex])
          else
            sv:=0;
        DM.DS_POVT.Close;
        DM.DS_POVT.SelectSQL.Text:='SELECT * FROM ZADANIE WHERE RAB_='+IntToStr(rab)+' AND SV_='+IntToStr(sv);
        DM.DS_POVT.Open;
          if DM.DS_POVT.RecordCountFromSrv>0 then
            MessageDlg('Задание уже выдано!',mtInformation,[mbOk],1)
          else
            begin
            DM.DS_ZAD.Last;
            DM.DS_ZAD.InsertSQL.Text:='INSERT INTO ZADANIE(ID_Z, NACH_, ISP_, RAB_, SV_, DATE_Z, TIME_Z, PLAN_TIME_Z, ACTIVE_, GOTOV_ ) VALUES( GEN_ID(GEN_ZADANIE_ID, 1),'+IntToStr(id_sotr)+','+IntToStr(Integer(SPIS_INZH1.Items.Objects[SPIS_INZH1.ItemIndex]))+','+IntToStr(rab)+','+IntToStr(sv)+','''+DateToStr(Date)+''','''+TimeToStr(Time)+''','''+NxEdit1.Text+''',0,''-'')';
            DM.DS_ZAD.Insert;
            DM.DS_ZAD.Post;
            DM.DB.DefaultTransaction.CommitRetaining;
            DM.DS_ZAD.Close;
            DM.DS_ZAD.Open;
            DM.DS_ZAD.Last;
            DM.DS_ZAD.First;
            end;
        end;
    end;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2018, 06:16
Ответы с готовыми решениями:

Подтверждение метода Post при перемещении по DBGrid
Добрый день, для предотвращения автоматического ввода измененных значений в...

Ошибка сохранения при вызове хранимой процедуры
Всем доброго вечера подскажите, в чем моя ошибка при выполнении запроса? При...

При вызове процедуры Refresh ошибка: could not convert variant of type n
Почему при вызове процедуры Refresh ошибка на строке DM.VidiQuery.Close; could...

ошибка при вызове метода объекта
Здравствуйте, ребят, у меня тут вот какое дело - программа запускается, я в ней...

Access Violation при вызове метода Open для Sqlquery из потока
Здравствуйте, очень нужна помощь. Использую dbexpress для работы с Oracle. В...

1
Скандербег
939 / 895 / 297
Регистрация: 07.08.2012
Сообщений: 2,490
18.07.2018, 09:54 2
До того как разбираться с ошибкой надо сделать корректную запись данных в базу (на примере форагмента процедуры):
Delphi
1
2
3
4
5
6
7
8
        DM.DS_RAB.UpdateSQL.Text:='UPDATE RABOTA SET ACTIVE_W=1 WHERE ID_WRK='+IntToStr(rab);
        DM.DS_RAB.Transaction.StartTransaction;
        try
          DM.DS_RAB.ExecSQL;
          DM.DS_RAB.Transaction.Commit;
        except
          DM.DS_RAB.Transaction.Rollback; //в случае какого-либо сбоя - откат транзакции
        end;
Советы:
- Нельзя применять CommitRetaining, если не известно чем этот вызов отличается от просто Commit (Commit завершает транзакцию окончательно, закрывая все курсоры и тем самым давая другим транзакциям видеть сделанные изменения в базе).
- Также плохо смешивать два метода записи: Post и ExecSQL. При использовании запросов SQL применяться должен последний метод (как в примере выше).
- Для различных запросов, которые пишут в базу данные лучше использовать IBQuery (или аналог из FIBPlus, если применяется эта библиотека).
- Чтобы не путаться с кавычками, которые должны обрамлять текстовые значения в тексте запроса лучше использовать функцию QuotedStr. К примеру: ...','+QuoteStr(DateToStr(Date))+','...

Только потом надо будет заниматься с ошибкой, если она не исчезнет.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2018, 09:54

При выполнении метода Post компонента TQuery выдает Record/key deleted :-(
При выполнении метода Post компонента TQuery выдает Record/key deleted :-(...

Ошибка при вызове файла справки
При вызове файла справки из приложения на Delphi, файл запускается, но при этом...

Ошибка при вызове StrToDate в Delphi EX2
Проблема в том, что вызов strTodate выдает ошибку: В начале думал,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru