Sign in Join

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

Mailing lists / lazarus-es / 2010-03

Sobre TSQLQuery

10 messages · 5 people · –

Reply by email Subscribe to this list Your subscription

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

Ismael L. Donis García

Como le podr�a pasar par�metros y ejecutar las instrucciones del InsertSQL, UpdateSQL y DeleteSQL de un TSQLQuery?

Cuando trato de asignar un par�metro que est� en una de las propiedades antes mencionadas, pero que no est� en la propiedad SQL, me da error.

Dicen que en Lazarus se puede hacer cualquier cosa, pero llevo 1 mes tratando de llenar una tabla directamente desde una grilla, la cosa m�s simple del mundo en cualquier soft y no lo he logrado aun nada. La verdad que me est� cansando esta mierda.

slu2s a to2s
=========
|| ISMAEL ||
=========
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100309/eb36920a/attachment.html>

Reply by email

JoshyFun
to Ismael L. Donis García

Hello Ismael,

Tuesday, March 9, 2010, 6:10:04 PM, you wrote:

ILDG> Como le podr�a pasar par�metros y ejecutar las ILDG> instrucciones del InsertSQL, UpdateSQL y DeleteSQL de un ILDG> TSQLQuery?
ILDG> Cuando trato de asignar un par�metro que est� en una de ILDG> las propiedades antes mencionadas, pero que no est� en la ILDG> propiedad SQL, me da error.

A ver, los InsertSQL etc son "hijos" de SQL, o sea, que se usan para complementar el funcionamiento de SQL cuando este no puede hacer directamente esas tres operaciones por si mismo (como puse en otro mensaje).

Si tienes que usar un par�metro no recogido en el SQL tendr�s que a�adirlo manualmente al apartado de par�metros. Ya que los del SQL se generan autom�ticamente. Creo que as� deber�a de funcionar.

ILDG> Dicen que en Lazarus se puede hacer cualquier cosa, pero ILDG> llevo 1 mes tratando de llenar una tabla directamente desde una ILDG> grilla, la cosa m�s simple del mundo en cualquier soft y no lo ILDG> he logrado aun nada. La verdad que me est� cansando esta mierda.

El lenguaje amigo...

Best regards, JoshyFun

Reply by email

German
to Ismael L. Donis García: Como le podr�a pasar par�metros y ejecutar las instrucciones del InsertSQL, UpdateSQL…

El 09/03/2010 02:10 p.m., Ismael L. Donis Garc�a escribi�:

Show quoted text 9 lines
Como le podr�a pasar par�metros y ejecutar las instrucciones del InsertSQL, UpdateSQL y DeleteSQL de un TSQLQuery? Cuando trato de asignar un par�metro que est� en una de las propiedades antes mencionadas, pero que no est� en la propiedad SQL, me da error. Dicen que en Lazarus se puede hacer cualquier cosa, pero llevo 1 mes tratando de llenar una tabla directamente desde una grilla, la cosa m�s simple del mundo en cualquier soft y no lo he logrado aun nada. La verdad que me est� cansando esta mierda.

Hola!
No te escribo para responderte directamente sobre tu pregunta, pero si para darte un humilde consejo y es el sgte. si ves que te estas perdiendo o no encontras el rumbo, digamos, si no sabes como arrancar, te recomiendo que comienses con algun ejemplo ya funcionando. Tiene que haber en la web algun ejemplo basico de una grilla ligada con una base de datos lo suficientemente sensilla como para no confundirte y permitirte aprender la tecnica.
En mi caso particular uso las librerias Zeos, y para empezar lo primero que hize despues de instalarlas es bajar los ejemplos para ver como empezar algo propio y me dio resultado.

Saludos!

Show quoted text 11 lines
slu2s a to2s ========= || ISMAEL || ========= _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100309/dca98ecd/attachment.html>

Reply by email

Ismael L. Donis García
to JoshyFun: ILDG> Como le podr�a pasar par�metros y ejecutar las ILDG> instrucciones del…

Lo creo a mano y salvo, cuando cierro el proyecto y lo vuelvo a abrir, abolina el par�metro, se pierde, no lo guarda.

