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!

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top