1

我正在尝试将一些文本插入到 sqlite 数据库中。

我正在使用 FireDac 连接和 FireDac Query(FDQuery1) 连接到 sqLite 数据库。这是代码。

FDQuery1.SQL.Text := 'select * from Invoice where Name = :Name';
FDQuery1.ParamByName('Name').AsString := '123';
FDQuery1.Open;
LinkListControlToField1.BindLink.FillList

我似乎在数据库中插入了一条新记录,但所有字段均为空。可能是什么问题呢 ?

现在我正在使用

NEW_NAME:='dfddf';

  SQL :='INSERT INTO INVOICE (Name) VALUES (:NEW_NAME)';
  fdquery1.Close;
  fdquery1.SQL.Text:= SQL;
  FdQuery1.Open();
  FDQuery1.Insert;
  //Fdquery1.ParamByName('New_Name').AsString := NEW_NAME;
  //fdquery1.SQL.Text:='INSERT INTO INVOICE (Name) VALUES (:NEW_NAME)';
  fdquery1.FieldByName('Name').AsString := quotedstr(NEW_NAME);
  //fdquery1.ExecSQL();
  fdquery1.Post;

我收到错误消息。FireDac、Phys、Sqlite - 308 无法打开/定义命令,wiich 不返回结果集。提示使用执行?用于非 Select 命令的 ExecSql metnod。

正如您从注释代码中看到的那样,我正在尝试 ExecSql 但同样的错误。

4

2 回答 2

3

虽然 SELECT sql 语句无法将数据插入表中,但可以通过通过 SELECT sql 语句连接到表的 TDataset 后代插入/附加记录。

例如:

FDQuery1.SQL.Text := 'select * from Invoice';
FDQuery1.Open;

NEW_NAME:='dfddf';
FDQuery1.Append;  // or FDQuery1.Insert;
FDQuery1.FieldByName('Name').AsString := NEW_NAME;
// set other column values as needed
FDQuery1.Post;

如果您更喜欢使用 INSERT:

FDQuery1.SQL.Text := 'INSERT INTO INVOICE (Name) VALUES (:NEW_NAME)';

NEW_NAME := 'dfddf';
FDQuery1.ParamByName('NEW_NAME').AsString := NEW_NAME;
// you will have to define parameters for each column
FDQuery1.ExecSQL;
于 2013-09-28T00:09:34.450 回答
0

将 FDQuery1.Open 替换为 FDQuery1.ExecSQL;

但是您声明“选择* ...”不要在数据库中插入任何记录...

于 2013-09-23T17:36:18.537 回答