Club Delphi  
    Paypal   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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-02-2010
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
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.

Responder Con Cita
  #2  
Antiguo 23-02-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
Responder Con Cita
  #3  
Antiguo 23-02-2010
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
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???
Responder Con Cita
  #4  
Antiguo 23-02-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por darkone2k4 Ver Mensaje
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???
Cada vez que haces la consulta te quedas con la hora en que la has hecho. Luegos revisas sólo las posteriores a ese momento.
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.

Código SQL [-]
  Select * from TFactura where ID> 342654652
o 
  Select * from TFactura where FechaHora > '20/02/2001 18:45:00'

(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.
Responder Con Cita
  #5  
Antiguo 23-02-2010
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
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:
Código SQL [-]
Select * from TFactura where FechaHora > '20/02/2001 18:45:00'
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:
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.
Para qué sería???



Responder Con Cita
  #6  
Antiguo 23-02-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por darkone2k4 Ver Mensaje

Y esto último:Para qué sería???
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.
Responder Con Cita
  #7  
Antiguo 23-02-2010
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
gracias nuevamente.

Pero si la consulta la hago comprobando el campo "fechaingreso", el cual no es indice. habrá algún problema en la bd si agrego ese campo como indice??? o no puedo hacer eso??
Responder Con Cita
  #8  
Antiguo 24-02-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por darkone2k4 Ver Mensaje
Pero si la consulta la hago comprobando el campo "fechaingreso", el cual no es indice. habrá algún problema en la bd si agrego ese campo como indice??? o no puedo hacer eso??
No se me ocurre que agregar el índice pueda darte problemas.
Eso si, debe ser un índice normal. No asignes CLUSTERED y no asignes UNIQUE.
__________________
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.
Responder Con Cita
  #9  
Antiguo 24-02-2010
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
gracias por toda tu ayuda!!!

Una última consulta, es posible saber si existe un indice por código???
Responder Con Cita
  #10  
Antiguo 24-02-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por darkone2k4 Ver Mensaje
Una última consulta, es posible saber si existe un indice por código???
Sí.
Para esa información y toda la que necesites están las tablas de sistema.
Empieza por SysObjects y SysIndexes, aunque si revisas la ayuda verás que hay para consultar todo lo que necesites.

Código SQL [-]
select top 200 * from SysIndexes
Select Top 1000 * from Sysobjects where name like 'I%'
__________________
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.
Responder Con Cita
  #11  
Antiguo 24-02-2010
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Sí.
Para esa información y toda la que necesites están las tablas de sistema.
Empieza por SysObjects y SysIndexes, aunque si revisas la ayuda verás que hay para consultar todo lo que necesites.

Código SQL [-]
select top 200 * from SysIndexes
Select Top 1000 * from Sysobjects where name like 'I%'
muchas gracias nuevamente...

has sido muy amable.

salu2
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

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


La franja horaria es GMT +2. Ahora son las 01:55:52.


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