Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Modificando la base de datos a traves de un Datagrid (https://www.clubdelphi.com/foros/showthread.php?t=52747)

miss flakita 30-01-2008 00:23:14

Modificando la base de datos a traves de un Datagrid
 
Hola a todos!!! oigan alguien podria decirme como puedo modificar los renglones de un dbgrid cuando este esta haciendo relacion a una tabla de la base de datos?

Es decir, en la base de datos tengo dos tablas las cuales componen lo ke es una factura (encabezado y detalles), pero cuando se esta ejecutando el programa y registran una factura, cuando se quiere modificar uno de los renglones del dbgrid (ke hace relacion a la tabla de detalles) me marca un error, por lo que truena el sistema....

Estoy trabajando con los eventos de las tablas....
gracias por su ayuda....:)

defcon1_es 30-01-2008 12:32:38

Hola.
Entiendo que el dbgrid está enlazado a la tabla de lineas de factura, ¿no?

¿Que error te da en concreto?
¿Qué versión de delphi usas?
¿Qué componentes de acceso a bases de datos de delphi usas?

Wiarbumu 30-01-2008 13:59:25

revisa
 
Supongo que el problema es causado por la integridad referencial, por lo que un registro de detalles necesita su registro maestro en la tabla de facturas, por lo tanto cada que intentas hacer un post en detalles este no encuentra el registro maestro; si este es el problema podrías intentar hacer un post sobre la tabla de facturas antes de empezar a llenar la tabla de detalles.

Aunque habría que mirar el esenario en el que estás trabajando (motor, base de datos, aplicación monousuario o multiusuario, etc) para poder precisar mejor la solución como por ejemplo utilizar un TClientDataset, o hacer algo con un procedimiento almacenado si la DB lo permite, etc.

Saludos

felipe88 30-01-2008 15:19:56

Hola miss flakita, la tabla que intentas modificar en el DataGrid esta en modo de edicion...?

Código Delphi [-]
tabla.open;
tabla.edit

De no ser asi recuerda que debes hacerlo para poder modificarlo, tampoco te olvides de hacer post y en dependiendo de como te conectas el ApplyUpdates; si es necesario como trabajas con los eventos de las tablas debes jugar con ello para evitar errores de integridad con el encabezado

Saludos

miss flakita 30-01-2008 18:09:57

Buenos dias chicos!! miren mi situacion es la siguiente....

Antes de guardar en la tabla de detalles ya he guardado en la de encabezado por lo que de la integridad no tengo problema, mi problema es.... una vez que el usuario registro los productos a comprar en el dbgrid y antes de guardar se da cuenta que por ejemplo en el renglon tres del dbgrid se equivoco en la cantidad o el articulo a comprar y tiene que modificarlo, una vez que lo hace ahora si va a guardar la factura y es ahi donde me marca el error....

Delphius 30-01-2008 18:37:07

Hola miss flakita,
¿Podrías aportarnos mayores detalles?¿Que error?¿Podrías escribirnoslo?

No es que sea malo miss flakita, es simplemente que en estas situaciones lamentablemente debemos pedir mayor predisposición de quien pregunta.
Si no te han dado la bienvenida a los foros, te la doy ahora: Bienvenida!. Te informo sobre la guia de estilo. No es que pidamos demasiado y seamos tan exigentes...
Pero si pudieramos conocer tu código y el error (por lo menos) podríamos serte de más ayuda.

Espero que tomes bien estas palabras y que te sientas a gusto de seguir en esta comunidad.

Saludos,

miss flakita 30-01-2008 19:32:26

Gracias Delphius muy amable de hecho si me dieron la guia peroooo no tengo chansilla de leerla, eje...

Bueno mira estoy trabajando con interbase en monousuario y en los eventos de las tablas tengo lo siguiente:

tabla del encabezado
After Post
if (datos.TBLORDENCOMPRA.State=DsEdit) then
begin
datos.TBLORDENCOMPRASUBTOTAL.Value:=datos.TBLORDENCOMPRASUBTOTAL.Value+importe;
datos.TBLORDENCOMPRATOTAL.value:=datos.TBLORDENCOMPRASUBTOTAL.value*0.15;
datos.TBLORDENCOMPRA.post;
datos.TBLORDENCOMPRA.refresh;
end;
// calculo importes y totales

OnnewRecord
cont:=0;
renglones:=1;
datos.TBLORDENCOMPRASUBTOTAL.Value:=0;
datos.TBLORDENCOMPRATOTAL.Value:=0;
importe:=0;
//inicializo variables

