Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-12-2005
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 21
Anabel Va por buen camino
Question Usar o no Usar un DBGrid

Hola!

Estoy desarrollando un modulo para Facturas, en Delphi 6 y paradox, me surge una duda, para la captura de las partidas en la factura yo había decidido usar un DBGrid y que el usuario capturará directamente en las celdas los datos, pero me encontre varios hilos en el foro que no recomiendan este tipo de trabajo en un DBGrid, lo cual me hace dudar de usarlo.

Ustedes los que ya han realizado alguna vez un modulo de facturas, que componente utilizan para la captura de las partidas de la misma? ¿Cuál me recomiendan?

Muchas gracias
__________________
Ana
Responder Con Cita
  #2  
Antiguo 21-12-2005
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
No se a q te refieres con captura de partidas... pero si te puedo decir q el usar un DBGrid es bueno o malo dependiendo...si no le permites al usuario editar data ahí directamente sino q esto lo haces usando otros controles y su actualización se ve en el grid.........fino!!!.........si no es así....malo!!! sobre todo cuando se generan excepciones y dependen del comportamiento del servidor, lo digo particularmente por los problemas q tenía cuando empezaba
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #3  
Antiguo 21-12-2005
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 21
Anabel Va por buen camino
Gracias OSKR!!

Cuando habló de partidas, me refiero, en una Factura se tiene la Cabeza, los datos principales (No. Factura, Cliente, Descripción, dirección, etc.), las partidas son el cuerpo de la factura (Cant, Producto, PU, Importe x Partida, etc), mi duda es:

¿Que componente me recomiendan para la captura de los datos que van en el cuerpo de la factura?

Sobre lo que me comentas me parece bien, pero pienso que para el usuario
es engorroso tener que abrir una ventana de captura para cada partida de la factura, por ello yo pensaba en capturar directamente en el DBGrid, pero si no es recomendable, que me sugieren??

Míl Gracias
__________________
Ana
Responder Con Cita
  #4  
Antiguo 22-12-2005
Patricio Patricio is offline
Miembro
 
Registrado: jul 2004
Posts: 433
Poder: 20
Patricio Va por buen camino
yo suponete lo que hago es que la persona le da doble click al elemento de la grilla que quiere modificar y cargo todo en una pequeña ventana para su modificación o para una mejor visualizacion. Es por eso que no tuve tantos problemas con los dbgrid pero yo uso mas los wwDBGrid que son unos componentes que me dieron y estan buenos. Si los queres avisame que te los envio o me fijo donde estas

Saludos
Responder Con Cita
  #5  
Antiguo 22-12-2005
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 21
Anabel Va por buen camino
Patricio,

Muchas gracias, enviame los componentes a sonrie_a@yahoo.com y veo si me sirven.

Nuevamente Gracias
__________________
Ana
Responder Con Cita
  #6  
Antiguo 23-12-2005
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
No hay ningun problema en usar el DBGrid, el DBGrid es un contenedor de datos virtual, significa q los datos no los contiene el sino otro contenedor, en este caso el Dataset, el problema entonces es con la manera de usar el Dataset, yo uso el JvDBGrid y nunca hay problema..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #7  
Antiguo 29-12-2005
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 21
Anabel Va por buen camino
Delfino,

Hola! Tienes toda la razón cuando me dices que no hay problema si se configura bien el DataSet, pero me surgio un detalle al final al momento de insertar datos en el DBGrid:

Al Insertar un renglón en el DBGrid y pasar al siguiente renglón (ya sea con la tecla TAB o con la barra el botón Inserta de la barra TDBNavegator) el DBGrid se presenta en blanco, es decir, no visulizo los renglones que voy capturando. No sé si tenga que ver que La tabla a la que está conectada el DBGrid tiene la Opción "CacheUpdate = True". Y al hacer el Database.ApplyUpdates, se graban todos los renglones que capture.
Tu me pdrías dar alguna piesta de que podría estar pasando.

Gracias.
__________________
Ana
Responder Con Cita
  #8  
