PDA

Ver la Versión Completa : Insert con mydac


emeritos
05-12-2006, 13:27:24
1.- Estoy utilizando el objeto MyQuery y he visto que exite una propiedad llamada SQLInsert, y que ha generado automaticamente una insercion:

INSERT INTO num_perdido
(codigo_mp, numero_perdido)
VALUES
(:codigo_mp, :numero_perdido)

Pues bien, que se pondria en el VALUES si el codigo_mp o el otro campo, fuese o viniese de otra tabla (ejemplo MyQuerycodigos['codigo_mp']) o biniese de un EDIT o de un DBEdit (campo enlazado).


2.- Ha por cierto que siginifica en el borrado o en la modificacion

**** =:Old_codigo_mp

no lo veo claro, aunque todo funciona bien.


3.- Por ultimo, para ejecutar una sentencia SQL dentro de un MyQuery hay que poner MyQuerycodigos.Execute.



Gracias por todo..

Bicho
06-12-2006, 00:28:56
Hola,

Vamos a ver si yo tambien me aclaro.



1.- Estoy utilizando el objeto MyQuery y he visto que exite una propiedad llamada SQLInsert, y que ha generado automaticamente una insercion:

INSERT INTO num_perdido
(codigo_mp, numero_perdido)
VALUES
(:codigo_mp, :numero_perdido)

Pues bien, que se pondria en el VALUES si el codigo_mp o el otro campo, fuese o viniese de otra tabla (ejemplo MyQuerycodigos['codigo_mp']) o biniese de un EDIT o de un DBEdit (campo enlazado).

A la hora de asignarlos los parámetros lo harías así:
MyQuery.ParamByName('codigo_mp').AsString := MyQueryCodigos['codigo_mp']; //creo que iria así, si me equivoco que me corrigan.


2.- Ha por cierto que siginifica en el borrado o en la modificacion

**** =:Old_codigo_mp

no lo veo claro, aunque todo funciona bien.

Supongo que te refieres a lo que sigue a los dos puntos, ¿no?
En este caso, los dos puntos delante de un nombre de lo que en teoria debiera ser un valor, indica parámetro, es decir, ese valor se le manda por parámetro a la consulta (al igual que en el insert anterior). Lo que haces es indicarle al SQL que le pasarás un valor por parámetro, y ese parámetro se llama Old_codigo_mp.
Para pasarle ese parámetro, lo harás de la siguiente manera:


MyQuery.ParamByName('Old_codigo_mp').AsString := //aquí pones el valor que le mandes;
//He puesto AsString, pero tu le mandas el tipo de dato que esté esperando esa columna en la tabla.


3.- Por ultimo, para ejecutar una sentencia SQL dentro de un MyQuery hay que poner MyQuerycodigos.Execute.

Depende, si la sentencia es de consulta (SELECT), no necesitas el Execute, puede usar el método Open o la propiedad Active := True;
En caso de que la sentencia implique modificación de datos (inserta, delete, update, drop, create, ...) si debes usar el método Execute.

Espero te sirva.

Saludos

emeritos
06-12-2006, 09:55:11
He puesto este codigo pero me da un error en las sentencias ParamByName diciendome que no funciona codigo_mp y si le cambio de nombre tambien.


MQnumperdido.ParamByName('codigo_mp').AsInteger := MQentradamp['codigo_mp'];

MQnumperdido.ParamByName('numero_perdido').AsInteger := MQentradamp['n_entrada'];

MQnumperdido.SQLInsert.Clear;
MQnumperdido.SQLInsert.Add('INSERT INTO num_perdido (codigo_mp, numero_perdido) VALUES (:codigo_mp, :numero_perdido)');

MQnumperdido.Execute;