Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

Вы звоните rsnome.Open Перед установкой SQL rsnome.SQL.Text := ....

У вас есть несколько ошибок. Вы звоните Open Прежде чем вы назначили SQL (и без необходимости этого).

Вы пытаетесь установить значение параметра, которое вы не создали параметра для принятия. (Кстати, я бы сделал идентификатор также параметром, так что вы можете использовать это, чтобы обновить имя более одного человека.)

Вы не обращаетесь, следя за тем, чтобы все было очищено, если возникнет ошибка (которая, учитывая выпущенный вами код, наверняка будет).

Вы используете 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top