Я пытаюсь вставить строку в базу данных firebird (встроенную), но получаю исключение при вызове:
datamodule1.IBQuery1.prepare
Проект xyz.exe вызвал класс исключения EIBInterBaseError с сообщением «Динамическая ошибка SQL, код ошибки SQL = -206 Неизвестный столбец INDEX_ В строке, столбец 25».
with datamodule1.IBQuery1 do
begin
close;
With SQL do
begin
clear;
Add( 'INSERT INTO MST_EVENTS (eventindex, state_, event_, param_, date_, time_, devID_, gateway_)' );
Add( 'VALUES (:eventindex, :state_, :event_, :param_, :date_, :time_, :devid_, :gateway_') );
end;
//
GeneratorField.Field := 'Nr_';
GeneratorField.Generator := 'GEN_MST_EVENTS_ID';
//
Params[0].AsInteger := FMst.EventRecordIndex;
Params[1].AsSmallInt := FMst.EventRecordState;
Params[2].AsString := eventToStr(FMst.EventRecordEvent);
Params[3].AsSmallInt := 0;
Params[4].AsDate := FMst.EventRecordDate;
Params[5].AsTime := FMst.EventRecordTime;
Params[6].AsLongWord := FMst.EventRecordDevID;
Params[7].AsString := FMst.EventRecordIP;
//
if ( prepared = false ) then
prepare; //Throws an exception here (SOLVED)
execSQL; //Now getting exception here
end;
У меня есть следующие компоненты, связанные вместе:
- IBDatabase
- IBтранзакция
- Источник данных
- IBQuery
Вышеупомянутая проблема решена - Изменить >>
Хорошо, я изменил
Add( 'INSERT INTO MST_EVENTS (eventindex, state_, event_, param_, date_, time_, devID_, gateway_)' );
to
Add( 'INSERT INTO MST_EVENTS ("eventindex", "state_", "event_", "param_", "date_", "time_", "devID_", "gateway_")' );
... (поэтому я использую кавычки), и теперь он находит поля, но получает еще одно исключение в строке:
IBQuery1.execSQL:
Класс исключения EIBClientError с сообщением "Неподдерживаемая функция"
Мои поля:
Nr_ : INTEGER
eventindex : INTEGER
state_ : SMALLINT
event_ : VARCHAR(50)
param_ : SMALLINT
date_ : DATE
time_ : TIME
devID_ : BIGINT
gateway_ : VARCHAR(50)
Версия Firebird — встроенная 32-битная версия 2.5.
Я удалил все параметры строки и даты/времени, но получаю исключение. Используя IBExpert и тот же клиент/сервер .dll, я могу безупречно вставить строку (используя все значения).
devID_
иgateway_
. Но трудно сказать, какую версию вы разместили здесь. - person TLama   schedule 06.08.2014... values ( ... )
- добавить скобки к тексту запроса - person Abelisto   schedule 06.08.2014EIBInterBaseError
) указывает на то, что вы используете функцию, не реализованную в компоненте. - person Mark Rotteveel   schedule 06.08.2014GeneratorField
, попробовать без параметров и т. д.) и проверить документацию компонента. - person Mark Rotteveel   schedule 06.08.2014prepare
перед установкой значений параметров или не вызывайте его вообще. - person Abelisto   schedule 06.08.2014Nr_
явно, без использования генератора, и посмотрите, что произойдет. - person Wodzu   schedule 07.08.2014