Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2011-06

SQLQuery y params

11 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Giuseppe Luigi Punzi

Hola a todos,

Pregunta del mill�n. Entre que hace tiempo que no programo en "Delphi" y que no encuentro respuesta, estoy volvi�ndome loco.

Como se usaban los par�metros? Tengo mi SQLQuery con un SQL del tipo: select * from articulos

y un InsertSQL del tipo:
insert into articulos(nombre) values (:nombreArt)

Si no me falla la memoria, ten�a que hacer algo del estilo:
dmDatos.qryArticulos.Params[':nombreArt'].Value := Edit1.Text;

Pero me d� error.

Igual, aprovecho. Y una vez construido los params, como se lanzaba el insert en cuesti�n, era ApplyUpdates?

Gracias, y perdonar que sean preguntas muy b�sicas, pero se podr�a decir que llevo a�os apartado de la programaci�n, y necesito ese peque�o empujoncito para ir recordando :)

Reply by email

José Mejuto
to Giuseppe Luigi Punzi

Hello Giuseppe,

Monday, June 20, 2011, 8:55:00 PM, you wrote:

GLP> Si no me falla la memoria, ten�a que hacer algo del estilo:
GLP> dmDatos.qryArticulos.Params[':nombreArt'].Value := Edit1.Text;
dmDatos.qryArticulos.ParamByName('nombreArt').AsString:=Edit1.Text;

GLP> Igual, aprovecho. Y una vez construido los params, como se lanzaba el GLP> insert en cuesti�n, era ApplyUpdates?

ApplyUpdates ser�a para updates en batch tipo con un DBGrid. Para confirmar que se graben ser�a un Commit.

Best regards, Jos�

Reply by email

Giuseppe Luigi Punzi
to José Mejuto

El 20/06/2011 22:05, Jos� Mejuto escribi�:

Show quoted text 8 lines
Hello Giuseppe, Monday, June 20, 2011, 8:55:00 PM, you wrote: GLP> Si no me falla la memoria, ten�a que hacer algo del estilo: GLP> dmDatos.qryArticulos.Params[':nombreArt'].Value := Edit1.Text; dmDatos.qryArticulos.ParamByName('nombreArt').AsString:=Edit1.Text;

Hola Jos�

Si, pensaba que era algo as�, pero no s�lo no me autocompletaba (s�lo autocompletaba Params) si no que me d� el siguiente error. uarticulos.pas(40,24) Error: identifier idents no member "ParamByname"

Show quoted text 5 lines
GLP> Igual, aprovecho. Y una vez construido los params, como se lanzaba el GLP> insert en cuesti�n, era ApplyUpdates? ApplyUpdates ser�a para updates en batch tipo con un DBGrid. Para confirmar que se graben ser�a un Commit.

Uhm..... Ok, entonces, te�ricamente, si no me fallara el ParamByName, deber�a ser algo tal que..

dmDatos.qryArticulos.ParamByName['nombreArt'].AsString:=Edit1.Text;
dmDatos.qryArticulos.Insert;
dmDatos.qryArticulos.Commit;

Correcto?

Un saludo.

Reply by email

José Mejuto
to Giuseppe Luigi Punzi

Hello Giuseppe,

you wrote
> dmDatos.qryArticulos.ParamByName('nombreArt').AsString:=Edit1.Text;

GLP> Hola Jos�
GLP> Si, pensaba que era algo as�, pero no s�lo no me autocompletaba (s�lo GLP> autocompletaba Params) si no que me d� el siguiente error. GLP> uarticulos.pas(40,24) Error: identifier idents no member "ParamByname"

Eso es que usas un fpc m�s antiguo que el mio. En el tuyo ser�a:

dmDatos.qryArticulos.Params.ParamByName('xxxx').asString:=......
> ApplyUpdates ser�a para updates en batch tipo con un DBGrid. Para > confirmar que se graben ser�a un Commit.
GLP> Uhm..... Ok, entonces, te�ricamente, si no me fallara el ParamByName,
GLP> deber�a ser algo tal que..
GLP> dmDatos.qryArticulos.ParamByName['nombreArt'].AsString:=Edit1.Text;
GLP> dmDatos.qryArticulos.Insert;
GLP> dmDatos.qryArticulos.Commit;
dmDatos.qryArticulos.Params.ParamByName('xxxx').asString:=Edit1.Text;
dmDatos.qryArticulos.Execute;
dmDatos.qryArticulos.Commit;
Best regards, Jos�

