Каковы «недостающее свойство SQL» здесь?
Вопрос
При попытке выполнить код:
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;