You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ADOQuery插入记录时提示“无效列名”问题求助

Delphi ADOQuery插入记录时报“无效列名”错误

我在通过ADOQuery向数据库表中插入新记录时遇到问题,系统提示“无效列名”错误。该ADOQuery已连接至ADOConnection,且ADOConnection已与数据库建立连接。我已核对过表名与列名,确认与数据库中的完全一致,相关代码如下:

procedure TForm3.btn_addClick(Sender: TObject);
begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(' INSERT INTO [ORGANISMES](NOM_ORG) VALUES  ("helloworld")');
    ADOQuery1.ExecSQL;
end;

对应的SQL语句:

INSERT INTO [ORGANISMES] (NOM_ORG) VALUES ("helloworld");

问题原因及解决方法

问题出在SQL语句的字符串引号使用上:大多数数据库(如SQL Server、MySQL)要求字符串常量用单引号包裹,双引号默认用于标识对象名(列名、表名等)。你用"(即双引号)包裹helloworld,数据库会把它识别为列名,因此触发“无效列名”错误。

直接修改引号的解决代码

将Delphi代码中的"替换为转义后的单引号(Delphi中用两个单引号表示一个实际单引号):

procedure TForm3.btn_addClick(Sender: TObject);
begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(' INSERT INTO [ORGANISMES](NOM_ORG) VALUES  (''helloworld'')');
    ADOQuery1.ExecSQL;
end;

对应的正确SQL语句:

INSERT INTO [ORGANISMES] (NOM_ORG) VALUES ('helloworld');

更推荐的参数化查询方式

使用参数化查询可以避免SQL注入风险,同时省去引号转义的麻烦:

procedure TForm3.btn_addClick(Sender: TObject);
begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(' INSERT INTO [ORGANISMES](NOM_ORG) VALUES  (:NOM_ORG)');
    ADOQuery1.Parameters.ParamByName('NOM_ORG').Value := 'helloworld';
    ADOQuery1.ExecSQL;
end;

内容的提问来源于stack exchange,提问作者safoane bazine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:27:18