【问题标题】:How to insert integer value into SQLite table at Delphi如何在 Delphi 将整数值插入 SQLite 表
【发布时间】:2013-10-07 09:16:01
【问题描述】:

我正在尝试在 Delphi 的 SQLite 表中插入整数值。
在表中empusergroup_id 是整数,labeldescription 是字符串数据类型。
我的代码如下:

var
  gid: Integer;
  sdescription,ldescription: String;
begin
  sdescription := RzEdit1.Text;
  ldescription := RzMemo1.Text;
  gid := Integer(RzComboBox1.Items.Objects[RzComboBox1.Items.IndexOf(gname)]);

  try
    SQLConnection1.Connected := true;
    SQLMonitor1.Active := True;
    sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (gid,''' + sdescription + ''',''' + ldescription + ''' )';
    SQLConnection1.ExecuteDirect(sSql);

  except
    on E: EDatabaseError do
      ShowMessage('Exception raised with message' + E.Message);
  end;
end;

它给了我一个错误Unknown column gid
当我尝试使用固定整数值而不是变量进行类似操作时,它可以工作:

sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (1,''' + sdescription + ''',''' + ldescription + ''' )';

它成功地将值插入到表中。
如何使用上述查询将gid 的整数值插入数据库。正确的格式是什么?

【问题讨论】:

    标签: sqlite delphi delphi-xe3


    【解决方案1】:

    您的 gid 成为 SQL 语句的一部分(因此出现错误:Unknown column gid)。
    您需要使用 Delphi gid 变量来构造 SQL 语句(就像您使用 sdescriptionldescription 所做的那样):

    sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (' + InttoStr(gid) + ', ''' + sdescription + ''',''' + ldescription + ''' )';
    

    如果您使用 Parameters,您将不会有如此混乱的查询/代码(也可能会受到 SQL 注入等影响),例如:

    qry := TSQLQuery.Create(nil); // or what ever TQuery component you use in your framework
    try
      qry.SQLConnection := SQLConnection1;
      qry.SQL.Text := 'INSERT INTO emp(usergroup_id, label, description) VALUES (:usergroup_id, :label, :description)';
      qry.Params.ParamByName('usergroup_id').Value := gid;
      qry.Params.ParamByName('label').Value := sdescription;
      qry.Params.ParamByName('description').Value := ldescription;
      qry.ExecSQL;
    finally
      qry.Free;
    end;
    

    【讨论】:

    • 奖励代码和详细答案有所帮助,但是出现参数 usergroup_id not found 之类的错误,与标签和描述相同。我正在使用TSQLQuery TQuery 的后代并修改代码如下qry.Params.ParamByName('usergroup_id').Value := gid;
    • 一如既往,为参数+1 ;)
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多