Antiguo 30-12-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Quizás se podría hacer de otra forma la creación de una factura, ahí van varias ideas:

- Crear un asistente de facturación, pide las fechas, y muestra todos los clientes que tienen algún albaran, y propone una factura con todos los albaranes de cada cliente. Se dá la posibilidad de eliminar un albaran de la factura, añadir, etc.

- Lo más fácil, pones en la ventana de la factura dos botones para añadir / eliminar albaranes, al pulsarlo pide el nº de albaran ( un combobox en el que se añade los ids de albaranes), y al aceptar esa ventana, el programa se encarga de buscar el albaran y meterlo en la factura.

- Tendrás por algún sitio una ventana de listados de albaranes, pues permites que el usuario seleccione varios albaranes, y despues con un boton, se crea la factura de esos albaranes.

Como ves, se trata de que el usuario escriba lo menos posible, para cometer menos fallos, y que además vea que es una mejora usar tu programa.

La primera opción puede ser la más compleja, pero tambien será la más cómoda para el usuario.

Un detalle más: El grid se usa para mostrar el cuerpo de la factura, y se permite, por ejemplo, modificar el concepto, pero no los importes. (poner a la columna de los importes, ReadONly := true)

saludos y espero te sirva alguna de estas ideas.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 02-01-2006
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 21
Anabel Va por buen camino
Hola Lepe!!

Muchas gracias por las sugerencias, sólo que etngo un problemilla, no las entiendo, quizas el problema radique en que usamos diferentes nombres para los conceptos de una factura, es decir, no sé a que te refieres con un "albaran"

Te platico como es mi ventana de captura de la factura, para los datos Generales de la factura (Nombre del cliente, dirección, etc) utilizo componenetes TDBEdit, los cuales están conectados a la Base de Datos Padre, para los datosdel cuerpo de la Factura (cantidad, unidad, producto, etc) uilizo un DBGrid para capturarlos, el cual esta conectado a la Base de Datos Hija, Tal como me aconsejo Delfino configure el DataSet de ambas tablas, para que al dar clic en el botón de guardar, se guarde la información y lo hace bien, Guarda lo que debe en cada tabla, respetas mis llaves, asigna el consecutivo, etc. todo bien.

Mi problema radica que cuando estas en el DBGrid directamente capturando la cantida, unidad, etc, al pasar al siguiente renglón ya no visualizo el anterior que capture en el DBGrid, más sin embargo en memoria si se queda, ya que al guardar los datos, guarda todos los renglones capturados.

Quiza, lo mejor no fue usar el DBGRID para está función, pero ya me bloquie y no sé porque cambiarlo o como capturar el cuerpo de la partida

Gracias.
__________________
Ana
Responder Con Cita
  #10  
Antiguo 03-01-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Anabel
para los datosdel cuerpo de la Factura (cantidad, unidad, producto, etc)
Eso para mí es un albaran, es decir, cada linea de detalle.

En mi caso, cuando una persona retira 4 artículos de un producto, se le dá una hojita que llamamos "albaran", no es un documento de pago, simplemente es un documento para tener constancia de que en esa fecha, ese cliente, ha retirado del almacen dichos artículos. Esta información queda grabada en una tabla, por tanto, a final de mes, se puede ver qué artículos ha retirado cada cliente, y automáticamente el ordenador busca todos esos albaranes y crea la factura final.

Quizás tu aplicación sea distinta y no tengas albaranes, pero si podrías hacerlo de otra forma.

Lo que intento decirte en el mensaje anterior, es que el DBGrid es muy bueno para mostrar información, pero escribir directamente en el Grid es bastante incómodo, de ahí que propusiera otra filosofía para crear el cuerpo de la factura.

Básicamente, estoy de acuerdo con la forma de actuar de Patricio y automatizar todo lo que sea posible.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 03-01-2006
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 21
Anabel Va por buen camino
Lepe,