en la tabla de detalles....
After post
ren:=datos.tordenDetallesNDETALLES.value;
DATOS.TBLFOLIOS.Edit;
datos.TBLFOLIOSFOLIO.Value:=ren;
DATOS.TBLFOLIOS.Post;
datos.TBLFOLIOS.Refresh;
cont:=cont+1;
// tengo el contador para el control de los renglones del dbgrid, ke por cierto sale un error medio extraño aqui. Ademas de controlo los folios

Before Post
if cont=6 then
begin
datos.tordenDetalles.cancel;
error();
end else
if (datos.tordenDetalles.State=dsinsert)then
begin
datos.tordenDetallesIMPORTE.value:=datos.tordenDetallesCANTIDAD.value*datos.tordenDetallesPU.Value;
importe:=datos.tordenDetallesIMPORTE.value;
renglones:=renglones+1;
datos.TBLORDENCOMPRA.Edit;
datos.TBLORDENCOMPRASUBTOTAL.value:=datos.tordenDetallesIMPORTE.Value+datos.TBLORDENCOMPRASUBTOTAL.v alue;
datos.TBLORDENCOMPRAIVA.value:=datos.TBLORDENCOMPRASUBTOTAL.Value*0.15;
datos.TBLORDENCOMPRATOTAL.Value:=datos.TBLORDENCOMPRASUBTOTAL.value+datos.TBLORDENCOMPRAIVA.value;
end;

y fnalmente OnNewRecord
if (datos.tordenDetalles.eof) then
begin
datos.tordenDetallesRENGLONES.Value:=renglones;
ren:=datos.TBLFOLIOSFOLIO.VALUE;
datos.tordenDetallesNDETALLES.value:=ren+1;
datos.REL_UN_OCNORDEN.Value:=datos.TBLORDENCOMPRANORDEN.Value;
datos.REL_EMP_OCNORDEN.Value:=datos.TBLORDENCOMPRANORDEN.Value;
datos.REL_UN_OCNRENGLON.Value:=renglones;
datos.REL_EMP_OCNCARgo.Value:=renglones;
end;
if ((datos.tordenDetallesCANTIDAD.value=0)or (datos.tordenDetallesCANTIDAD.IsNull=true))then
begin
datos.tordenDetallesCANTIDAD.value:=1;
end;
if ((datos.tordenDetallesPU.value=0)or(datos.tordenDetallesPU.IsNull=true))then
begin
datos.tordenDetallesPU.Value:=1;
end;

y el error ke me sale al tratar de modificar uno de los renglones del dbgrid ke esta relacionado con la tabla detalles es:

Proyect LAPIMI.exe raised Exception class EDataBaseError with message 'Tordendetalles: Dataset not in Edit or Insert mode'

Caral 30-01-2008 19:38:46

Hola
Cita:

Proyect LAPIMI.exe raised Exception class EDataBaseError with message 'Tordendetalles: Dataset not in Edit or Insert mode'
Saludos

Delphius 30-01-2008 19:52:00

Miss flakita, Caral ya dio una buena pista. Lee lo subrayado en negrita.

El error se debe a que no pusiste en modo de edición el Tordendetalles.

Código Delphi [-]
Tordendetalles.Edit;

Puedes descanzar un poco y despreocuparte. Es un error muy común... un pequeño despiste.

Por otro lado sugiero que te acostumbres a usar las etiquetas delphi.

Saludos,

miss flakita 30-01-2008 20:05:17

Pues es que ya hice eso, pero en un boton despues de que el usuario ha terminado de ingresar los articulos al dbgrid, pero aun asi me sale el error.... a menos que prepare la tabla para edicion en otro lugar.....

felipe88 30-01-2008 20:19:42

Bueno ya que sabes esto deberias fijarte si es que antes en otra parte cierras la tabla, y verificar que la tabla este abierta y en modo de edicion antes de ejecutar el resto de codigo que expones, me imagino que tendras un boton aceptar o algo por el estilo con el que guardaras los datos finalmente...

Caral 30-01-2008 20:29:30

Hola
Para mi hay mucho evento after y before post, esto enreda el sistema.
No se sabe exactamente el proceso que sigue.
Me parece que el problema ademas de ahi, esta en que nunca se edita la tabla adecuada, salvo en el evento before post, lo que hace que el sistema no lo entienda.
Solucion simple, un dbnavigator y hacer la prueba.
Saludos

miss flakita 30-01-2008 20:55:22

Tu solucion simple no resulto caral....

Caral 30-01-2008 21:06:55

Hola
Bueno miss flakita, como dicen una de cal y una de arena.:):D
Si tienes un dbgrid conectado a datasource y este a un query, ademas tienes un dbnavigator conectado a un datasource, de que funciona, funciona.;)
Hay alguno que otro ejemplito por aqui, revisalos:)
Creo que por los foros hay alguna aplicación completa de facturación y creo que en el ftp del club hay una también, curiosamente funcionan.:D:D
Saludos Flakita

