![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Capturar datos bd mssql a ms access
salu2 amigos.
Les escribo por lo siguiente: Tengo que realizar una aplicación que capture los datos de facturas de una bd en ms sql y la traspase a un archivo ms access. Sé como conectarme a la bd SQL y obtener los datos que necesito y traspasarlos a access, mi duda es como poder hacer que el programa quede residente en memoria y al momento de que se ingrese una nueva factura o se realice una nota de crédito, el programa automáticamente traspase los datos a access. Es posible realizar de esa forma el proceso???? desde ya, muchas gracias. |
|
#2
|
||||
|
||||
|
Para conectar a las dos Base de datos puedes hacerlo directamente desde un programa Delphi utilizando dos conexiones una (ADOConnection a cada BD) o realizar la conexión desde Access utilizando tablas vinculadas y desde el programa Delphi trabajar sólo con la Base de Datos de Access.
Podrías hacer la prueba a ver si alguna de las dos te da mejor rendimiento que la otra. en cuanto a dejar el programa "residente", basta con que lo ejecutes y lo ocultes el formulario (si lo seseas) o crees un icono en la bandeja de sistema (junto al reloj). Para detectar las actualizaciones, puedes utilizar un Timer cada X tiempo que compruebe si hay nuevas facturas (1), o utilizar una tabla de avisos para optimizar la consultas (2). (1) Consiste en consultar la tabla de facturas y destectar si hay alguna factura posterior a la última hora en que hiciste esta misma consulta. (2) Si la tabla de Facturas es muy grande y no quieres consultarla constantemente, lo que se hace a veces es utilizar una tabla de avisos (muy pequeña y rápida de consultar). Cada vez que añades una factura añades también un aviso a la tabla de avisos. Cuandos el programa consulta la tabla de avisos y detecta algun aviso, sabe que hay facturas nuevas y realiza el trabajo estipulado (y borra los avisos); Si la tabla de avisos está vacía, te evitas consultar la tabla grande (facturas). Espero haberme explicado bien. Hay más opciones y mejoras, pero esto te puede dar una idea de por donde empezar.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#3
|
|||
|
|||
|
Muchas gracias por la respuesta Neftali.
Respecto a la solución Nº 2, no puedo hacerlo porque esa BD SQL es de un sistema comercial, por lo que no puedo crear una tabla avisos cuando se almacene una factura. Respecto a la solución Nº 1, como podría detectar si hay alguna factura posterior a la última hora en que hice esta misma consulta??? |
|
#4
|
||||
|
||||
|
Cita:
Por ejemplo, imagina que quieres hacer la comprobación cada minuto: (1) Al arrancar la aplicación buscas la última factura que sincronizaste en la tabla Access y te quedas con esa fecha. Me imagino que las facturas tendrán un campo FechaHora o lo puedes hacer utilizando el IDFactura. (2) Lanzas tu consulta en la tabla SQL para detectar inserciones posteriores.
(3) Procesas todas las facturas encontradas y te quedas con el IDFactura o FechaHora de la última(*). (4) La siguiente consulta la haces utilizando los valores encontrados aquí (*), con la SQL similar a la de arriba. Con este sistema, cada consulta se hace sólo para averiguar las facturas posteriores a la última que ya has procesado. Importante que tengas índices definidos sobre el campo sobre el que haces la búsqueda o que selecciones un campo por el que exista índice.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#5
|
|||
|
|||
|
nuevamente muchas gracias por la respuesta.
Revisando la tabla de facturas, si posee un campo llamado fechaingreso del tipo datetime, por lo que podría realizar la consulta que me indicas. Entonces una vez realizada la consulta: Capturo el resultado y lo inserto en las tablas en access y además en una tabla "control" almaceno la fecha y hora del último de los registros capturados o la fecha y hora del momento en que se realizó la captura. Y esto último: Cita:
|
|
#6
|
||||
|
||||
|
Porque la consulta que vas a realizar sobre la tabla de facturas será mucho menos costosa, si existe un índice por el campo que vas a utilizar en el WHERE.
De ahí que revises si te sirve el número de factura, la fecha, un autoincremental,... (a ver cual de ellos tiene índice definido). Es importante que exista índice por ese campo, mejor si el índice es UNIQUE. Si es la clave principal, es probable que el íundice en SQL Server sea CLUSTERED. ¡¡Eso sería lo máximo!! ![]() Siempre es mejor filtrar/ordenar/... por campos numéricos (eso incluye los DateTime) frente a otros tipo String.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Vincular Access con MSSQL Server y Firebird | Tanis30 | Conexión con bases de datos | 6 | 18-02-2012 12:46:02 |
| exportar datos de una tabla en mssql | richy08 | MS SQL Server | 2 | 13-01-2010 19:52:15 |
| Quiero capturar mensajes de error de Access y personalizarlos en Delphi | bigpeter80 | Varios | 10 | 20-12-2008 18:32:45 |
| Capturar Error Access | n03l | Conexión con bases de datos | 1 | 28-07-2008 14:28:06 |
| Como realizar un Backup a una Base de Datos de MSSQL desde mi aplicacion?? | rjtostado | MS SQL Server | 4 | 12-05-2005 17:05:41 |
|