【发布时间】:2014-08-06 13:35:31
【问题描述】:
我试图在 firebird 数据库(嵌入式)中插入一行,但在调用时出现异常:
datamodule1.IBQuery1.prepare
项目 xyz.exe 引发异常类 EIBInterBaseError 并显示消息 '动态 SQL 错误 SQL 错误代码 = -206 Column unknown INDEX_ At 行,第 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;
我将以下组件捆绑在一起:
- IB 数据库
- IBTransaction
- 数据源
- IB 查询
上述问题已解决 - 编辑 >>
好的,我变了
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 嵌入式 32bit
我取出了所有字符串和日期/时间参数,但我得到了异常。 使用 IBExpert 和相同的客户端/服务器 .dll,我可以完美地插入行(使用所有值)。
【问题讨论】:
-
慢下来。确保您已提交所有列更改,并且所有列名与查询中列出的名称匹配。使用引号应该可以。不匹配的是
devID_和gateway_列名的名称。但很难说您在此处发布了哪个版本。 -
@Tlama 抱歉,我修改了这里粘贴的代码,但是第一部分的问题已经解决了,现在又遇到了一个异常...
-
... values ( ... )- 在查询文本中添加括号 -
@Abelisto 抱歉,是的,这只是我在粘贴代码中遗漏的另一件事,但在代码编辑器中没问题,所以这不是问题。
-
我编辑了我的问题,希望不再有错误。
标签: sql delphi firebird auto-increment interbase