PDA

Ver la Versión Completa : Grabar Multiples registros en caliente (Firebird)


pcicom
23-09-2004, 23:32:46
Saludos... soy nuevo en este FORO, he leido en ocasiones algunas consultas que han sido de mi interes, y ahora toca hacer algunas, espero me puedan ayudar.


Estoy haciendo la conversion de un sistema de VB a Delphi y las bases eran DBF, las cuales ya converti a Firebird y todo eso, no hay realmente ningun problema en eso, el detalle es que tengo una captura en donde capturo en un GRID una lista de informacion de hasta como 20 o 30 lineas, y las mando grabar leyendo el grid y grabando linea a linea en firebird, y veo que se tarda como 1/2 segundo en cada post que ejecuto, de hecho si una linea ya existia en la BD y actualizo un dato , entonces la actualiza mas rapidamente...

mi logica va mas o menos asi

Uso los compomentes TIBOTable de IBObjects

tabla.IB_connect := dmRaiz.db
tabla.indexname "FACTCODI"

como facturas detalla
leo contenido del grid
tomo los datos del grid, codigo
busco factura,codigo
si existe
tabla.edit
actualizo datos modificados de la partida
tabla.post
no existe
tabla.append
actualizo datos modificados de la partida
tabla.post
siguiente elemento del grid
fin leo


No me quejo, me es aceptable, pero no se si modificando algunos parametros del firebird o agregando algunas instricciones en delphi,,, pueda mejorar el desempeño...

AGAG4
24-09-2004, 01:27:29
Te aconsejo que uses llaves foraneas y en especial para los Mestros Detalles y no entendí como explicas la manera del guardado ó se desacomodo el texto que pusistes.... Que tengas buen día.

pcicom
24-09-2004, 02:59:58
Similar a un sistema Maestro Detalle de FACTURAS

leo contenido del grid
----tomo los datos del grid, codigo
----busco factura,codigo
----si existe
-------tabla.edit
-------actualizo datos modificados de la partida
-------tabla.post
----no existe
-------tabla.append
-------actualizo datos modificados de la partida
-------tabla.post
----siguiente elemento del grid
fin leo

AGAG4
24-09-2004, 16:20:13
Una Cosa muy importante, si estas usando el dbGrid, no es necesario que actualices manualmente el dbGrid con un "Post", Automaticamente lo hace este mismo conforme vas agregando un nuevo registro, al terminar la captura cuando el usuario esta de acuerdo de que la Factura esta bien, se acepta la "Transacción" en el caso de que los componentes que usas tengan esta propiedad.

Yo uso un Maestro Detalle así:

Capturo Campos "llave primaria"
----SI Se Encuentran Entonces
Edito el Maestro y el Detalle
----SI NO
Inserto y Edito Nuevo Registro en Maestro y Detalle
----Capturo los Productos(Detalle-dbGrid)
SI PRODUCTO EXISTE ENTONCES
DESPLIEGO DATOS DEL PRODUCTO
SI NO
LANZO UN MENSAJE Y NO AVANZO DE CELDA
-----SI EL USUARIO ESTA SEGURO DE LOS DATOS CAPTURADOS
SOLO GRABO MAESTRO
TRY
ACEPTO TRANSACCION
EXCEPT //SI HAY UNA EXCEPCIÓN ENTONCES
MENSAJE(ERROR...NO SE HA PODIDO GRABAR FACTURA)
CANCELO TRANSACCION
END;
------FIN.

Espero haberte ayudado. Que tengas buen día.

guillotmarc
24-09-2004, 17:49:40
Hola.

Comprueba con el depurador de Delphi cada una de las líneas que se ejecutan en el bucle, para encontrar cual es la que tarda tanto en completarse.

Probablemente sea la busqueda de si la factura existe. Seguramente podrás agilizarla, creando unos índices sobre los campos sobre los que se busca.

Saludos.

Casimiro Notevi
24-09-2004, 22:48:45
Hola: ¿cuál es esa opción de debug con la que se puede ver el tiempo de proceso de cada línea de código?
chao.

guillotmarc
27-09-2004, 14:35:01
Hola.

No existe ninguna opción así (no estaria mal que la añadieran). Pero puedes ir ejecutando línea a línea, y cuando veas que hay una demora al pasar el control a la siguiente línea, es que has encontrado la instrucción lenta.

Saludos.