![]() |
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....:) |
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? |
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 |
Hola miss flakita, la tabla que intentas modificar en el DataGrid esta en modo de edicion...?
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 |
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.... |
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, |
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' |
Hola
Cita:
|
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.
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, |
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.....
|
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...
|
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 |
Tu solucion simple no resulto caral....
|
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 |
Cita:
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 |
Cita:
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, |
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 |
Cita:
Cita:
Cita:
Cita:
|
La franja horaria es GMT +2. Ahora son las 06:59:43. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi