我正在尝试将一些文本插入到sqlite数据库中。
我使用FireDac连接和FireDac查询(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不返回结果集。提示使用执行? ExecSql metnod用于非选择命令。
从注释代码中我可以看到我正在尝试ExecSql但是同样的错误。
答案 0 :(得分: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;
答案 1 :(得分:0)
将FDQuery1.Open替换为FDQuery1.ExecSQL;
但你的判断“选择* ...”不要在数据库中插入任何记录......