Hola!! Muchas gracias, por la explicación, bueno pues segui ya vuestro consejo y el de Patrico, no dejo ya modificar o escribir sobre el DBGrid, coloque unos botoncitos muy monos y se abre la ventanita para capturar las partidas o detalle de la factura, pero sigo con un problemilla.

Tengo la Tabla Padre y la tabla hija, ambas en el DataSet trabajan con Chacheupdate = True, lo menciono porque creo que es importante, al dar de alta las partidas o detalles de la factura, no los veo en el DBGrid a pesar de que ya es sólo de consulta. El DBGrid está conectado por medio de un DataSource a la tabla hija que a su vez está ligada a la tabla padre, por el MasterSource, lo anterior sólo sucede cuando estoy dando de alta las partidas o detalles.

Quiza lo mejor sea lanzar mi duda como un nuevo hilo, pues ya nada que ver con usar o no un DBGrid, de cualquier forma muchas gracias Lepe
__________________
Ana
Responder Con Cita
  #12  
Antiguo 03-01-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si tiene CacheUpdates a true, todas las operaciones que hagas sobre los datasets, se hacen en memoria, tendrás que usar el método ApplyUpdates de los datasets para que los cambios se apliquen realmente a las tablas y se grabe a disco.

Si quieres que la dar de alta una linea del cuerpo automáticamente se grabe en las tablas y se refleje en el Grid, tendrás que desactivar la actualización en Cache.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 11-01-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Las filas que desaparecen

Cita:
Empezado por Anabel
Delfino,

Hola! Tienes toda la razón cuando me dices que no hay problema si se configura bien el DataSet, pero me surgio un detalle al final al momento de insertar datos en el DBGrid:

Al Insertar un renglón en el DBGrid y pasar al siguiente renglón (ya sea con la tecla TAB o con la barra el botón Inserta de la barra TDBNavegator) el DBGrid se presenta en blanco, es decir, no visulizo los renglones que voy capturando. No sé si tenga que ver que La tabla a la que está conectada el DBGrid tiene la Opción "CacheUpdate = True". Y al hacer el Database.ApplyUpdates, se graban todos los renglones que capture.
Tu me pdrías dar alguna piesta de que podría estar pasando.

Gracias.

Lo que pasa es que cuando insertas una fila en la tabla detalle y no le capturas el valor que la enlaza a la tabla maestra, la fila si se inserta, pero como está "filtrada" para que solo muestre el detalle del registro correspondiente en la maestra no la muestra. Normalmente te va a pasar cuando estás dando de alta una nueva fila en la tabla maestra, pues en ese momento probablemente aun no tengas el valor del campo que las enlaza.

Para evitar esto tienes que colocar el valor correcto en el campo ligado de la tabla detalle antes de postear el valor para que la grilla te la muestre.
Por ejemplo:
Estas dando de alta la factura con folio 100, el usuario obviamente ya no necesita capturar el valor 100 en el campo factura en cada fila de la grilla de detalle. Entonces, debes de asignar el valor 100 al campo que se enlaza la tabla maestra. En esta caso se enlazarian por el campo folio.

En otras palabras, antes de postear cualquier fila en el detalle, antes deberas de colocar el mismo valor (en el ejemplo 100) en el campo ligado.

A mi me paso, que utilice un campo autoincrementado para el numero de folio y como este campo la DB no le asigna valor hasta que lo posteas pues era imposible saber que valor darle al detalle para postearlo.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #14  
Antiguo 13-01-2006
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 21
Anabel Va por buen camino
Smile

Lepe y AzidRain,

Muchas gracias por sus ideas. Efectivamente Azid, mi error, no error, era que usaba un campo Autoincremental para asignar el ID de la tabla Padre, lo cambie, ahora yo lo voy asignando y asunto arreglado.

Lepe, me quede con tu idea de no usar el DBGRID para capturar o modificar información, uso una ventana aparte para hacerlo y se ve bien

Muchas gracias a ambos!!!

Saludos!!!
__________________
Ana
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:24:08.


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
Copyright 1996-2007 Club Delphi