Что такое «отсутствующее свойство SQL» здесь? - PullRequest
2 голосов
/ 30 ноября 2011

При попытке выполнить код:

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».Где я неправ?Заранее спасибо!

Ответы [ 3 ]

8 голосов
/ 30 ноября 2011

Вы звоните rsnome.Open перед установкой SQL с помощью rsnome.SQL.Text := ....

5 голосов
/ 30 ноября 2011

Я не думаю, что вы вообще хотите использовать Open, и вы неправильно используете параметры.
т. е. SQL не содержит никаких заполнителей PARAM. Я думаю, что это должно быть что-то вроде: rsnome.SQL.Text:='UPDATE enroll SET nome = :NOME where id = :ID';

Смотрите этот пример: Ошибка AdoQuery с использованием параметров

4 голосов
/ 30 ноября 2011

У вас есть несколько ошибок. Вы звоните 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;
...