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 30-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mblascog.

Intenta de este modo:
Código Delphi [-]
...
implementation

uses Registry;

function IsWOW64: Boolean;
type
  LPFN_ISWOW64PROCESS = function(hProcess: THandle; var Wow64Process: BOOL): BOOL; stdcall;
var
  fnIsWow64Process: LPFN_ISWOW64PROCESS;
  bIsWOW64: BOOL;
begin
  Result:= False;
  fnIsWow64Process:= LPFN_ISWOW64PROCESS(GetProcAddress(GetModuleHandle('kernel32'), 'IsWow64Process'));
  if Assigned(fnIsWow64Process) then
  begin
    bIsWow64:= False;
    if fnIsWow64Process(GetCurrentProcess(), bIsWOW64) then
      Result:= bIsWOW64;
  end;
end;

function GetConnectStrFromDSN(const DSNStr: string): string;
const
  KEY_WOW64_64KEY = $0100;
begin
  Result:= '';
  with TRegistry.Create(KEY_READ + KEY_WOW64_64KEY * Integer(IsWOW64)) do
  try
    RootKey:= HKEY_LOCAL_MACHINE;
    if OpenKey('\SOFTWARE\ODBC\ODBC.INI', False) then
    begin
      Result:= ReadString(DSNStr);
      CloseKey;
    end;
  finally
    Free;
  end;
end;

Ej. llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetConnectStrFromDSN('Iris'));
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 30-05-2014 a las 14:11:47.
Responder Con Cita
  #2  
Antiguo 30-05-2014
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 21
mblascog Va por buen camino
Buenas Ecfisa,
Gracias por tu código. Lo he probado y me devuelve un string en blanco.
He mirado en el Registro si existía la clave y la he encontrado en HKEY_CURRENT_USER en lugar de HKEY_LOCAL_MACHINE. Lo he cambiado, pero me sigue devolviendo el string en blanco.
Puede tener algo que ver en 32 o 64 bits?

Gracias por tu ayuda.
Responder Con Cita
  #3  
Antiguo 30-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mblascog.
Cita:
Empezado por mblascog Ver Mensaje
Buenas Ecfisa,
Gracias por tu código. Lo he probado y me devuelve un string en blanco.
He mirado en el Registro si existía la clave y la he encontrado en HKEY_CURRENT_USER en lugar de HKEY_LOCAL_MACHINE. Lo he cambiado, pero me sigue devolviendo el string en blanco.
Puede tener algo que ver en 32 o 64 bits?
Es lo mas probable ya que si el SO es de 64 bits hay registros afectados por WOW64 (entre los que figura el que tratamos).

Si todo transcurre en un entorno de 32 bits el código quedaría de este modo:
Código Delphi [-]
function GetConnectStrFromDSN(const DSNStr: string): string;
begin
  Result:= '';
  with TRegistry.Create(KEY_READ) do
  try
    RootKey:= HKEY_LOCAL_MACHINE;
    if OpenKey('\SOFTWARE\ODBC\ODBC.INI', False) then
    begin
      Result:= ReadString(DSNStr);
      CloseKey;
    end;
  finally
    Free;
  end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 30-05-2014
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 21
mblascog Va por buen camino
Gracias Daniel,
Pero me sigue devolviendo una cadena en blanco.
Quizás me estoy complicando la vida. La cadena de ConnectionString la consigo a partir de la propiedad ConnectionString del componente TQuery. Al hacer click me aparece la pantalla para construir la cadena, seleccionas el origen de datos (DSN de usuario) y te la genera.
Hay alguna manera de conseguir, como sea, esta cadena en Windows Server 2003, es que no me importa ponerla a mano y dejo de complicarme la vida?.

Muchas gracias por tu ayuda.

Última edición por mblascog fecha: 30-05-2014 a las 19:00:15.
Responder Con Cita
  #5  
Antiguo 30-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mblascog.

No sé si entendí lo último que comentas pero si solo se trata de obtener la ruta de la cadena que previamente se generó en el query, creo que podrías hacer:
Código Delphi [-]
uses StrUtils;

function GetPathFromQry(const qStr:string): string;
var
  p1,p2: Integer;
begin
  Result:= '';
  p1:= Pos('DBQ=', qStr) + Length('DBQ=');
  p2:= PosEx(';', qStr , p1);
  Result := Copy(qStr ,p1, p2-p1);
end;

Ej. de llamada:
Código Delphi [-]
  ShowMessage(GetPathFromQry(ADOQuery1.ConnectionString));
De la cadena ejemplo de tu mensaje se obtendría: C:\OMH\Habitatge_Iris.mdb

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 30-05-2014 a las 20:04:18. Razón: corregir nombre de función
Responder Con Cita
  #6  
Antiguo 30-05-2014
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 21
mblascog Va por buen camino
Gracias Ecsisa,
Creo que no me expliqué bien.
He hecho un programa que accede a una base de datos Access.
Para hacer el programa me he copiado la base de datos a mi pc y desde él he trabajado.
Ahora que he acabado el programa, quiero copiarlo al servidor de la empresa, donde está la base de datos Access, por lo que tengo que cambiar el CconnectionString.
Pensaba que cambiando la ruta de la base de datos (DQQ) funcionaría, pero me da el error que comenté en el primer mensaje. Y la verdad es que ya no sé qué hacer.

Gracias
Responder Con Cita
  #7  
Antiguo 30-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mblascog.

El que te debe la disculpa soy yo que entendí cualquier cosa...

Una consulta que con seguridad ya te hayas planteado, ¿ Comparaste las cadenas de conexión de tu equipo con alguna de las existentes en el servidor como para darte una idea en que difieren ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
ADO-Access. Configurar "ConnectionString" en pc del cliente durante la insalación. Wonni Conexión con bases de datos 9 17-05-2007 18:50:51
Ocultar ConnectionString TADOConnection IsidoroM Conexión con bases de datos 4 25-05-2006 17:01:59
ADO y su Propidad ConnectionString !!! Ledian2006 Conexión con bases de datos 3 10-01-2006 20:50:39
Obtener mi ip de la PC jam888 Varios 3 06-04-2005 21:32:33
ERROR: Missing connection or ConnectionString!!!!!!!! DarkByte Conexión con bases de datos 3 09-09-2004 15:28:42


La franja horaria es GMT +2. Ahora son las 05:22:12.


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