Sql IBQuery插入-列未知/不支持的功能
我试图在firebird数据库中插入一行,但调用时出现异常:Sql IBQuery插入-列未知/不支持的功能,sql,delphi,firebird,auto-increment,interbase,Sql,Delphi,Firebird,Auto Increment,Interbase,我试图在firebird数据库中插入一行,但调用时出现异常: datamodule1.IBQuery1.prepare 项目xyz.exe引发异常类EIBInterBaseError,并显示消息 'Dynamic SQL Error SQL Error code=-206列未知索引uuuu位于 第25行第25栏' 我将以下组件捆绑在一起: IB数据库 IBTransaction 数据来源 IBQuery 以上问题已解决-编辑>> 好的,我变了 Add( 'INSERT INTO MST_EVE
datamodule1.IBQuery1.prepare
项目xyz.exe引发异常类EIBInterBaseError,并显示消息
'Dynamic SQL Error SQL Error code=-206列未知索引uuuu位于
第25行第25栏'
我将以下组件捆绑在一起:
IB数据库
IBTransaction
数据来源
IBQuery
以上问题已解决-编辑>>
好的,我变了
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和相同的client/server.dll,我可以使用所有的值完美地插入行。解决方案正在更改行
Params[6].AsLongWord := 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中设置了生成器和插入前触发器:
现在没事了。慢一点。确保已提交所有列更改,并且所有列名都与查询中列出的列名匹配。使用引号应该有效。不匹配的是设备和网关列名的名称。但是很难说你在这里发布了哪个版本。@Tlama对不起,我修改了粘贴在这里的代码,但是问题的第一部分已经解决了,现在面临另一个例外。。。。。。价值观…-在查询中添加括号text@Abelisto抱歉,是的,这只是我从粘贴的代码中漏掉的另一件事,但在代码编辑器中没有问题,所以这不是问题。我编辑了我的问题,希望没有更多的错误。你真的不应该在回答中问然后回答另一个问题。我建议你发布另一个问题并自己回答,然后从这个答案中删除该部分。@MarkRotterveel是的,你是对的,但请让我原封不动地留在这里。我用“自动递增”标签完成了我的问题,因此有人也可以找到该问题的答案。下一次我会更加坚持。
Params[6].AsLongWord := FMst.EventRecordDevID;
Params[6].AsLargeInt := FMst.EventRecordDevID;
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;