SQLRU.net
Разработка приложений баз данных

Сегодняшние сообщения (вкл)  | Сообщения без ответа (откл)

Форум: Delphi
 Тема: FMX Grid
Re: FMX Grid [сообщение #5068 является ответом на сообщение #5059] Fri, 17 May 2024 00:50
SD в настоящее время в онлайне  SD
Сообщений: 350
Зарегистрирован: August 2022
Senior Member
Вот как раз в качестве универсальной библиотеки её действительно стоило закопать. А вот как библиотека к локальным навигационным базам типа Парадокс/ДБазе - она была и до сих пор остаётся одной из лучших. Если хорошо покопаться в ODBC/ADO драйвере для Парадокса - выкопаешь урезанную BDE.
Форум: Firebird, HQbird, InterBase
 Тема: Странность с исключениями в EB
Странность с исключениями в EB [сообщение #5069] Fri, 17 May 2024 00:56
SD в настоящее время в онлайне  SD
Сообщений: 350
Зарегистрирован: August 2022
Senior Member
Вот вводная:
create sequence test_gen;

recreate table test_row
(id int not null,
 did int not null,
 pid int not null,
 dep int not null
);
alter table test_row add constraint pk_test_row primary key(id);
create unique index ix_test_row1 on test_row(did, pid, dep);
commit;

insert into test_row(id, did, pid,dep) values(1, 2, 3, 4);
commit;
Вот собственно блок:
set term !!;
execute block returns(id int, did int, dep int, pid int)
as
declare variable xid int;
begin
  select id,did, pid,dep
    from test_row
   where id=(select min(id) from test_row)
    into :xid, :did, pid, :dep;

  while (1=1) do
  begin
    delete from test_row r where r.id = :xid;

    insert into test_row(id, did, dep, pid)
    values (gen_id(test_gen, 1), :did, :dep, :pid);

    suspend;

  when any do
    exception;
  end
end !!
Вопрос на засыпку: почему он перед ошибкой возвращает две строки?

Совершенно аналогичная процедура:
create or alter procedure sp_test
  returns(id int, did int, dep int, pid int)
as
declare variable xid int;
begin
  select id,did, pid,dep
    from test_row
   where id=(select min(id) from test_row)
    into :xid, :did, pid, :dep;

  while (1=1) do
  begin
    delete from test_row r where r.id = :xid;

    insert into test_row(id, did, dep, pid)
    values (gen_id(test_gen, 1), :did, :dep, :pid);

    suspend;

  when any do
    exception;
  end
end !!
select * from sp_test !!
Возвращает одну строку.

Чего я не понимаю?



Текущее время: Fri May 17 01:49:40 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00812 секунд