Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-01-2009
Nharkor Nharkor is offline
Registrado
 
Registrado: ene 2008
Posts: 7
Poder: 0
Nharkor Va por buen camino
cambiar base de datos por código sin usar ODBC

Vereis, me han pasado una aplicación desarrollada con el Delphi 7 y tengo que realizar algunos cambios. El problema es que jamás he usado Delphi. Aun así puedo seguir el código bastante bien.
El caso es que la aplicación utiliza una base de datos Acces. En toda la aplicación se utiliza un alias "BDEVACOM" para referirse a ella. Este alias se corresponde con un ODBC creado en el sistema que apunta a una base de datos concreta: "D:\Evacom\cof.mdb".

Yo lo que quiero permitir que el usuario elija la base de datos que quiera (un fichero ".mbd" de Access) de una lista, o sea que no puedo tener la base de datos "fijada", la tengo que poder cambiar por código dinámicamente.

Por lo que veo las consultas SQL se hacen con TQuery y he visto lineas de este estilo:


query.DataBaseName:='BDEVACOM'
Pero yo necesito algo como esto:
query.DataBasename = RutaMDB
o sea, poder indicar un ".mdb" cualquiera.
Esto seria lo ideal. La otra opción sería poder cambiar el ".mdb" asociado al ODBC por código.
Agradeceria cualquier ayuda al respecto porque estoy bloqueado, sin poder avanzar.
Un saludo.
Responder Con Cita
  #2  
Antiguo 23-01-2009
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: 18.549
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
En tu caso creo que lo que necesitas es modificar ese Alias ("BDEVACOM") por código.
Si buscas en los foros, seguro que encuentras más soluciones; Yo por lo pronto he encontrado este hilo y este otro, aunque seguro que hay más...

Esa configuración posiblemente no es la más adecuada (visto a día de hoy)[NOTA**]; Con esto quiero decir, que si en un futuro piensas seguir haciendo cambios en la aplicación, posiblemente puedas (y te interese) modificar el sistema de conexión a la Base de Datos o incluso la Base de Datos, pero eso es "otro cantar"; Si es así, dilo y seguro que el enfoque es otro. Si lo que necesitas son los cambios mínimos para conseguir lo que explicas "sin tener que tocar mucho código" creo que lo de arriba te será más que suficiente.

[NOTA**]: Delphi7 + Access + BDE(ODBC)
__________________
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.

Última edición por Neftali [Germán.Estévez] fecha: 23-01-2009 a las 14:39:04.
Responder Con Cita
  #3  
Antiguo 23-01-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, te dejo este codigo (ya antiguo). Con el puedes borrar y crear alias, etc...

Código Delphi [-]
unit odbcacces;


interface
        function AddDSN(const DSN, Database, Description: String): Boolean;
        function RemoveDSN(const DSN: String): Boolean;
        function RepairDB(const Database: String): Boolean;
        function CompactDB(const Database1, Database2: String): Boolean;

implementation

uses
        Windows, sysutils;


const ODBC_ADD_DSN = 1; // Add data source
      ODBC_CONFIG_DSN = 2; // Configure (edit)data source
      ODBC_REMOVE_DSN = 3; // Remove data source
      ODBC_ADD_SYS_DSN = 4; // add a system DSN
      ODBC_CONFIG_SYS_DSN = 5; // Configure a system DSN
      ODBC_REMOVE_SYS_DSN = 6; // remove a system DSN ODBC_REMOVE_DEFAULT_DSN = 7; // remove the default DSN

function SQLConfigDataSource( hwndParent: HWND; fRequest: WORD; lpszDriver: LPCSTR;
lpszAttributes: LPCSTR): BOOL; stdcall; external 'ODBCCP32.DLL';

function AddDSN(const DSN, Database, Description: String): Boolean; begin Result :=
SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)', PChar( 'DSN='
+ DSN + #0 + 'Driver=ODBCJT32.DLL'#0 + 'DBQ=' + Database + ''#0 + 'DefaultDir=' +
ExtractFilePath(Database) + #0 + 'Description=' + Description + #0 + 'FIL=MSAccess'#0 + 'UID=Admin'#0)); end;

function RemoveDSN(const DSN: String): Boolean; begin Result :=
SQLConfigDataSource(0, ODBC_REMOVE_DSN, 'Microsoft Access Driver (*.mdb)', PChar(
'DSN=' + DSN + #0)); end;

function RepairDB(const Database: String): Boolean; begin Result :=
SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)', PChar(
'REPAIR_DB=' + Database + #0 + 'UID=Admin'#0 + 'PWD=PWSWAN'#0)); end;

function CompactDB(const Database1, Database2: String): Boolean; begin Result :=
SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)', PChar(
'COMPACT_DB=' + Database1 + ' ' + Database2 + ' General'#0 + 'UID=Admin'#0 +
'PWD='#0)); end;

end.

Asi, si quieres 'cargar' una base de datos, tansolo tendras que borrar y recrear el alias. Te recomiendo, de todas maneras, que pases a ADO o a SQL, pues estas cosas se simplifican mucho. Saludos.
Responder Con Cita
  #4  
Antiguo 24-01-2009
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.412
Poder: 22
fjcg02 Va camino a la fama
Pon este código en el FormCreate

Código Delphi [-]
   Conexion.Connected:= False;
   Conexion.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;' +
     'Data Source= '+ wdatos+'Presupuestos.mdb;';
database="";Jet OLEDB:Registry Path="";Jet OLEDBatabase Password="";Jet OLEDB:Engine Type=5;Jet OLEDBatabase 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 OLEDBon''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
De esta manera no se utiliza odbc, sino que se utiliza JetOleDB. Así se manipula la cadena de conexión del TADODatabase.
wdatos es el directorio donde está el mdb. Yo lo pongo en este procedimiento porque indico en un ini el directorio del mdb. No creo que te cueste demasiado adaptarlo para que seleccione el mdb el propio usuario.
Por otro lado puedes generar la cadena de conexión y revisarla con cualquier editor de texto.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 27-01-2009
Nharkor Nharkor is offline
Registrado
 
Registrado: ene 2008
Posts: 7
Poder: 0
Nharkor Va por buen camino
Muchisimas gracias a todos. Voy a probar vuestras ideas a ver si me funciona.
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
Base de datos local sin odbc ni aliases waremovil C++ Builder 3 09-01-2009 15:41:17
Conexion a base de datos Access con ODBC Nbull Conexión con bases de datos 4 26-12-2005 18:03:58
conexion mediante ODBC a la base de datos mysql, por linea de codigo de delphi sakuragi Conexión con bases de datos 21 15-03-2005 19:43:59
conectar base de datos mediando ODBC AdministratOR sakuragi Conexión con bases de datos 2 20-09-2004 21:51:57
Alguien sabe como crear un alias en Fuentes de datos ODBC (32 bits) por codigo ? edson Conexión con bases de datos 2 15-04-2004 16:57:26


La franja horaria es GMT +2. Ahora son las 00:56:28.


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