2

尝试执行代码时:

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;

我收到错误消息“缺少 SQL 属性”。我哪里做错了?
提前致谢!

4

3 回答 3

8

rsnome.Open在设置 SQL 之前调用rsnome.SQL.Text := ...

于 2011-11-30T12:47:45.553 回答
5

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

请参阅此示例: 使用参数的 AdoQuery 错误

于 2011-11-30T13:03:20.937 回答
4

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

您正在尝试设置一个尚未创建要接受的参数的参数值。(顺便说一句,我也会将 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;
于 2011-11-30T13:59:32.160 回答