什么是“缺少SQL属性”?

时间:2011-11-30 12:43:49

标签: delphi tadoquery

尝试执行代码时:

function TDBClass.addNome(nome: String): String;
var
  rsnome: TADOQuery;
begin
  rsnome := TADOQuery.Create(nil);
  rsnome.Connection := connection;
  rsnome.Open();
  rsnome.SQL.Clear;
  rsnome.SQL.Text:='UPDATE enroll SET nome = "test" where id ="1"';
  rsnome.Parameters.ParamByName('nome').Value:= nome;
  rsnome.ExecSQL;
  rsnome.post();
  rsnome.Close();
  rsnome.Free();
end;

我收到错误消息“Missing SQL property”。我哪里出错了?
提前谢谢!

3 个答案:

答案 0 :(得分:8)

在通过rsnome.Open设置SQL之前,您正在调用rsnome.SQL.Text := ...

答案 1 :(得分:5)

我认为您根本不想使用Open,而且您使用的参数不正确 即SQL中没有任何:PARAM占位符。我认为应该是这样的:rsnome.SQL.Text:='UPDATE enroll SET nome = :NOME where id = :ID';

查看此示例: AdoQuery Error using parameters

答案 2 :(得分:4)

您有几个错误。您在分配SQL之前调用了Open(并且无需这样做)。

您尝试设置参数值,但尚未创建要接受的参数。 (顺便说一句,我将ID也作为参数,因此您可以使用它来更新多个人的姓名。)

您没有处理以确保在发生错误的情况下清理事情(鉴于您发布的代码肯定会出现错误)。

您正在使用Post,这对SQL数据库来说并不是必需的。

尝试这样的事情:

function TDBClass.addNome(nome: String): String;
var
  rsnome: TADOQuery;
begin
  rsnome := TADOQuery.Create(nil);
  try
    rsnome.Connection := connection;
    rsnome.SQL.Clear;
    rsnome.SQL.Text:='UPDATE enroll SET nome = :nome where id ="1"';
    rsnome.Parameters.ParamByName('nome').Value:= nome;
    rsnome.ExecSQL;
    rsnome.Close();
  finally
    rsnome.Free();
  end;
end;