Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql IBQuery插入-列未知/不支持的功能_Sql_Delphi_Firebird_Auto Increment_Interbase - Fatal编程技术网

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

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

我试图在firebird数据库中插入一行,但调用时出现异常:

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;