XSQLDA index out of range
XSQLDA index out of range
IB 6
это сообщение об ошибке выходит когда я пытаюсь сделать INSERT
в эту таблицу
CREATE GENERATOR GEN_SN_FILE;
CREATE TABLE SN_FILE (
CODE INTEGER NOT NULL,
FILE_TYPE CHAR(1) NOT NULL,
LINE VARCHAR(4000),
DIRECTION SMALLINT NOT NULL,
CODE_ORG SMALLINT NOT NULL
);
ALTER TABLE SN_FILE ADD CONSTRAINT CHK_SN_FILE check (FILE_TYPE IN ('A','D'));
ALTER TABLE SN_FILE ADD CONSTRAINT PK_SN_FILE PRIMARY KEY (CODE);
CREATE INDEX NDX_SN_FILE_TYPE ON SN_FILE (FILE_TYPE);
SET TERM ^ ;
/* Trigger: TR_BI_SN_FILE */
CREATE TRIGGER TR_BI_SN_FILE FOR SN_FILE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.CODE = GEN_ID(GEN_SN_FILE,1);
END
^
SET TERM ; ^
из этой процедуры
function TDataProcessor.List2Table(var ErrMsg: string): Boolean;
var
i: Integer; //FQuery: TIBQuery
begin
Result:=True;
try
FQuery.SQL.Text:= 'DELETE FROM SN_FILE WHERE FILE_TYPE=''D'' AND DIRECTION='+FDirection+' AND CODE_ORG='+FGetterCode+';';
FQuery.ExecSQL;
for I := 0 to FListFile.Count - 1 do
begin
FQuery.SQL.Text:='INSERT INTO SN_FILE (FILE_TYPE, LINE, DIRECTION, CODE_ORG) VALUES'
+'(''D'','+QuotedStr(FListFile.Strings)+','+FDirection+','+FGetterCode+');';
FQuery.ExecSQL;
Inc(FRowsProcessed);
if FRowsProcessed > MaxRowsProcessed then
begin
Application.ProcessMessages;
FRowsProcessed:= 1;
end;
end;
except on E: Exception do
begin
ErrMsg:=E.Message + FListFile.Strings+#13+'Line = '+IntToStr(i);
Result:=False;
FQuery.Transaction.RollbackRetaining;
end;
end;
end;
Строка с инсертом на которой возникает исключительная ситуация
без этой процедуры проходит без ошибок.
и перед ошибкой процедура записывает в таблицу более 7 тыс записей
Помогите разобратся в чем проблема ?
это сообщение об ошибке выходит когда я пытаюсь сделать INSERT
в эту таблицу
CREATE GENERATOR GEN_SN_FILE;
CREATE TABLE SN_FILE (
CODE INTEGER NOT NULL,
FILE_TYPE CHAR(1) NOT NULL,
LINE VARCHAR(4000),
DIRECTION SMALLINT NOT NULL,
CODE_ORG SMALLINT NOT NULL
);
ALTER TABLE SN_FILE ADD CONSTRAINT CHK_SN_FILE check (FILE_TYPE IN ('A','D'));
ALTER TABLE SN_FILE ADD CONSTRAINT PK_SN_FILE PRIMARY KEY (CODE);
CREATE INDEX NDX_SN_FILE_TYPE ON SN_FILE (FILE_TYPE);
SET TERM ^ ;
/* Trigger: TR_BI_SN_FILE */
CREATE TRIGGER TR_BI_SN_FILE FOR SN_FILE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.CODE = GEN_ID(GEN_SN_FILE,1);
END
^
SET TERM ; ^
из этой процедуры
function TDataProcessor.List2Table(var ErrMsg: string): Boolean;
var
i: Integer; //FQuery: TIBQuery
begin
Result:=True;
try
FQuery.SQL.Text:= 'DELETE FROM SN_FILE WHERE FILE_TYPE=''D'' AND DIRECTION='+FDirection+' AND CODE_ORG='+FGetterCode+';';
FQuery.ExecSQL;
for I := 0 to FListFile.Count - 1 do
begin
FQuery.SQL.Text:='INSERT INTO SN_FILE (FILE_TYPE, LINE, DIRECTION, CODE_ORG) VALUES'
+'(''D'','+QuotedStr(FListFile.Strings)+','+FDirection+','+FGetterCode+');';
FQuery.ExecSQL;
Inc(FRowsProcessed);
if FRowsProcessed > MaxRowsProcessed then
begin
Application.ProcessMessages;
FRowsProcessed:= 1;
end;
end;
except on E: Exception do
begin
ErrMsg:=E.Message + FListFile.Strings+#13+'Line = '+IntToStr(i);
Result:=False;
FQuery.Transaction.RollbackRetaining;
end;
end;
end;
Строка с инсертом на которой возникает исключительная ситуация
без этой процедуры проходит без ошибок.
и перед ошибкой процедура записывает в таблицу более 7 тыс записей
Помогите разобратся в чем проблема ?
Re: XSQLDA index out of range
Ну почему нельзя нормально оформить сообщение, отформатировать код?!
FQuery.SQL.Text:='INSERT INTO SN_FILE (FILE_TYPE, LINE, DIRECTION, CODE_ORG) VALUES'
+'(''D'','+QuotedStr(FListFile.Strings)+','+FDirection+','+FGetterCode+');';
что это за "D" ? в третьем диалекта так объекты именуются.
ты посмотри, что за результирующий sql у тебя получился, и попробуй его выполнить например в ibexpert.
FQuery.Transaction.RollbackRetaining;
вот это тоже - к чему оно? retaining, я имею в виду. просто так?
вот чудище, зачем тебе ВОЗОБНОВЛЯТЬ транзакцию в которой ты всего лишь вставляешь данные? Делай rollback, а потом стартуй IBTransaction когда тебе надо. Ты где вычитал, что rollbackRetaining тебе жизненно необходим?
насчет третьего диалекта и двойных кавычек.
Select * from "Table" - "Table" - это имя объекта, таблицы.
Почитал бы ты лучше документацию на эту тему.
приведи текст запроса, который "выполняется" в IBExpert.
дальше - по ошибке тебе надо смотреть свой собственный код и значения переменных при выполнении ошибочного оператора. Ты же exception перехватываешь? ну и дебаггером его, дебаггером. Скорее всего у тебя там какая-нибудь муть со значениями переменных.
насчет третьего диалекта и двойных кавычек.
Select * from "Table" - "Table" - это имя объекта, таблицы.
Почитал бы ты лучше документацию на эту тему.
приведи текст запроса, который "выполняется" в IBExpert.
дальше - по ошибке тебе надо смотреть свой собственный код и значения переменных при выполнении ошибочного оператора. Ты же exception перехватываешь? ну и дебаггером его, дебаггером. Скорее всего у тебя там какая-нибудь муть со значениями переменных.
'INSERT INTO SN_FILE (FILE_TYPE, LINE, DIRECTION, CODE_ORG) VALUES('D',
'U201023400003423,"N",NULL,NULL,NULL,NULL,NULL,"ÌÅÄÑÅÑÒÐÀ ","R","QK",NULL,NULL,NULL,NULL,"ÄÓÑÌÅÒÎÂÀ ",NULL,NULL,NULL,"ÍÀÔÈÑÀ","ÒÀØÊÅÍÒ","ÀÄÕÀÌÎÂÀ",NULL,NULL,
NULL,NULL,"ÊÀÐÀÑÓ 1 49/15","âðåìåííî íå ðàáîòàåò",NULL,NULL,
"ÒÀØ ÊÎË: ÊÐÀÑÍÎÃÎ ÏÎËÓÌÅÑßÖÀ ",NULL,NULL,"201023400003423","S",NULL,NULL,NULL,NULL,NULL,
NULL,#10.09.1981#,NULL,#20.05.2005#,#20.05.2005#,
NULL,NULL,1,23,2,NULL,1,139,1,1,122,10,NULL,906,23,
-1,-1,-1,NULL,NULL,-1,-1,-1,-1,122,NULL,-1,25,-1,-1,1,-1,
-1,82,NULL,61,-1,-1,NULL,1,42,-1',6,1);'#$D#$A
'U201023400003423,"N",NULL,NULL,NULL,NULL,NULL,"ÌÅÄÑÅÑÒÐÀ ","R","QK",NULL,NULL,NULL,NULL,"ÄÓÑÌÅÒÎÂÀ ",NULL,NULL,NULL,"ÍÀÔÈÑÀ","ÒÀØÊÅÍÒ","ÀÄÕÀÌÎÂÀ",NULL,NULL,
NULL,NULL,"ÊÀÐÀÑÓ 1 49/15","âðåìåííî íå ðàáîòàåò",NULL,NULL,
"ÒÀØ ÊÎË: ÊÐÀÑÍÎÃÎ ÏÎËÓÌÅÑßÖÀ ",NULL,NULL,"201023400003423","S",NULL,NULL,NULL,NULL,NULL,
NULL,#10.09.1981#,NULL,#20.05.2005#,#20.05.2005#,
NULL,NULL,1,23,2,NULL,1,139,1,1,122,10,NULL,906,23,
-1,-1,-1,NULL,NULL,-1,-1,-1,-1,122,NULL,-1,25,-1,-1,1,-1,
-1,82,NULL,61,-1,-1,NULL,1,42,-1',6,1);'#$D#$A