【问题标题】:IBQuery insert - Column unknown / Unsupported featureIBQuery 插入 - 列未知/不支持的功能
【发布时间】: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


【解决方案1】:

解决办法是换线

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;

我用flamerobin制作了发电机。

但出现异常(在调用“execSQL”时):

编辑>>

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

现在好了。

【讨论】:

  • 你真的不应该在回答中问(然后回答)另一个问题。我建议您发布另一个问题并自己回答,然后从该答案中删除该部分。
  • @MarkRotteveel 是的,你是对的,但请让我把它留在这里。我使用“自动增量”标签完成了我的问题,因此也有人可以找到该问题的答案。下次我会更加一致。
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 2011-02-20
  • 1970-01-01
  • 2013-12-12
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
相关资源
最近更新 更多