对于带有 SQLite 数据库的 Delphi 应用程序,我使用
TFDQuery
、TFDConnection
、TDataSource
和 TDBGrid
组件。除 AllKeys
之外的所有字段均为 VARCHAR
。 AllKeys
是TEXT
。一切都连接正确,编译并启动应用程序后,我可以在 TDBGrid
中看到数据库表中的所有记录。但是当我尝试 INSERT
进入数据库表时,我得到:
[FireDAC][Phys][SQLite]错误:接近“某物”语法错误
添加新记录的代码:
procedure TForm1.Button4Click(Sender: TObject);
begin
if (cxRichEdit2.text <> '') and (cxTextEdit2.Text <> '') and (cxTextEdit3.Text <> '') then
begin
// adding data into table
FDQuery1.sql.Text := 'INSERT INTO tblTags (Group, Title, Keys, AllKeys) VALUES (:group, :title, :keys, :allkeys)';
FDQuery1.ParamByName('group').asString := ComboBox1.Text;
FDQuery1.ParamByName('title').asString := cxTextEdit2.Text;
FDQuery1.ParamByName('keys').asString := cxTextEdit3.Text;
FDQuery1.ParamByName('allkeys').asString := cxRichEdit2.Text;
FDQuery1.ExecSQL;
end
else
ShowMessage('Please fill all important fields!');
end;
我不知道CxRichedit,但如果它的行为像VCL RichEdit,我想你必须写
FDQuery1.ParamByName('allkeys').asString := cxRichEdit2.lines.Text;
这是工作代码:
FDQuery1.sql.Text := 'INSERT INTO tblTags ("Group", "Title", "Keys", "AllKeys") VALUES (:group, :title, :keys, :allkeys)';
FDQuery1.ParamByName('group').asString := ComboBox1.Text;
FDQuery1.ParamByName('title').asString := cxTextEdit2.Text;
FDQuery1.ParamByName('keys').asString := cxTextEdit3.Text;
FDQuery1.ParamByName('allkeys').asString := cxRichEdit2.Text;
FDQuery1.ExecSQL;
我没有将表的字段放在引号“”之间。