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

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

XSQLDA index out of range [D6, IB6.x]


ali_tash ©   (2005-05-28 04:55:00) 

это сообщение об ошибке выходит когда я пытаюсь сделать 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[i])+','+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[i]+#13+'Line = '+IntToStr(i);
     Result:=False;
     FQuery.Transaction.RollbackRetaining;
   end;
 end;
end;

Строка с инсертом на которой возникает исключительная ситуация
без этой процедуры проходит без ошибок.

Помогите разобратся в чем проблема ?


ali_tash   (2005-05-31 00:39:00) [1]

stud

Да в строке есть апострофы и запятые
, но эта строка в IB Expert выполняется нормально, похоже что это глюк IB .

пороблему решил загрузкой в BLOB.

спасибо.


stud   (2005-05-30 11:27:00) [2]


> QuotedStr(FListFile.Strings[i])+

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


DSKalugin   (2005-05-30 11:23:00) [3]

2 ЮЮ ©   (30.05.05 09:28) [6]

не может
у меня ежедневно проходит больше модификаций в контексте одной транзакции.

В коде нет почемуто явного старта и подтверждения транзакции, а надо бы.
Сервер то какой версии?


ЮЮ   (2005-05-30 09:28:00) [4]

Т.е. 7 тыс. записей в рамках одной транзакции? А это не может быть причиной ошибки?


stud   (2005-05-30 09:18:00) [5]

а при трассировке как выглядит FQuery.SQL.Text?


ali_tash   (2005-05-28 23:20:00) [6]

DSKalugin нет за диапазон значения не выходят
code_org=1 direction=6

а строка с инсертом на которой выходит ошибка, в IB Expert проходит.


DSKalugin   (2005-05-28 13:11:00) [7]

DIRECTION   SMALLINTNOT NULL,
CODE_ORG   SMALLINTNOT NULL

SMALLINTэто целочисленное значение -32768 до +32767
Возможно ты пытаешься вставить значение, которые выходит за границы этого диапазона допустимых значений

П.С. Код не оптимизирован. Его можно ускорить


Zacho   (2005-05-28 11:04:00) [8]

Может, просто использовать именно те компоненты, которые нужны ? Т.е. для выполнения запросов есть TIBSQL, а TIBQuery вообще лучше выкинуть нафиг.
И попробуй поставить последний апдейт IBX.
И ещё не помешает почитать http://www.ibase.ru/devinfo/generator.htm


ali_tash   (2005-05-28 05:08:00) [9]

забыл написать .
перед тем как возникает ошибка, эта процедура успевает вставить в таблицу более 7 тыс записей


Наверх

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