Reply by email

Giuseppe Luigi
to Giuseppe Luigi Punzi: El 20/06/2011 22:05, Jos� Mejuto escribi�: Hola Jos� Si, pensaba que era algo…

El lun, 20-06-2011 a las 23:13 +0200, Giuseppe Luigi Punzi escribi�:

Show quoted text 27 lines
El 20/06/2011 22:05, Jos� Mejuto escribi�: > Hello Giuseppe, > > Monday, June 20, 2011, 8:55:00 PM, you wrote: > > GLP> Si no me falla la memoria, ten�a que hacer algo del estilo: > GLP> dmDatos.qryArticulos.Params[':nombreArt'].Value := Edit1.Text; > > dmDatos.qryArticulos.ParamByName('nombreArt').AsString:=Edit1.Text; Hola Jos� Si, pensaba que era algo as�, pero no s�lo no me autocompletaba (s�lo autocompletaba Params) si no que me d� el siguiente error. uarticulos.pas(40,24) Error: identifier idents no member "ParamByname" > GLP> Igual, aprovecho. Y una vez construido los params, como se lanzaba el > GLP> insert en cuesti�n, era ApplyUpdates? > > ApplyUpdates ser�a para updates en batch tipo con un DBGrid. Para > confirmar que se graben ser�a un Commit. Uhm..... Ok, entonces, te�ricamente, si no me fallara el ParamByName, deber�a ser algo tal que.. dmDatos.qryArticulos.ParamByName['nombreArt'].AsString:=Edit1.Text; dmDatos.qryArticulos.Insert; dmDatos.qryArticulos.Commit;

Me contesto, ser�a Params.ParamByName('parametro').AsString

Aunque me falla diciendo que no existe el par�metro, pero estoy mirando en los foros sobre �sto.

Gracias.

Reply by email

Giuseppe Luigi
to José Mejuto: GLP> Hola Jos� GLP> Si, pensaba que era algo as�, pero no s�lo no me autocompletaba…

El mar, 21-06-2011 a las 09:30 +0200, Jos� Mejuto escribi�:

Show quoted text 13 lines
Hello Giuseppe, Monday, June 20, 2011, 11:13:03 PM, you wrote: >> dmDatos.qryArticulos.ParamByName('nombreArt').AsString:=Edit1.Text; GLP> Hola Jos� GLP> Si, pensaba que era algo as�, pero no s�lo no me autocompletaba (s�lo GLP> autocompletaba Params) si no que me d� el siguiente error. GLP> uarticulos.pas(40,24) Error: identifier idents no member "ParamByname" Eso es que usas un fpc m�s antiguo que el mio. En el tuyo ser�a: dmDatos.qryArticulos.Params.ParamByName('xxxx').asString:=......

Envi� mi otro mail sin ver el tuyo jejeje.

Show quoted text 13 lines
>> ApplyUpdates ser�a para updates en batch tipo con un DBGrid. Para >> confirmar que se graben ser�a un Commit. GLP> Uhm..... Ok, entonces, te�ricamente, si no me fallara el ParamByName, GLP> deber�a ser algo tal que.. GLP> dmDatos.qryArticulos.ParamByName['nombreArt'].AsString:=Edit1.Text; GLP> dmDatos.qryArticulos.Insert; GLP> dmDatos.qryArticulos.Commit; dmDatos.qryArticulos.Params.ParamByName('xxxx').asString:=Edit1.Text; dmDatos.qryArticulos.Execute; dmDatos.qryArticulos.Commit;

Execute y Commit no existen.

Supongo que ser� ExecSQL y Post, pero, si lanzo ExecSQL, como sabe si tiene que usar el SQL que est� en la propiedad SQL, o el de InsertSQL, o el de UpdateSQL, etc... ???

Reply by email

José Mejuto
to Giuseppe Luigi

Hello Giuseppe,

you wrote
> dmDatos.qryArticulos.Params.ParamByName('xxxx').asString:=Edit1.Text; > dmDatos.qryArticulos.Execute; > dmDatos.qryArticulos.Commit;

