Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не срабатывает update / 11 сообщений из 11, страница 1 из 1
29.03.2014, 23:39:42
    #38600002
dartnyanka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает update
Есть ХП для добавления, изменения и удаления записей в таблицу:

Код: 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
30.03.2014, 01:09:52
    #38600032
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает update
dartnyanka DM.IBTransaction.RollbackRetaining;
DM.IBTransaction.CommitRetaining;
не надо retaining. Во всех же статьях написано, что это плохо, и почему.

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

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

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

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

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

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

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


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

ему проще включить IBSQLMonitor.
...
Рейтинг: 0 / 0
30.03.2014, 16:05:16
    #38600191
dartnyanka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает update
Вот это получено с 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
30.03.2014, 16:20:13
    #38600193
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает update
dartnyankaЗдесь все верно, свои измененные значения я вижу.
Но почему они в таблице не изменяются.
Очевидно потому, что дальше нет записи о Commit.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.03.2014, 16:24:05
    #38600194
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает update
dartnyankaIBStoredProcReceipt
гм. почитай-ка ты
http://www.ibase.ru/devinfo/ibx.htm#ibstoredproc
и
http://www.ibase.ru/devinfo/sp_call.htm

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


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