我试图将一行插入firebird数据库(嵌入式),但在调用时发生异常:
datamodule1.IBQuery1.prepare
项目xyz.exe引发了带有消息的异常类EIBInterBaseError '动态SQL错误SQL错误代码= -206列未知INDEX_ At 第25栏第37行。
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;
我将以下组件捆绑在一起:
上述问题已解决 - 编辑>>
好的,我已经改变了
Add( 'INSERT INTO MST_EVENTS (eventindex, state_, event_, param_, date_, time_, devID_, gateway_)' );
到
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版本是2.5嵌入式32位
我取出了所有的字符串和日期/时间参数,但我得到了例外。 使用IBExpert和相同的客户端/服务器.dll我可以完美地插入行(使用所有值)。
答案 0 :(得分:0)
解决方案正在改变行
Params[6].AsLongWord := FMst.EventRecordDevID;
到
Params[6].AsLargeInt := FMst.EventRecordDevID;
但请如何自动增加字段'Nr _'?
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].AsLargeInt := FMst.EventRecordDevID;
Params[7].AsString := FMst.EventRecordIP;
//
if ( prepared = false ) then
prepare; //Throws an exception here (SOLVED)
execSQL; //Now getting exception here
end;
我用火焰发生器制造发电机。
但是获得异常(在调用'execSQL'时):
编辑>>
我在IBExpert中设置了一个生成器和一个BEFORE INSERT触发器:
现在还可以。