¿Cuáles son las "propiedad SQL faltante" aquí?
Pregunta
Al intentar ejecutar el código:
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;
Estoy recibiendo el mensaje de error "Falta de propiedad SQL". ¿Qué hice mal?
¡Gracias por adelantado!
Solución
No creo que quieras usar en absoluto Open, y estás usando parámetros incorrectamente.
es decir, el SQL no tiene ninguna: param con marcadores de posición. Creo que debería ser algo como: rsnome.SQL.Text:='UPDATE enroll SET nome = :NOME where id = :ID';
Ver este ejemplo:Error de Adoquery usando parámetros
Otros consejos
Estás llamando rsnome.Open
Antes de configurar el SQL por rsnome.SQL.Text := ...
.
Tienes varios errores. Estás llamando Open
antes de asignar este SQL (y sin necesidad de hacerlo).
Está tratando de establecer un valor de parámetro que no haya creado un parámetro para aceptar. (Por cierto, haría ID también un parámetro, por lo que puede usarlo para actualizar más de un nombre de una persona).
No está manejando asegurarse de que las cosas se limpien en caso de que haya un error (que dado el código que publicó allí, ciertamente será).
Estás usando Post
, que no es necesario con una base de datos SQL.
Prueba algo como esto en su lugar:
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;