[Lazarus-es] Sobre TSQLQuery

Ismael L. Donis García ismael en citricos.co.cu
Mie Mar 10 16:10:37 CET 2010


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 ||
=========
----- 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


_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es






More information about the Lazarus-es mailing list