GL> Execute y Commit no existen.
GL> Supongo que ser� ExecSQL y Post, pero, si lanzo ExecSQL, como sabe si GL> tiene que usar el SQL que est� en la propiedad SQL, o el de InsertSQL, o GL> el de UpdateSQL, etc... ???

Me acababa de levantar, estaba medio dormido :)

Execute es ExecSQL sip. El ExecSQL siempre lanza el SQL, el insertSQL, UpdateSQL, etc con para los controles visuales. Cuando un control visual intenta a�adir un registro comprueba si existe un InsertSQL, si lo hay rellena los params y lo lanza con ExecSQL, si no lo hay intenta derivar un insert a partir del SQL y lanzarlo, pero eso s�lo se consigue si el select del SQL es sencillo, sobre una tabla �nica.

El Commit se lanza sobre la transacci�n asignada al Query. De modo que si has hecho algo como:

Query:=TSQLQuery.Create.....
Query.Transaction:=MyTransaction;
....
Query.ExecSQL;
MyTransaction.Commit;

El ApplyUpdate se usa cuando lo hace a trav�s de un DataSource, no cuando trabajas con un Query.

En otras palabras, es diferente si usas el Query directamente o si los datos los manejas a trav�s de un DataSource para enlazarlo con controles visuales, ya que estos no entienden de Querys, tablas, etc.

Best regards, Jos�

Reply by email

Giuseppe Luigi
to José Mejuto

El mar, 21-06-2011 a las 12:58 +0200, Jos� Mejuto escribi�:

Show quoted text 33 lines
Hello Giuseppe, Tuesday, June 21, 2011, 9:50:24 AM, you wrote: >> dmDatos.qryArticulos.Params.ParamByName('xxxx').asString:=Edit1.Text; >> dmDatos.qryArticulos.Execute; >> dmDatos.qryArticulos.Commit; GL> Execute y Commit no existen. GL> Supongo que ser� ExecSQL y Post, pero, si lanzo ExecSQL, como sabe si GL> tiene que usar el SQL que est� en la propiedad SQL, o el de InsertSQL, o GL> el de UpdateSQL, etc... ??? Me acababa de levantar, estaba medio dormido :) Execute es ExecSQL sip. El ExecSQL siempre lanza el SQL, el insertSQL, UpdateSQL, etc con para los controles visuales. Cuando un control visual intenta a�adir un registro comprueba si existe un InsertSQL, si lo hay rellena los params y lo lanza con ExecSQL, si no lo hay intenta derivar un insert a partir del SQL y lanzarlo, pero eso s�lo se consigue si el select del SQL es sencillo, sobre una tabla �nica. El Commit se lanza sobre la transacci�n asignada al Query. De modo que si has hecho algo como: Query:=TSQLQuery.Create..... Query.Transaction:=MyTransaction; .... Query.ExecSQL; MyTransaction.Commit; El ApplyUpdate se usa cuando lo hace a trav�s de un DataSource, no cuando trabajas con un Query.

Entonces el ApplyUpdates es para cuando se usa controles DB-aware no?

Entonces, qu� sol�is usar? Un query para selects, y otro para inserts, delete etc..cambiando el SQL dependiendo de lo que vaya a hacer?

Show quoted text 5 lines
En otras palabras, es diferente si usas el Query directamente o si los datos los manejas a trav�s de un DataSource para enlazarlo con controles visuales, ya que estos no entienden de Querys, tablas, etc.

Por cierto, por qu� me d� error en un Refresh del SQLQuery, diciendo que no se puede realizar en un Dataset Abierto? Tengo que hacer un Active:=False y Active:=True? me parece una chapuza....

Reply by email

José Mejuto
to Giuseppe Luigi

Hello Giuseppe,

you wrote
> El ApplyUpdate se usa cuando lo hace a trav�s de un DataSource, no > cuando trabajas con un Query.

GL> Entonces el ApplyUpdates es para cuando se usa controles DB-aware no?

B�sicamente.

GL> Entonces, qu� sol�is usar? Un query para selects, y otro para inserts, GL> delete etc..cambiando el SQL dependiendo de lo que vaya a hacer?

No queda m�s remedio. Suponiendo un SQL:

