[Lazarus-es] Fw: Sobre TSQLQuery

Ismael L. Donis García ismael en citricos.co.cu
Jue Mar 11 20:27:25 CET 2010


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






More information about the Lazarus-es mailing list