Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

И снова Firebird, dialect 3 - не хочет создавать функцию [D6, Firebird]


XM-AD ©   (2002-12-05 15:57:00) 

Вобщем на 5.5 работала функция, которая по наступлению некоторого события начинала делать Insert-ы и Update-ы. Так вот при вписании этой функции в скрипт создания базы получается такая фишка:
//* $$ ******** ERROR *************
//FAILED - The insert, update, delete, ddl or authorization statement cannot
// be executed because the transaction is inquiry only.
//SQL error code = -817.
//Metadata update statement is not allowed by the current database SQL dialect 3.
//


Причем в других функциях Insert-ы с Update-ами съедает нормально... :(
Что это такое и как с ним бороться?


Smashich   (2002-12-05 20:32:00) [1]

То FreeLanser:

куда интересно подевался тип date из dialect 3?


FreeLancer   (2002-12-05 18:03:00) [2]

http://www.ibase.ru/migration.htm


FreeLancer   (2002-12-05 18:00:00) [3]

1. Переменные в объявлении и в теле должны выглядеть одинаково
DIRECTION - DIRECTION а не Direction
2. ACTIONTIME DATE типа DATE нет в Dialect 3
3. Ругается на что-то еще :-)


Digitman   (2002-12-05 17:53:00) [4]

почему бы не сделать сразу

CREATE PROCEDURE REG_ACTION (BARCODE VARCHAR(10) CHARACTER SET WIN1251, DIRECTION CHAR(1) CHARACTER SET WIN1251,ACTIONTIME DATE)
AS ... и т.д.

Могу ошибаться, но ,как помнится, IB5.x не допускала таких "выкрутасов", когда процедура создается/модифицируется с различным рабором параметров


XM-AD   (2002-12-05 17:17:00) [5]

CREATE PROCEDURE REG_ACTION AS BEGIN EXIT; END ^

ALTER PROCEDURE REG_ACTION (BARCODE VARCHAR(10) CHARACTER SET WIN1251, DIRECTION CHAR(1) CHARACTER SET WIN1251,ACTIONTIME DATE)
AS
declare variable PERSON_POSITION CHAR(1);
declare variable BAD_DIR INTEGER;
declare variable EXPIRY_DATE TIMESTAMP;
declare variable PASS_TYPE CHAR(1);
declare variable LAST_COME TIMESTAMP;
declare variable LAST_DATE TIMESTAMP;
declare variable ACTION_DATE TIMESTAMP;
declare variable TIME_IN TIMESTAMP;
declare variable TIME_OUT TIMESTAMP;
declare variable DOSAVE INTEGER;
declare variable REFRESHMODE INTEGER;
begin
select Person_Position, Expiry_Date, Pass_Type, Last_Come
from Pass
where Barcode=:Barcode
into :Person_Position, :Expiry_Date, :Pass_Type, :Last_Come;

if (Last_Come is Null) then Last_Come=Cast("1.1.2000" as date);
Last_Date=f_StripTime(Last_Come);
Action_Date=f_StripTime(ActionTime);

if ((Person_Position=Direction) or (Last_Date<>Action_Date))then
Bad_Dir=1;
else
Bad_Dir=0;

insert into PassLog (Barcode, Direction, Action_Time, Bad)
values (:Barcode, :Direction, :ActionTime, :Bad_Dir);

Time_IN=null;
Time_Out=Null;
dosave=0;
Bad_Dir=1;
if (Direction="O") then
begin
dosave=1;
Time_Out=ActionTime;
if (Person_Position="I") then
begin
if (Last_Date=Action_Date) then
begin
Time_IN=Last_Come;
Bad_Dir=0;
end
else
begin
Time_IN=Last_Come;
insert into passlogex(Barcode, Time_IN, Action_Date, Bad)
values (:Barcode, :Time_IN, :Last_Date, :Bad_Dir);
Last_Date=Action_Date;
Time_In=Null;
end
end
end
else
begin
if (Person_Position="I") then
begin
dosave=1;
Time_IN=Last_Come;
end
end

if (dosave=1) then
insert into passlogex(Barcode, Time_IN, Time_Out, Action_Date, Bad)
values (:Barcode, :Time_IN, :Time_Out, :Last_Date, :Bad_Dir);

if ((Pass_Type="D") and (Expiry_Date is null)) then
update Pass
set
Person_Position=:Direction,
Last_Come=:ActionTime,
Expiry_Date="today"
where Barcode=:Barcode;
else
update Pass
set
Person_Position=:Direction,
Last_Come=:ActionTime
where Barcode=:Barcode;
RefreshMode=Gen_ID(gen_refresh_mode,-RefreshMode);
when any do
RefreshMode=Gen_ID(gen_refresh_mode,-RefreshMode);

END ^


Digitman   (2002-12-05 16:47:00) [6]

приведи соотв.фрагмент скрипта


Наверх

Титульная страница Поиск, карта сайта Написать письмо