powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не срабатывает update
11 сообщений из 11, страница 1 из 1
Не срабатывает update
    #38600002
dartnyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ХП для добавления, изменения и удаления записей в таблицу:

Код: sql
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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
SET TERM ^ ;

create or alter procedure RECEIPT_MODIFY (
    CHOOSE_PAR integer,
    SERIES varchar(10),
    NUMBER varchar(10),
    PATIEND_ID integer,
    DOCTOR_ID integer,
    CATEGORY_ID integer,
    NOSOLOGY_ID integer,
    FUNDING_ID integer,
    DATE_RECEIPT date,
    SIGNA_ID integer,
    DTD_ID integer,
    RP_ID integer,
    FORM_ID integer,
    RECEIPT_ID_PAR integer)
returns (
    RESULT_OUTPUT integer)
as
begin
  result_output=1;

  if (choose_par=1) then
    begin
        insert into receipt (series, number, patiend_id, doctor_id, category_id, nosology_id,
        funding_id, date_receipt, signa_id, dtd_id, rp_id, form_id)
            values(:series, :number, :patiend_id, :doctor_id, :category_id, :nosology_id,
        :funding_id, :date_receipt, :signa_id, :dtd_id, :rp_id, :form_id);
    end


  if (choose_par=2) then
    begin
        update receipt set
            series=:series,
            number=:number,
            patiend_id=:patiend_id,
            doctor_id=:doctor_id,
            category_id=:category_id,
            nosology_id=:nosology_id,
            funding_id=:funding_id,
            date_receipt=:date_receipt,
            signa_id=:signa_id,
            dtd_id=:dtd_id,
            rp_id=:rp_id,
            form_id=:form_id
        where receipt_id=:receipt_id_par;
    end

  if (choose_par=3) then
    begin
        delete from receipt
        where receipt_id=:receipt_id_par;
    end
  suspend;
end^

SET TERM ; ^

GRANT SELECT,INSERT,DELETE,UPDATE ON RECEIPT TO PROCEDURE RECEIPT_MODIFY;

GRANT EXECUTE ON PROCEDURE RECEIPT_MODIFY TO SYSDBA;



Из Delphi вызываю так:
Код: pascal
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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
procedure TReceipt.Zapolnenia_Receipt;
begin
  with DM.IBStoredProcReceipt do
    begin
      ParamByName('series').Value := EditSeries.Text;
      ParamByName('patiend_id').Value := PatientUnit.patient_id;
      ParamByName('doctor_id').Value :=
        DBLookupComboBoxDoctor.KeyValue;
      ParamByName('category_id').Value :=
        DBLookupComboBoxCategory.KeyValue;
      ParamByName('nosology_id').Value :=
        DBLookupComboBoxNosology.KeyValue;
      ParamByName('funding_id').Value :=
        DBLookupComboBoxFunding.KeyValue;
      ParamByName('date_receipt').Value :=
        DateEditNow.Date;
      ParamByName('signa_id').Value :=
        DBLookupComboBoxSigna.KeyValue;
      ParamByName('dtd_id').Value :=
        DBLookupComboBoxDtd.KeyValue;
      ParamByName('rp_id').Value :=
        DBLookupComboBoxRp.KeyValue;  
      ParamByName('form_id').Value :=
        DBLookupComboBoxForm.KeyValue;

      if JournalUnit.flag_receipt = true then
        begin
          ParamByName('number').Value := DM.IBQueryReceiptNUMBER.Value;
          ParamByName('receipt_id_par').Value :=
            DM.IBQueryReceiptRECEIPT_ID.Value;
          ParamByName('choose_par').Value := 2;
        end // then
      else
          begin
          ParamByName('number').Value := EditNumber.Text;
          ParamByName('receipt_id_par').Value := null;
          ParamByName('choose_par').Value := 1;
        end;

      try
        ExecProc;

      except
        ShowMessage('Äîáàâëåíèå íå ïîëó÷èëîñü!'+#13+'Ïîâòîðèòå ïîïûòêó!');
        DM.IBTransaction.RollbackRetaining;
      exit; //except
      end;  //try

      DM.IBTransaction.CommitRetaining;
      DM.IBQueryReceipt.Close;
      DM.IBQueryReceipt.Open;
    end; // with
end;



Так вот. Добавление и удаление работают нормально. А изменение не хочет работать ни в какую.
Из IBExpert'а все работает нормально.
Что не так? Куда копать?
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600032
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartnyanka DM.IBTransaction.RollbackRetaining;
DM.IBTransaction.CommitRetaining;
не надо retaining. Во всех же статьях написано, что это плохо, и почему.

dartnyanka А изменение не хочет работать ни в какую.
для начала надо проверить, что в процедуру пр обновлении передается, и обновляет ли она данные сама по себе, без дельфевого кода.

И, я бы value никогда не использовал. Иногда variant глючит. Раз у процедуры есть жесткие типы, то так и надо писать - ParamByName().asInteger, и т.д.
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600035
dartnyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvdartnyanka DM.IBTransaction.RollbackRetaining;
DM.IBTransaction.CommitRetaining;
не надо retaining. Во всех же статьях написано, что это плохо, и почему.

dartnyanka А изменение не хочет работать ни в какую.
для начала надо проверить, что в процедуру пр обновлении передается, и обновляет ли она данные сама по себе, без дельфевого кода.

И, я бы value никогда не использовал. Иногда variant глючит. Раз у процедуры есть жесткие типы, то так и надо писать - ParamByName().asInteger, и т.д.

Спасибо))
Смена типа помогла)
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600135
dartnyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ан нет, не помогло)
Ночью глаз замылился...

