Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Sistema MultiBase de Datos (https://www.clubdelphi.com/foros/showthread.php?t=73072)

oscarac 30-03-2011 07:01:04

Sistema MultiBase de Datos
 
buenas madrugadas....

Tengo una inquietud ahora que me he visto obligado avanzar mi sistema en 2 lugares distintos....
en uno de ellos uso access y en el otro MS SQL Server

entonces... en las consultas hago algo asi....

Código Delphi [-]
 
if Casa then
..... StrSql := 'Select..... // Query que funcione en SQL Server
Else
..... StrSql := 'Select.... // Query que funcione en Access

existe o alguien sabe un mejor metodo?

gracias

duilioisola 30-03-2011 08:52:05

Podrías hacer una función a la que le pases una sentencia SQL y te devuelva una traducida para el motor de base de datos que necesites.

Lo que desconozco son las diferencias entre las sintaxis SQL de uno y otro motor.

Código Delphi [-]
{Le envías un sentencia SQL que funcione en MSSQL y te devuelve una que funciona en Access}
procedure TraduceSQL(SQL : string) : string;
begin
   if (Casa) then
      Result := SQL;
   else
   begin
      // Aquí viene lo dificil
      // modificar las partes del sql que no funcionen en Access
      ...
   end;
end;

StrSql := TraduceSQL('SELECT ...');

Neftali [Germán.Estévez] 30-03-2011 09:54:42

En mi caso era un sistema bastante más complejo, ya que se trataba de tener algo similar pero para 5 SGBD's distintos. En nuestro caso utilizamos herencia.

Una clase genérica TGenSQL con los métodos necesarios para generar todas las SQL. A partir de ahí se derivan las clases para cada motor concreto, de forma que debes redefinir sólo aquellas propiedades que en cada motor son diferentes.

RICTAPIA5 30-03-2011 22:53:35

dephi access & sql server
 
Oscar

ya tengo una aplicacion que funciona el mismo fuente en acces y sqlserver

siempre y cuando uses TADO y sus conectores
y que la base de datos de sql server la hayas migrados desde la herramienta de exportación de access

vas a tener problemas con campos bit por lo que te recomiendo usar el 0 y 1 para asignar datos

y algunos temas de como se hacen group by

pero practicamente todo es lo mismo

oscarac 30-03-2011 22:59:39

Cita:

Empezado por RICTAPIA5 (Mensaje 395150)
Oscar

ya tengo una aplicacion que funciona el mismo fuente en acces y sqlserver

y como lo has echo? tienes nu ejemplo?

[quoted]
siempre y cuando uses TADO y sus conectores
y que la base de datos de sql server la hayas migrados desde la herramienta de exportación de access
[/quote]
uso ADO y exporte la base de datos del SQL Server a Access

RICTAPIA5 31-03-2011 00:37:33

Access & SQL Server
 
1)desde el acces 2007 (y hasta donde recuerdo el 2003 tambien puede)

crea tu BD y ponle las tablas que usarás y luego dale exportar a sqlserver


2)Para conectarme con SQL server usando Tadoconnection y esto lo leo desde un ini dependiendo de mi cliente

conxString= Provider=SQLNCLI.1;Password=1234567;Persist Security Info=True;User ID=sa;Initial Catalog=donativosleon13;Data Source=pragmatica\sqleng



3)
Para conectarme con Acces usando el MISMO Tadoconnection y esto lo leo desde un ini dependiendo de mi cliente

conxString= Provider=Microsoft.ACE.OLEDB.12.0;Password="";User ID=Admin;Data Source=C:\Donativos\donantivos.accdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False


4)Éste es un query en un TADOQUERY y funciona en los dos

SELECT
DONANTE.DOMICILIO_FISCAL,
DONANTE.COLONIA_FISCAL,
DONANTE.MUNICIPIO_ENVIO,
DONANTE.ESTADO_ENVIO,
DONANTE.RFC,
DONANTE.EMPRESA,
DONANTE.PUESTO,
DONANTE.CLAVE_SAE,
C_DESTINO_RECURSO.DESTINO_RECURSO,
DONATIVO.ID_DESTINO_RECURSO,
DONANTE.ID_DONANTE AS IDDONANTE, DONATIVO.ID_DONANTE, DONATIVO.ID_DONATIVO, DONANTE.DIA_COBRO_TARJETA, DONANTE.TITULO, DONANTE.NOMBRE, DONANTE.APELLIDO_PATERNO, DONANTE.APELLIDO_MATERNO, DONANTE.RECIBO_A_NOMBRE_DE, DONANTE.TELEFONO_OFICINA, DONANTE.TELEFONO_CASA, C_FORMA_PAGO.D_FORMA_PAGO, LAPSO_COBRO.D_LAPSO_COBRO, DONATIVO.COMENTARIO, DONATIVO.COMENTARIO_2, DONATIVO.MONTO_SUGERIDO, DONATIVO.MONTO_X_COBRAR, DONANTE.ID_BANCO
FROM C_BANCO INNER JOIN (LAPSO_COBRO INNER JOIN (DONANTE INNER JOIN (C_ESTADO_DONATIVO INNER JOIN (DONATIVO INNER JOIN C_FORMA_PAGO ON DONATIVO.ID_FORMA_PAGO = C_FORMA_PAGO.ID_FORMA_PAGO) ON C_ESTADO_DONATIVO.ID_ESTADO_DONATIVO = DONATIVO.ID_ESTADO_DONATIVO) ON DONANTE.ID_DONANTE = DONATIVO.ID_DONANTE) ON LAPSO_COBRO.ID_LAPSO_COBRO = DONANTE.ID_LAPSO_COBRO) ON C_BANCO.ID_BANCO = DONANTE.ID_BANCO
INNER JOIN
C_DESTINO_RECURSO C_DESTINO_RECURSO
ON (DONATIVO.ID_DESTINO_RECURSO = C_DESTINO_RECURSO.ID_DESTINO_RECURSO)
WHERE DONATIVO.ID_CAMPANIA=:PID_CAMPANIA
ORDER BY DONANTE.APELLIDO_PATERNO,DONANTE.NOMBRE

5)Desde mi humilde modo de ver a tu cliente que tiene acces deberías instalarle el sql server 2005 o 2008 la version EXPRESS y esa es gratuita y funciona perfectamente en una PC

cualquier cosa por favor dime


La franja horaria es GMT +2. Ahora son las 13:06:23.

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