Y cuando trato de ejecutar, me ejecuta el SQL, no el InsertSQL. Adem�s como diferencio entre si quiero ejecutar InsertSQL, DeleteSQL o UpdateSQL?

Disculpa la frase, pero la verdad que me dan ganas de olvidarme de su existencia despu�s de pasarme los d�as hurgando sin tener literatura que te explique algo y con un lista con muy poca ayuda.
=========
|| ISMAEL ||
=========
PD: German no tengo acceso a Internet, vivo en CUBA y aqu� existen ciertas restricciones para ello.

Earlier message 40 lines
----- Original Message ----- From: "JoshyFun" <joshyfun en gmail.com> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Sent: Tuesday, March 09, 2010 1:45 PM Subject: Re: [Lazarus-es] Sobre TSQLQuery Hello Ismael, Tuesday, March 9, 2010, 6:10:04 PM, you wrote: ILDG> Como le podr�a pasar par�metros y ejecutar las ILDG> instrucciones del InsertSQL, UpdateSQL y DeleteSQL de un ILDG> TSQLQuery? ILDG> Cuando trato de asignar un par�metro que est� en una de ILDG> las propiedades antes mencionadas, pero que no est� en la ILDG> propiedad SQL, me da error. A ver, los InsertSQL etc son "hijos" de SQL, o sea, que se usan para complementar el funcionamiento de SQL cuando este no puede hacer directamente esas tres operaciones por si mismo (como puse en otro mensaje). Si tienes que usar un par�metro no recogido en el SQL tendr�s que a�adirlo manualmente al apartado de par�metros. Ya que los del SQL se generan autom�ticamente. Creo que as� deber�a de funcionar. ILDG> Dicen que en Lazarus se puede hacer cualquier cosa, pero ILDG> llevo 1 mes tratando de llenar una tabla directamente desde una ILDG> grilla, la cosa m�s simple del mundo en cualquier soft y no lo ILDG> he logrado aun nada. La verdad que me est� cansando esta mierda. El lenguaje amigo... -- Best regards, JoshyFun

Reply by email

JoshyFun
to Ismael L. Donis García

Hello Ismael,

Tuesday, March 9, 2010, 10:17:20 PM, you wrote:

ILDG> Lo creo a mano y salvo, cuando cierro el proyecto y lo vuelvo a abrir, ILDG> abolina el par�metro, se pierde, no lo guarda.

Hmmm... eso ya si que no me parece l�gico...

ILDG> Y cuando trato de ejecutar, me ejecuta el SQL, no el InsertSQL. Adem�s como ILDG> diferencio entre si quiero ejecutar InsertSQL, DeleteSQL o UpdateSQL?

Eso no lo decides tu, lo decide por ejemplo el DBGrid o mejor dicho el recordset. Si en el recordset haces un "rs.append" por ejemplo cuando hagas el post se realizar� autom�ticamente un InsertSQL (lo que ser�a un append). Si haces un "rs.delete" para borrar un registro, el SQLQuery invocar� el "DeleteSQL", etc...

Resumiendo, tu trabajas con el recordset, de modo que cuando en el recorset haces un:

Open, Refresh
Se invoca el SQLQuery.SQL

Delete
Se invoca el SQLQuery.DeleteSQL

Insert, Append
Se invoca el SQLQuery.InsertSQL

Modificar un registro, y post
Se invoca el SQLQuery.UpdateSQL

En el SQLQuery puedes definir campos que no est�n presentes en el recordset f�sico del SQLQuery, pero que de un modo u otro necesitar�s, como para "simular" par�metros. Eso lo haces pulsando con el bot�n derecho sobre SQLQuery y "definir campos". Ah� puedes meter los del SQLQuery y m�s, o eliminar alguno que no necesites.

ILDG> Disculpa la frase, pero la verdad que me dan ganas de olvidarme de su ILDG> existencia despu�s de pasarme los d�as hurgando sin tener literatura que te ILDG> explique algo y con un lista con muy poca ayuda.