Select CLIENTES.*,PRODUCTOS.* from CLIENTES,PRODUCTOS

Al hacer un insert, donde se a�ade el registro ? a Clientes a productos, a los dos ?

> En otras palabras, es diferente si usas el Query directamente o si los > datos los manejas a trav�s de un DataSource para enlazarlo con > controles visuales, ya que estos no entienden de Querys, tablas, etc.

GL> Por cierto, por qu� me d� error en un Refresh del SQLQuery, diciendo que GL> no se puede realizar en un Dataset Abierto? Tengo que hacer un GL> Active:=False y Active:=True? me parece una chapuza....

Te da error por que un dataset relacionado est� en edici�n, o inserci�n. O bien no has realizado el commit/applyupdates. Cuando da ese error normalmente es que el dataset tiene informaci�n cambiada, modificada, nueva, eliminada, o en resumidas cuentas pendiente y por lo tanto si se hace el refresh se pierde esa informaci�n.

Best regards, Jos�

Reply by email

Giuseppe Luigi Punzi
to José Mejuto

El 22/06/2011 19:37, Jos� Mejuto escribi�:

Show quoted text 19 lines
Hello Giuseppe, Wednesday, June 22, 2011, 5:38:22 PM, you wrote: >> El ApplyUpdate se usa cuando lo hace a trav�s de un DataSource, no >> cuando trabajas con un Query. GL> Entonces el ApplyUpdates es para cuando se usa controles DB-aware no? B�sicamente. GL> Entonces, qu� sol�is usar? Un query para selects, y otro para inserts, GL> delete etc..cambiando el SQL dependiendo de lo que vaya a hacer? No queda m�s remedio. Suponiendo un SQL: Select CLIENTES.*,PRODUCTOS.* from CLIENTES,PRODUCTOS Al hacer un insert, donde se a�ade el registro ? a Clientes a productos, a los dos ?

Ok, entonces usar� dos por dataset .... es por seguir una metodolog�a.

Show quoted text 12 lines
>> En otras palabras, es diferente si usas el Query directamente o si los >> datos los manejas a trav�s de un DataSource para enlazarlo con >> controles visuales, ya que estos no entienden de Querys, tablas, etc. GL> Por cierto, por qu� me d� error en un Refresh del SQLQuery, diciendo que GL> no se puede realizar en un Dataset Abierto? Tengo que hacer un GL> Active:=False y Active:=True? me parece una chapuza.... Te da error por que un dataset relacionado est� en edici�n, o inserci�n. O bien no has realizado el commit/applyupdates. Cuando da ese error normalmente es que el dataset tiene informaci�n cambiada, modificada, nueva, eliminada, o en resumidas cuentas pendiente y por lo tanto si se hace el refresh se pierde esa informaci�n.

Pues jurar�a que ordenaba el refresh justo despu�s del commit, no s�, ya lo revisar�.

Reply by email

José Mejuto
to Giuseppe Luigi Punzi

Hello Giuseppe,

you wrote
> Al hacer un insert, donde se a�ade el registro ? a Clientes a > productos, a los dos ?

GLP> Ok, entonces usar� dos por dataset .... es por seguir una metodolog�a.

Los que necesites, no es cuesti�n de metodolog�a, es que no hay otro modo de que pueda hacerse :) En una tabla plana tipo DBF un grid sabe como a�adir un registro, borrarlo o actualizarlo ya que s�lo hay una tabla. Cuando hay m�ltiples tablas hay que "ense�arle" ;)

Show quoted text 5 lines
> Te da error por que un dataset relacionado est� en edici�n, o > inserci�n. O bien no has realizado el commit/applyupdates. Cuando da > ese error normalmente es que el dataset tiene informaci�n cambiada, > modificada, nueva, eliminada, o en resumidas cuentas pendiente y por > lo tanto si se hace el refresh se pierde esa informaci�n.

GLP> Pues jurar�a que ordenaba el refresh justo despu�s del commit, no s�, ya GLP> lo revisar�.

A mi eso tambi�n me vuelve loco a veces ya que varios controles visuales no diferencias cuando est�n en edici�n o navegaci�n, como los TDBEdit.

De todos modos un refresh es m�s o menos un
Active:=false;Active:=true;
Best regards, Jos�

Reply by email