Ir al contenido


Foto

Lazarus-Firebird 2.1-SQLDb. INSERTAR REGISTRO


  • Por favor identifícate para responder
2 respuestas en este tema

#1 fwhite

fwhite

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 09 agosto 2012 - 06:11

Hola amigos.
Haber si alguno de vosotros me decís en que me equivoco. Tengo una form con varios DBEdits y un DBNavigator enlazados con una SQLQuery (MiQuery) y quiero insertar un registro en una tabla. Hago lo siguiente:

En el evento BeforeInsert de MiQuery defino los parámetros:



delphi
  1. With dmMain.MiQuery do
  2. begin
  3.   ParamByName('Nombre').AsString := DBEditNombre.Text;
  4.   ParamByName('Apellidos).AsString := DBEditApel.Text;
  5. end;



En la propiedad Params de MiQuery los defino con el mismo nombre de los ParamsByName y asigno su propiedad DataType como ftString.

Después coloco la siguiente consulta en la propiedad InsertSQL de MiQuery:



delphi
  1. INSERT INTO MiTabla
  2. (Nombre, Apellidos)
  3. VALUES
  4. (:Nombre, :Apellidos)



Al intentar hacer la inserción en modo ejecución me da el siguiente error:

"MiQuery: Parameter 'Nombre' not found."

¿Que estoy haciendo mal?. Un saludo.
  • 0

#2 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 09 agosto 2012 - 07:00

intenta darle esta forma:



delphi
  1. With dmMain.MiQuery do
  2. begin
  3.   SQL.Text:='INSERT INTO MiTabla (Nombre, Apellidos) VALUES (:Nombre, :Apellidos)';
  4.   ParamByName('Nombre').AsString := DBEditNombre.Text;
  5.   ParamByName('Apellidos).AsString := DBEditApel.Text;
  6.   ExecSQL;
  7. end;



  • 0

#3 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 09 agosto 2012 - 07:07

Buenas,

Desde mi desconocimiento de Lazarus y del componente SQLQuery, si el componente tiene una propiedad InsertSQL, NO necesita parámetros.

Los parámetros especificados sólo afectarán a la sentencia Select, no a las sentencias de gestión de datos.

Por otro lado, si funciona igual que en Delphi, usando componentes DataAware no necesitas hacer nada en el BeforeInsert, los propios componentes deberían de encargarse de alimentar la sentencia de Insert/Update/Delete especificada en sendas propiedades.

Repito, todo esto desde mi desconocimiento de Lazarus y asumiendo el mismo comportamiento que en Delphi

Nos leemos

  • 0




IP.Board spam blocked by CleanTalk.