Ya :(

Best regards, JoshyFun

Reply by email

Ismael L. Donis García
to franmate en gmail.com

Disc�lpenme, no quise en ning�n momento ofender a nadie, ser� que estoy acostumbrado a otras listas donde el flujo de informaci�n lo supera con creces.

Se sobre toda las cosas se que la superaci�n conlleva esfuerzo, estaba de mal humor precisamente por eso, aunque me he esforzado bastante (y cuando digo bastante es estar horas y horas tratando de resolver el problema) en estos d�as no he logrado absolutamente nada de algo que en cualquier soft es trivial (pasar un select * from tabla a una grilla y ya estar metiendo datos en ella)

Mis m�s sinceras disculpas y Saludos afectuosos a todos =========
|| ISMAEL ||
=========

Earlier message 20 lines
----- Original Message ----- From: <franmate en gmail.com> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Sent: Tuesday, March 09, 2010 6:16 PM Subject: Re: [Lazarus-es] Sobre TSQLQuery Hola, > explique algo y con un lista con muy poca ayuda. Este comentario es muy irrespetuoso, repasa los mensajes de la lista y ver�s la cantidad de respuestas que recibieron tus preguntas. Los que te ayudaron no merecen ese trato. Aprender es un proceso activo que exige esfuerzos. Atte Fran Mac�as

Reply by email

Ismael L. Donis García
to JoshyFun: ILDG> Lo creo a mano y salvo, cuando cierro el proyecto y lo vuelvo a abrir, ILDG>…

Yo tengo:

SQLQuery.SQL := 'select eaum.um, eaum.entidad from eaum where
eaum.entidad=:entidad order by eaum.um'
SQLQuery.DeleteSQL := 'execute procedure pd_eaum(:entidad, :um)'    //delete
from eaum where (((eaum.entidad)=:vch_entidad) and ((eaum.um)=:vch_um));
SQLQuery.InsertSQL := 'execute procedure pi_eaum(:entidad, :um)'
//insert into eaum (entidad, um) values (:vch_entidad, :vch_um);
SQLQuery.UpdateSQL := 'execute procedure pu_eaum(:entidad, :um)'  //update
eaum set um=:vch_um where ((eaum.entidad)=:vch_entidad);

En la grilla tengo creada los 2 �nicos campos que tiene la tabla (entidad y um)

Y en el evento KeyUp de la grilla tengo (lo tengo en el KeyUp porque el KeyPress no funciona, tambi�n prob� el KeyPress del formulario y tampoco funciona para el enter)

  if Key = 13 then
    if (not dbgum.DataSource.DataSet.EOF) or (dbgum.DataSource.DataSet.State
in dsEditModes) then
      begin
        if length(rsum.FieldByName('um').AsString) = 0 then
          begin
            cmdcerrar.SetFocus;
            key:=0;
          end
        else
          begin
            key:=0;
            if dbgum.DataSource.DataSet.State in dsEditModes then
              dbgum.DataSource.DataSet.Post;
            if dbgum.SelectedIndex < dbgum.DataSource.DataSet.FieldCount - 1
then
              dbgum.SelectedIndex := dbgum.SelectedIndex + 1
            else
              dbgum.DataSource.DataSet.Append;
          end;
      end
    else
      begin
        cmdcerrar.SetFocus;
        key:=0;
      end;

Con eso pretendo (pretendo porque no lo he logrado) que cuando termine de llenar la celda y de enter me actualice la tabla y autom�ticamente me abra otra fila de la grilla para agregar otro registro a la tabla.

Si alguien de la lista me puede ayudar en ello le paso un peque�o ejemplo a su preivado, la base de datos est� en Firebird 2.1.3

JoshyFun ambos sabemos que me has ayudado grandemente, al punto que m�s del 60% de mis conocmientos de Lazarus te los debo, pero la verdad en estos d�as he estado presionado por el tiempo sin lograr abanzar nada.

Repito no quiero, ni pretend� ofender a nadie, y mucho menos a ti JoshyFun que te debo grandemente por toda la ayuda y tus conocimientos que me has brindado. Solo que me parece que he tratado de entrar de lleno en un soft que aun no est� maduro en su totalidad, por lo que estoy pagando sus consecuencias.

Saludos a todos
=========
|| ISMAEL ||
=========

Earlier message 60 lines
----- Original Message ----- From: "JoshyFun" <joshyfun en gmail.com> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Sent: Tuesday, March 09, 2010 5:29 PM Subject: Re: [Lazarus-es] Sobre TSQLQuery Hello Ismael, Tuesday, March 9, 2010, 10:17:20 PM, you wrote: ILDG> Lo creo a mano y salvo, cuando cierro el proyecto y lo vuelvo a abrir, ILDG> abolina el par�metro, se pierde, no lo guarda. Hmmm... eso ya si que no me parece l�gico... ILDG> Y cuando trato de ejecutar, me ejecuta el SQL, no el InsertSQL. Adem�s como ILDG> diferencio entre si quiero ejecutar InsertSQL, DeleteSQL o UpdateSQL? Eso no lo decides tu, lo decide por ejemplo el DBGrid o mejor dicho el recordset. Si en el recordset haces un "rs.append" por ejemplo cuando hagas el post se realizar� autom�ticamente un InsertSQL (lo que ser�a un append). Si haces un "rs.delete" para borrar un registro, el SQLQuery invocar� el "DeleteSQL", etc... Resumiendo, tu trabajas con el recordset, de modo que cuando en el recorset haces un: Open, Refresh Se invoca el SQLQuery.SQL Delete Se invoca el SQLQuery.DeleteSQL Insert, Append Se invoca el SQLQuery.InsertSQL Modificar un registro, y post Se invoca el SQLQuery.UpdateSQL En el SQLQuery puedes definir campos que no est�n presentes en el recordset f�sico del SQLQuery, pero que de un modo u otro necesitar�s, como para "simular" par�metros. Eso lo haces pulsando con el bot�n derecho sobre SQLQuery y "definir campos". Ah� puedes meter los del SQLQuery y m�s, o eliminar alguno que no necesites. ILDG> Disculpa la frase, pero la verdad que me dan ganas de olvidarme de su ILDG> existencia despu�s de pasarme los d�as hurgando sin tener literatura que te ILDG> explique algo y con un lista con muy poca ayuda. Ya :( -- Best regards, JoshyFun

Reply by email

Jesus Reyes
to Ismael L. Donis García

Hola Ismael,

Primero que nada, lamento mucho que no hayas obtenido los resultados que esperabas, en el tiempo que esperabas como lo has comentado ya varias veces, es verdad que no todas las cosas son tan f�ciles como con otros entornos.

Y tambi�n debes reconocer que ayudarte no es f�cil y lo que es peor, como nos has contado, esta fuera de tu alcance debido a las limitaciones de acceso a la red.

Esto lo digo por que sin esa limitaci�n de acceso ya te hubiera ofrecido acceder al chat IRC donde normalmente estoy y con mucho gusto te ayudar�a a resolver tus problemas. Tambi�n te habr�a podido orientar mejor en la selecci�n de componentes para comunicarte con Firebird, pues lamentablemente, SQLDB no son los componentes mas f�ciles o mejor documentados que existen y de ah� se puede inferir, que no son los mas recomendados en tu caso, por que no puedes simplemente estar buscando informaci�n en la red hasta solucionar tus dudas.

Mal har�a si te dijera deja SQLDB y usa esto o aquello, despu�s de estar tan cerca de lograr dominarlo. Sin embargo tampoco se se puede dejar de decir, casi sin temor a equivocarme, que Firebird es la base de datos que mas soporte tiene en Free Pascal en cuanto a componentes. Los mas importantes (pero no los �nicos) son SQLDB, ZEOS y UIB. De estos ZEOS y UIB son los mejor documentados y me atrever�a a decir incluso que ZEOS es el mas f�cil de usar de todos. UIB s�lo o con FBDataset tambi�n deber�an funcionar muy bien aunque ya tengo tiempo que no les sigo el rastro.

Hago la aclaraci�n de que a pesar de que puedes instalar SQLDB en Lazarus, no significa que SQLDB es Lazarus, as� que si no puedes controlar SQLDB no veo por que Lazarus tenga que sufrir las consecuencias :D.

Honestamente yo no uso SQLDB como lo intentas usar tu, no necesito esa funcionalidad, pero si te interesa puedes contactarme en privado para ponernos de acuerdo en hacer algo similar ya sea que proporciones tu los datos (o tu proyecto) o simplemente me des las indicaciones para reproducirlos en uno yo mismo.

Jes�s Reyes A.

Encuentra las mejores recetas en Yahoo! Cocina.
http://mx.mujer.yahoo.com/cocina/

Reply by email

Ismael L. Donis García

Jes�s 1 mill�n de gracias, ya comenz� a andar (a medias).

Lo de la navegaci�n por el grid al fin lo resolv� de la siguiente forma (de la forma que me explicaste tampoco me funcion�)

if dm.rs.RecNo < dm.rs.RecordCount then
   dm.rs.Next
else
   dbg.DataSource.DataSet.Append;

Ahora tengo otro problema, me inserta y bien los datos, pero si quiero modificar me da error el UpdateSQL, me dice que trata de duplicar el �ndice primario de la tabla. Pero esto es imposible porque el �ndice est� compuesto por los dos campos, �sea entidad+um

Tengo puesto en el UpdateSQL execute procedure pu_eaum(:entidad, :um)

y en el procedimiento: update eaum set um=:vch_um where
((eaum.entidad)=:vch_entidad);

Por lo que no debe dar error de �ndice duplicado.

Una aclaraci�n, solo ocurre si tengo m�s de un registro en la tabla, cuando tengo 1 si me lo modifica bien.

Saludos cordiales
=========
|| ISMAEL ||
=========

Earlier message 73 lines
----- Original Message ----- From: "Jesus Reyes" <jesusrmx en yahoo.com.mx> To: "Ismael L. Donis Garc�a" <ismael en citricos.co.cu> Sent: Thursday, March 11, 2010 10:00 AM Subject: Re: Fw: [Lazarus-es] Sobre TSQLQuery --- El jue 11-mar-10, Ismael L. Donis Garc�a <ismael en citricos.co.cu> escribi�: > De:: Ismael L. Donis Garc�a <ismael en citricos.co.cu> > Asunto: Fw: [Lazarus-es] Sobre TSQLQuery > A: "Jesus Reyes" <jesusrmx en yahoo.com.mx> > Fecha: jueves, 11 de marzo de 2010, 6:57 > Jes�s se me olvid� decirte ayer que > dentro de la carpeta iba la base de datos y un backup, la > misma est� hecha en Firebird 2.1.3 y tiene conjunto de > caracteres ISO8859_1 > > Saludos reiterados > ========= > || ISMAEL || > ========= > Que tal Ismael, Si no te preocupes ya lo hab�a notado, he resuelto el primer problema que consiste en que no te reconoce el ENTER, bien esta es la explicaci�n: donde haces la verificaci�n if dbg.SelectedIndex < dbg.DataSource.DataSet.FieldCount - 1 then SelectedIndex regresa el indice de la columna actualmente seleccionada, en este caso es la columna 0, y la estas comparando con el maximo numero de campos -1, esto es, tienes 2 campos y aun cuando una columna es invisible no hay una relaci�n directa entre campos y columnas visibles (uno podr�a tener mas columnas que campos y eso sin contar las invisibles) Lo que es mas si la comparaci�n fuera if dbg.SelectedIndex < dbg.Columns.Count - 1 then tampoco funcionaria por que la cuenta verdadera de columnas es 2 y como en este caso SelectedIndex siempre regresa 0, la condicion que permite agregar un nuevo registro no se cumple. Lo que funciona es lo siguiente: if dbg.SelectedIndex < dbg.Columns.VisibleCount-1 then el segundo problema a que haces menci�n es que el grid deber�a guardar los datos seg�n se vayan introduciendo, pienso que esta opcion deber�a ser implementara en sqlquery con una propiedad AutoCommit o algo as�. De todos modos es f�cil emularla mediante el evento OnAfterPost de sqlquery, al parecer ya habias hecho algo similar. Pero para acercarse un poco mas a lo que se desea los comandos deberian ser: procedure Tdm.rsAfterPost(DataSet: TDataSet); begin rs.ApplyUpdates(); tra.CommitRetaining; //tra.Commit; end; Pruebalo y me cuentas. Jesus Reyes A. Encuentra las mejores recetas en Yahoo! Cocina. http://mx.mujer.yahoo.com/cocina/

Reply by email