Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como Pasar Informacion Entre Dos Bases De Datos Con Tablas Identicas? (https://www.clubdelphi.com/foros/showthread.php?t=52829)

MaSSaKKre 01-02-2008 04:32:32

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.:confused:

Espero haberme explicado bien y que me puedan ayudar.
Atte. Eduardo

poliburro 01-02-2008 05:15:48

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'

MaSSaKKre 02-02-2008 04:00:48

muchas gracias amigo, mi problema esta solucionado :D

MaSSaKKre 05-02-2008 17:25:36

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 OLEDB:Database 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:D

felipe88 05-02-2008 17:46:17

Podrias probar eliminando el logginprompt de la base de datos

MaSSaKKre 05-02-2008 22:03:40

Cita:

Empezado por felipe88 (Mensaje 263558)
Podrias probar eliminando el logginprompt de la base de datos

Pues no me funciona o no se como aplicarlo correctamente...

felipe88 05-02-2008 22:34:24

Cita:

Empezado por MaSSaKKre (Mensaje 263639)
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...:confused:

MaSSaKKre 06-02-2008 01:35:53

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.

MaSSaKKre 06-02-2008 16:20:29

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 OLEDB:Database Password=123456;'; //abriendo la bd con la contraseña actual
         sProvider1 = 'Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database 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:D


La franja horaria es GMT +2. Ahora son las 03:12:11.

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