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 22-01-2004
perrogrun perrogrun is offline
Miembro
 
Registrado: ene 2004
Ubicación: Fuengirola
Posts: 41
Poder: 0
perrogrun Va por buen camino
Delphi y las dns

Ante todo quiero daros un saludo a todos.

Vereis tengo el siguiente problema, tengo un programa que se conecta a una base de datos mysql mediante un ADOConnection1 por medio de una dns de usuario previamente creada en windows.

Funciona perfectamente pero al poner el programa en otro ordenador no funciona ya que la dns no está creada.

¿Cómo puedo hacer para que funcione en otros ordenadores?
¿Hay alguna manera de que al abrir mi programa se cree la dns?

Gracias a todos por vuestra ayuda de antemano
Responder Con Cita
  #2  
Antiguo 22-01-2004
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Fijate en los valores que se guardan en el registro de windows, en la ruta:

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\

En teoria, puedes crear una nueva conexion ODBC desde codigo, modificando el registro de windows.

Puedes:
Exportar las especificaciones de la llave de tu conexion ODBC a un archivo .reg, y luego instalarlas en la maquina del cliente, o

Chequeas todas las especificaciones que tiene tu conexion ODBC ya creada, y utilizando un objeto TRegistry, creas dichos valores (por codigo) en la maquina donde vas a instalar la app. Ten en cuenta que tambien tienes que crear una entrada con el nombre de la conexion y el tipo en:

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources

Es sencillo, si te pierdes avisanos
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #3  
Antiguo 22-01-2004
perrogrun perrogrun is offline
Miembro
 
Registrado: ene 2004
Ubicación: Fuengirola
Posts: 41
Poder: 0
perrogrun Va por buen camino
y con InstallShield??

He visto en este foro a otras persona que mas o menos les pasa lo mismo y he visto que con este intalador puedes crear las dns. Voy a probar y ya os comento como me ha ido. De todos modos si me puedes facilitar más información sobre los que me has comentado te lo agradecería mucho para estudiarlo este fin de semana. Muchas gracias por todo
Responder Con Cita
  #4  
Antiguo 22-01-2004
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Si, hay mucha documentacion, puedes verla en la ayuda de delphi, sobre la clase TRegistry.

Es bastante sencillo, incluyes la unit registry en el formulario, te creas un objeto de tipo TRegistry, le asignas el root key con el que vas a trabajar, en su propiedad root, lees los valores con readstring, y si no existe los creas con writestring. En la ayuda, como te comente, puedes ver ejemplos bien ilustra_tivos.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #5  
Antiguo 23-01-2004
perrogrun perrogrun is offline
Miembro
 
Registrado: ene 2004
Ubicación: Fuengirola
Posts: 41
Poder: 0
perrogrun Va por buen camino
interesante esto del registro

Bueno, bueno, pues si que está interesante esto del registro...

Intentaré hacer la conexion dns haber que tal...

De todos modos he encontrado dos funciones muy buenas para leer y escribir en el registro. Os pongo aquí el linkhttp://www.latiumsoftware.com/es/delphi/00004.php espero que os sirvan igual que me han servido a mi. Ya os contaré cómo me ha ido.


Muchiiiiiiiisimas gracias
Responder Con Cita
  #6  
Antiguo 26-01-2004
perrogrun perrogrun is offline
Miembro
 
Registrado: ene 2004
Ubicación: Fuengirola
Posts: 41
Poder: 0
perrogrun Va por buen camino
Parece que el enlace no funciona

Como parece que el enlace no funciona os pongo aquí las dos funciones:


Para leer el registro:

function GetRegistryData(RootKey: HKEY; Key, Value: string): variant;
var
Reg: TRegistry;
RegDataType: TRegDataType;
DataSize, Len: integer;
s: string;
label cantread;
begin
Reg := nil;
try
Reg := TRegistry.Create(KEY_QUERY_VALUE);
Reg.RootKey := RootKey;
if Reg.OpenKeyReadOnly(Key) then begin
try
RegDataType := Reg.GetDataType(Value);
if (RegDataType = rdString) or
(RegDataType = rdExpandString) then
Result := Reg.ReadString(Value)
else if RegDataType = rdInteger then
Result := Reg.ReadInteger(Value)
else if RegDataType = rdBinary then begin
DataSize := Reg.GetDataSize(Value);
if DataSize = -1 then goto cantread;
SetLength(s, DataSize);
Len := Reg.ReadBinaryData(Value, PChar(s)^, DataSize);
if Len <> DataSize then goto cantread;
Result := s;
end else
cantread:
raise Exception.Create(SysErrorMessage(ERROR_CANTREAD));
except
s := ''; // Deallocates memory if allocated
Reg.CloseKey;
raise;
end;
Reg.CloseKey;
end else
raise Exception.Create(SysErrorMessage(GetLastError));
except
Reg.Free;
raise;
end;
Reg.Free;
end;

Para llamar a esta funcion por ejemplo:
ShowMessage(GetRegistryData(HKEY_LOCAL_MACHINE,
'\SOFTWARE\ODBC\ODBC.INI\pelicula', 'SourceDB'));





Para escribir en el registro:

procedure SetRegistryData(RootKey: HKEY; Key, Value: string;
RegDataType: TRegDataType; Data: variant);
var
Reg: TRegistry;
s: string;
begin
Reg := TRegistry.Create(KEY_WRITE);
try
Reg.RootKey := RootKey;
if Reg.OpenKey(Key, True) then begin
try
if RegDataType = rdUnknown then
RegDataType := Reg.GetDataType(Value);
if RegDataType = rdString then
Reg.WriteString(Value, Data)
else if RegDataType = rdExpandString then
Reg.WriteExpandString(Value, Data)
else if RegDataType = rdInteger then
Reg.WriteInteger(Value, Data)
else if RegDataType = rdBinary then begin
s := Data;
Reg.WriteBinaryData(Value, PChar(s)^, Length(s));
end else
raise Exception.Create(SysErrorMessage(ERROR_CANTWRITE));
except
Reg.CloseKey;
raise;
end;
Reg.CloseKey;
end else
raise Exception.Create(SysErrorMessage(GetLastError));
finally
Reg.Free;
end;
end;


Para llamar a esta funcion:

SetRegistryData(HKEY_LOCAL_MACHINE,
'\SOFTWARE\ODBC\ODBC.INI\pelicula',
'BackgroundFetch', rdString, 'Sí');
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


La franja horaria es GMT +2. Ahora son las 05:49: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