Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-02-2008
MaSSaKKre MaSSaKKre is offline
Miembro
 
Registrado: sep 2005
Posts: 34
Poder: 0
MaSSaKKre Va por buen camino
Question Como Pasar Informacion Entre Dos Bases De Datos Con Tablas Identicas?

Buen dia a todos...

Espero me puedan ayudar con esta duda que tengo.
Sucede que estoy trabajando sobre dos bases de datos exactamente iguales mismas tablas etc., las base de datos estan hechas en Access y mis interfaz en Delphi 7.

La cuestion es la siguiente...
una de las bases de datos trabaja en una laptop (forma remota)y la otra trabaja en oficina (local), esto debido a que se hace un cobro en caja y un cobro por domicilio en caso de que el cliente asi lo requiera; ahora bien, la base de datos de la caja local se llama BDLOCAL y la instalada en la en la portatil es BDREMOTA, supongamos que los datos capturados en la BDREMOTA los quiero agregar (copiar todos los registros creados en el dia o segun mis criterios) a la BDLOCAL, la tabla en cuestion se llama tbl_Recibos.

para no meterme en tantos lios, semanalmente voy a copiar la BDREMOTA en la caja fija y despues hacer el migrado de datos.
Lo que deseo saber es, que componentes debo usar para conectarme a las dos base de datos y como hacer mi consulta insert de datos para realizar el migrado de datos.

Espero haberme explicado bien y que me puedan ayudar.
Atte. Eduardo
Responder Con Cita
  #2  
Antiguo 01-02-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
El componente que debes utilizar es ADO,

Realizas la conexión a la base de datos local y ejecutas una consulta del estilo:

Insert into TablaLocal
Select * From TablaRemota In 'RutaBaseDeDatos'
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 02-02-2008
MaSSaKKre MaSSaKKre is offline
Miembro
 
Registrado: sep 2005
Posts: 34
Poder: 0
MaSSaKKre Va por buen camino
muchas gracias amigo, mi problema esta solucionado
Responder Con Cita
  #4  
Antiguo 05-02-2008
MaSSaKKre MaSSaKKre is offline
Miembro
 
Registrado: sep 2005
Posts: 34
Poder: 0
MaSSaKKre Va por buen camino
Ahora me ha surgido otro problemita, sucede que ambas bases de datos estan protegidas por contraseña por lo cual no puedo hacer el migrado de datos, es decir, cuando les quito la contraseña a ambas bases de datos o por lo menos a la base de datos remota, si logro hacer el migrado de datos, pero cuando tiene contraseña no puedo hacer dicho migrado.

Mi conexion a la base de datos es la siguiente

Código Delphi [-]


//CONECTANDO LA BASE DE DATOS
    //CONDICION DE QUE LA BD DEBE ESTAR DESCONECTADA
     IF ADOCONNECTION1.Connected= FALSE THEN
        BEGIN
 IF FILEEXISTS(RUTA) THEN  //SI LA RUTA EXISTE SE CONECTA
  BEGIN
 ADOCONNECTION1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+QuotedStr(RUTA)+';Persist Security Info=false;Jet OLEDBatabase Password=123456'; //asignando la contraseña de la base de datos
 ADOCONNECTION1.Connected:=TRUE;
 ShowMessage('LA CONEXION DE LA BASE DE DATOS HA SIDO EXITOSA');
 EXIT;
  END
    ELSE
      BEGIN //SI LA RUTA NO EXISTE ENVIA MENSAJE DE ERROR
      ShowMessage('NO SE ENCUENTRA LA BASE DE DATOS EN LA RUTA ESPECIFICADA');
      EDIT1.SetFocus;
      EXIT;
      END;
        END
           ELSE   //IF DE VERIFICACION DE BD CONECTADA, SI YA ESTABA CONECTADA ENVIA AVISO
             BEGIN
             ShowMessage('LA CONEXION DE LA BASE DE DATOS YA HA SIDO REALIZADA ANTERIORMENTE');
             EXIT;
             END;




despues estes es el codigo que utilizado para el migrado de la informacion es el siguiente:



Código Delphi [-]
with ADOQuery1 do
begin
   Close;
   SQL.Clear;
              //TABLA_LOCAL SERVIDOR         //TABLA_REMOTA LAPTOP
SQL.Add('INSERT Into tbl_ING_Recibos Select * From tbl_ING_Recibos In"'
        +DIR+'"where FechaRecibo like "'+FECHAPAGO+
        '" AND ClaveRecibo BETWEEN '+RECIBO1+' AND '+RECIBO2+'');
 ExecSQL;
   END;
//ENVIANDO DATOS A LA SEGUNDA TABLA DE LA BASE DE DATOS
with ADOQuery2 do
begin
   Close;
   SQL.Clear;
                  //TABLA_LOCAL SERVIDOR         //TABLA_REMOTA LAPTOP
SQL.Add('INSERT Into tbl_ING_RecibosCuentas Select * From tbl_ING_RecibosCuentas In"'
        +DIR+'"where ClaveRecibo BETWEEN '+RECIBO1+' AND '+RECIBO2+'');
 ExecSQL;
  END;//ADOQUERY
     END; //CERRAMOS EL IF DE VERIFICACION DE BD CONECTADA
el problema esta en que al conectarme con la base de datos a una si la estoy abriendo con el password y la otra en ningun
momento digo cual es su pass ni lo asigno ni nada y pues no se donde debo abrir la base de datos y asignarle su pass.
ahora bien la solucion seria de que ya fuera que al momento de abrir mi aplicacion antes de hacer el migrado de datos, yo pudiera quitarle por medio
de codigo la contraseña a la base de datos, luego hacer el migrado y poner nuevamente la contraseña a la base de datos ó
en su defecto, pues que alguien me ayude con mi consulta para poder abrir la base de datos antes que se ejecute
mi codigo SQL.

Espero me respondan.
saludos
Responder Con Cita
  #5  
Antiguo 05-02-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Podrias probar eliminando el logginprompt de la base de datos
__________________
Web
Responder Con Cita
  #6  
Antiguo 05-02-2008
MaSSaKKre MaSSaKKre is offline
Miembro
 
Registrado: sep 2005
Posts: 34
Poder: 0
MaSSaKKre Va por buen camino
Cita:
Empezado por felipe88 Ver Mensaje
Podrias probar eliminando el logginprompt de la base de datos
Pues no me funciona o no se como aplicarlo correctamente...
Responder Con Cita
  #7  
Antiguo 05-02-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Cita:
Empezado por MaSSaKKre Ver Mensaje
Pues no me funciona o no se como aplicarlo correctamente...
Y como lo aplicas... desde el componente DataBase o por codigo...

Bueno y no hay algun programa que te permita hacer eso o el mismo acces...
__________________
Web
Responder Con Cita
  #8  
Antiguo 06-02-2008
MaSSaKKre MaSSaKKre is offline
Miembro
 
Registrado: sep 2005
Posts: 34
Poder: 0
MaSSaKKre Va por buen camino
Problema Para Una Consulta Inser En Bd Access Desde Delphi

Pues lo que pasa es que si a la base de datos le quito la contraseña si puedo hacer las consulta insert, pero lo que no quiero es dejar tan vulnerable la bd, al menos para que usuarios inexpertos.
Responder Con Cita
  #9  
Antiguo 06-02-2008
MaSSaKKre MaSSaKKre is offline
Miembro
 
Registrado: sep 2005
Posts: 34
Poder: 0
MaSSaKKre Va por buen camino
Talking Problema Resuelto, Eliminar La Contraseña De La Base De Datos

Pues bien, despues de tanto leer por ahi, encontre la solucion para eliminar el password de una base de datos, me guie de la siguiente direccion:
http://www.delphi3000.com/articles/article_1278.asp?SK=

y adecue mi codigo de la siguiente manera

Código Delphi [-]
 
//funcion
 
Function CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean; 
const 
         sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDBatabase Password=123456;'; //abriendo la bd con la contraseña actual
         sProvider1 = 'Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDBatabase Password=;'; //creando la nueva bd sin contraseña o en su defecto se puede poner otra contraseña nueva
var
         oJetEng   : JetEngine;
begin
         sOldMDB := sProvider + 'Data Source=' + sOldMDB;
         sNewMDB := sProvider1 + 'Data Source=' + sNewMDB;
         try 
            oJetEng := CoJetEngine.Create;
            oJetEng.CompactDatabase(sOldMDB, sNewMDB);
            oJetEng := Nil; 
            Result  := True; 
         except 
            oJetEng := Nil;
            Result  := False; 
         end; 
end;


llamado de funcion:

Código Delphi [-]
CompactAndRepair(''+edit2.Text+'', ''+edit1.Text+'');

obvio el edit2 es la ruta actual de la bd y el edit1 es la ruta de la nueva bd, osea donde quedarà una vez creada.
hay que implementarle un nombre temporal a la bd nueva y posteriormente cambiar el nombre desde codigo, al menos en mi caso para lo que la voy a utilizar, asi funciona.

Gracias por la ayuda y ahi esta el code para los que lo puedan necesitar.

Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como pasar datos de una hoja de Excel a Bases de Datos de Paradox Goyo OOP 1 06-02-2007 01:57:20
Mydac con Treeviwew como listar Bases de Datos y Tablas JXJ MySQL 0 10-10-2006 20:21:02
Intercambiar información entre bases de datos por Internet ¿TCP o FTP? Ariel Pérez Internet 2 15-09-2006 08:28:35
Como realizar consultas entre dos bases de datos jfgonzalez Conexión con bases de datos 1 20-10-2005 01:52:48
Como Asociar Tablas de bases de Datos distintas pcicom Firebird e Interbase 1 29-09-2004 18:39:32


La franja horaria es GMT +2. Ahora son las 04:28:54.


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