egostar 30-01-2008 21:08:19

Cita:

Empezado por miss flakita (Mensaje 262216)
Tu solucion simple no resulto caral....

Código Delphi [-]
//tabla del encabezado
//After Post
if (datos.TBLORDENCOMPRA.State=DsEdit) then begin
   datos.TBLORDENCOMPRASUBTOTAL.Value := datos.TBLORDENCOMPRASUBTOTAL.Value+importe;
   datos.TBLORDENCOMPRATOTAL.value := datos.TBLORDENCOMPRASUBTOTAL.value*0.15;  
   datos.TBLORDENCOMPRA.post;
   datos.TBLORDENCOMPRA.refresh;
end;
// calculo importes y totales

Me parece que esto esta mal, no debe ser en el evento BeforePost:confused: aunque tampoco nos dices de que tabla es ese evento, bueno, como no se como es la estructura de tu programa no me atrevo a asegurarlo, por otro lado que pasa si al tabla TBLORDENCOMPRA no esta en modo de edición?

En fin, creo que faltan muchos datos para dar con el problema.

Por cierto, ves como se ve diferente el código con las etiquetas?, te sugiero que si no has tenido una chansilla para leer la guía por lo menos edites tu post y pongas las etiquetas a tu código para que se vea mas claro.

Salud OS

Delphius 30-01-2008 23:45:16

Cita:

Empezado por egostar (Mensaje 262222)
Por cierto, ves como se ve diferente el código con las etiquetas?, te sugiero que si no has tenido una chansilla para leer la guía por lo menos edites tu post y pongas las etiquetas a tu código para que se vea mas claro.

Salud OS

Muy cierto Egostar, yo preferí evitar hacerle un comentario más sobre el asunto. La verdad es que a mi no me ha gustado la manera en que lo dijo miss flakita, pero para evitarme lios preferí aguantarmela y pedirle de la mejor manera que use las etiquetas.

Y bueno, después de haber leído el modo en que se dirigió a Caral... me ha quedado peor gusto de la situación.

Como fui yo quien le sugirió a miss flakita que lea la guia, seré yo ahora quien le pida nuevamente que sepa respetar la guia y mejore el trato hacia a quienes se ofrecieron a ayudar en el problema.

Doy por concluído el tema aquí.

Saludos,

miss flakita 01-02-2008 03:35:17

Gracias chicos les agradezco su ayuda, ya solucione mi problema sola, y en cuanto a la guia de estilossssss, si no la he leido es porke talves tenga mas ocupaciones que ustedes, porque a parte de trabajar mas de 8 horas diarias tengo que terminar mi proyecto de residencias y como comprenderan su guia de estilos tiene demasiadas letras que el leerla me llevaria tiempo desperdiciado que podria aprovechar en otras cosas... pero disculpen estan en su derecho ya que es su foro y se estan mostrando demasiado exigentes y groseros con quienes vamos entrando al foro....

De todos modos les agradezco su ayuda...
Que tengan bonito dia...

Me dio gusto entrar a su foro pero talves no vuelva hacerlo....
saludos

egostar 01-02-2008 03:54:45

Cita:

Empezado por miss flakita (Mensaje 262566)
y en cuanto a la guia de estilossssss, si no la he leido es porke talves tenga mas ocupaciones que ustedes,

Claro, el club es para gente que no tiene tiempo de hacer SUS cosas y vieras que somos muy felices de responder y hacer el trabajo de otros !!

Cita:

Empezado por miss flakita (Mensaje 262566)
porque a parte de trabajar mas de 8 horas diarias tengo que terminar mi proyecto de residencias y como comprenderan su guia de estilos tiene demasiadas letras que el leerla me llevaria tiempo desperdiciado que podria aprovechar en otras cosas...

Tienes toda la razón, que desconsiderados son con personas como tú que tienen tantas actividades y no pueden perder el tiempo en tonterías, es mas voy a sugerir en el foro premium (tengo muchas influencias ahí ;)) para que eliminen esa odiosa guia.

Cita:

Empezado por miss flakita (Mensaje 262566)
pero disculpen estan en su derecho ya que es su foro y se estan mostrando demasiado exigentes y groseros con quienes vamos entrando al foro....

Disculpada estas, nuestro administrador tomará las medidas necesarias para reprender a esos gañanes tan exigentes y groseros, tal vez no los vuelvas a ver por aquí, tú mereces toda la atención del foro, faltaba mas.

Cita:

Empezado por miss flakita (Mensaje 262566)
Me dio gusto entrar a su foro pero talves no vuelva hacerlo....

Salud OS


La franja horaria es GMT +2. Ahora son las 17:52:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi