XSQLDA index out of range
Добавлено: 28 май 2005, 05:07
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 тыс записей
Помогите разобратся в чем проблема ?