[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