IBQuery插入 - 列未知/不支持的功能

时间:2014-08-06 13:35:32

标签: sql delphi firebird auto-increment interbase

我试图将一行插入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;

我将以下组件捆绑在一起:

  • IBDatabase
  • IBTransaction
  • 数据源
  • IBQuery

上述问题已解决 - 编辑>>

好的,我已经改变了

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我可以完美地插入行(使用所有值)。

1 个答案:

答案 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;

我用火焰发生器制造发电机。

enter image description here

但是获得异常(在调用'execSQL'时): Validation error

编辑>>

我在IBExpert中设置了一个生成器和一个BEFORE INSERT触发器:

enter image description here enter image description here

现在还可以。