kdvдля начала надо проверить, что в процедуру пр обновлении передается, и обновляет ли она данные сама по себе, без дельфевого кода.

В IBExpert все нормально работает, записи обновляются.
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600139
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartnyankaВ IBExpert все нормально работает, записи обновляются.
Значит включай трассировку и смотри что в параметры процедуры передаёт эксперт и что -
твой код. Ищи различия.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600158
dartnyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovdartnyankaВ IBExpert все нормально работает, записи обновляются.
Значит включай трассировку и смотри что в параметры процедуры передаёт эксперт и что -
твой код. Ищи различия.


А как это сделать?
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600162
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartnyankaА как это сделать?
Так, как написано в Doc\README.trace_services.txt
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600178
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ему проще включить IBSQLMonitor.
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600191
dartnyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот это получено с Monitor.

Код: sql
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.
[Application: Receipt148]
: [Start transaction]

[Application: Receipt148]
: [Fetch] Select F.RDB$COMPUTED_BLR, F.RDB$DEFAULT_VALUE, R.RDB$FIELD_NAME from RDB$RELATION_FIELDS R, RDB$FIELDS F where R.RDB$RELATION_NAME = :RELATION and R.RDB$FIELD_SOURCE = F.RDB$FIELD_NAME and ((not F.RDB$COMPUTED_BLR is NULL) or      (not F.RDB$DEFAULT_VALUE is NULL)) 

  SEOFReached

[Application: Receipt148]
: [Execute] Select F.RDB$COMPUTED_BLR, F.RDB$DEFAULT_VALUE, R.RDB$FIELD_NAME from RDB$RELATION_FIELDS R, RDB$FIELDS F where R.RDB$RELATION_NAME = :RELATION and R.RDB$FIELD_SOURCE = F.RDB$FIELD_NAME and ((not F.RDB$COMPUTED_BLR is NULL) or      (not F.RDB$DEFAULT_VALUE is NULL)) 

  RELATION = RECEIPT_MODIFY

[Application: Receipt148]
: [Commit (Hard commit)]

[Application: Receipt148]
IBStoredProcReceipt: [Execute] Execute Procedure "RECEIPT_MODIFY"(:"CHOOSE_PAR                     ", :"SERIES                         ", :"NUMBER                         ", :"PATIEND_ID                     ", :"DOCTOR_ID                      ", :"CATEGORY_ID                    ", :"NOSOLOGY_ID                    ", :"FUNDING_ID                     ", :"DATE_RECEIPT                   ", :"SIGNA_ID                       ", :"DTD_ID                         ", :"RP_ID                          ", :"FORM_ID                        ", :"RECEIPT_ID_PAR                 ")

  CHOOSE_PAR = 2
  SERIES = 47014-04 (меняю это поле)
  NUMBER = 000025
  PATIEND_ID = 0
  DOCTOR_ID = 2
  CATEGORY_ID = 1
  NOSOLOGY_ID = 5
  FUNDING_ID = 1
  DATE_RECEIPT = 30.04.2014
  SIGNA_ID = 1
  DTD_ID = 2
  RP_ID = 3
  FORM_ID = 3
  RECEIPT_ID_PAR = 24




Здесь все верно, свои измененные значения я вижу.
Но почему они в таблице не изменяются.
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600193
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartnyankaЗдесь все верно, свои измененные значения я вижу.
Но почему они в таблице не изменяются.
Очевидно потому, что дальше нет записи о Commit.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не срабатывает update
    #38600194
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartnyankaIBStoredProcReceipt
гм. почитай-ка ты
http://www.ibase.ru/devinfo/ibx.htm#ibstoredproc
и
http://www.ibase.ru/devinfo/sp_call.htm

а то и suspend в процедуру влепил, и чего-то ожидаешь от IBStoredProc. Ну и про транзакции тоже, хоть в ibx.htm, хоть списке статей в конце.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не срабатывает update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]