Delphi - Encontrar la base de datos al cambiar la ruta

 
Vista:

Encontrar la base de datos al cambiar la ruta

Publicado por Ivan (10 intervenciones) el 19/08/2004 02:18:45
Desde ya gracias por responder. Esto haciendo un sistema el cual se conecta a una base de datos por medio de los componentes ADO, el sistema ya esta listo, pero al cambiar la base de datos (junto al .exe) el programa no la encuentra, he intentado hacer que no pase asignandole a la propiedad 'ConcectionString' del ADDataset los parametros necesarios + la ruta que corresponde al .exe y en lugar del nombre del .exe el nombre de la base de datos y sin embargo sigue sin encontrarla, mi solucon seria saber como encontrar la base de datos en los componentes ADO o si no saber con que otro componente seria mas facil encontrarla, desde ya gracias. Ivan.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Encontrar la base de datos al cambiar la ruta

Publicado por mamcx (533 intervenciones) el 19/08/2004 18:24:45
Pues lo que comentas es basicamente lo que se hace. Como es el connection string y el codigo que asigna el nombre de la bd?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar la base de datos al cambiar la ruta

Publicado por BigLuis (713 intervenciones) el 19/08/2004 19:41:26
Mamcx está en lo cierto, pero piensa que si le asignas la ConnectionString en diseño y compilas la aplicacion queda asignada esa conexion.Luego si en ejecucion quieres asignarle una nueva conexion tines que crear la nueva ConnectionString (*.udl) igualmente en ejecucion con los nuevos parametros, cerrar las conexiones, asignala y volver a abrir. TEN EN CUENTA QUE EN DELPHI 5 EXISTE UN BUG y una vez asignada una conexion en diseño, si compilas, despues no se sabe porque no asume los cambios que le hagas en ejecucion.Creo que existe un parche (no estoy seguro) y esto ha quedado arreglado en Delphi 6 ServiPack 2.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar la base de datos al cambiar la ruta

Publicado por ivan (10 intervenciones) el 20/08/2004 01:55:55
En el evento OnCreate del formulario esta esto

label1.Caption:=ExtractFilePath(Application.ExeName)+'base.mdb';
ADODataSet1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+label1.Caption+';Persist Security Info=False';
ADODataSet1.Active:=true;

Estoy haciendo el programa en Delphi 7, gracias por responder a los dos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar la base de datos al cambiar la ruta

Publicado por mamcx (533 intervenciones) el 20/08/2004 16:50:24
La ruta no te da "rutabase.mdb"? Estoy seguro que hay que agregar "\" despues de ExtractFilePath. Porque no capturas el string, y manualmente haces la prueba?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar la base de datos al cambiar la ruta

Publicado por Bigluis (4 intervenciones) el 20/08/2004 17:28:17
¿Por que no utilizas un fichero UDL de conexion?.La llamada seria la siguiente ADOConnection1.ConnectionString:='File Name='+fConexion; donde fconexion es el fichero UDL.Te voy a ayudar un poco mas con un par de procedimientos que lo crean en runtime
const
Ini ='FicheroINI.ini'; //Fichero INI de configuracion
Datos ='MiBasedeDatos.mdb'; //Carpeta y nombre de la Base de Datos Access
FicheroUDL ='Conexion.UDL'; //Fichero de Conexion
implementation

uses OleDB,ComOBJ;
{$R *.DFM}

procedure CreateUDLFile(const FileName, ProviderName, DataSourceName: WideString);
const
ConnStrTemplate = 'Provider=%s;Data Source=%s';
var
ConnStr: WideString;
DataInit: IDataInitialize;
begin
DataInit := CreateComObject(CLSID_DataLinks) as IDataInitialize;
ConnStr := Format(ConnStrTemplate, [ProviderName, DataSourceName]);
OleCheck(DataInit.WriteStringToStorage(PWideChar(FileName), PWideChar(ConnStr), 1));
end;
Esta es la primera procedure que crea realmente el fuichero UDL cuando es llamada desde la siguiente........>>>>>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar la base de datos al cambiar la ruta

Publicado por BigLuis (713 intervenciones) el 20/08/2004 17:30:01
procedure TModulo.CreaUDL(Sender: TObject);
VAR
ProviderName : STRING;
DataSourceName: STRING;
IniFile:TIniFile;
PathIni,IniFilename:String;
begin
ProviderName := 'Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin';

//Jet OLEDB:Engine Type=4 =Access 97;
//Jet OLEDB:Engine Type=5 =Access 2000;

DataSourceName :=IncludeTrailingBackslash(ExtractFilePath(Paramstr(0)))+Datos+
';Mode=Share Deny None;Extended Properties="";Locale ' +
'Identifier=1033;Jet OLEDB:System database="";Jet OLEDB:Registry ' +
'Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;J' +
'et OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk O' +
'ps=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database' +
' Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:En' +
'crypt Database=False;Jet OLEDB:Don'#39't Copy Locale on Compact=Fals' +
'e;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';

CreateUDLFile(FicheroUDL, ProviderName, DataSourceName);

>>>>>>>>>>>>>sigue, porque no me cogia en un mensaje todo el texto>>>>>>>>>>>>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar la base de datos al cambiar la ruta

Publicado por BigLuis (713 intervenciones) el 20/08/2004 17:30:53
//Si no utilizas ficheros INI olvida todo lo que hace referencia a el

//Decimos a la aplicacion que el fichero UDL ha sido creado nuevo y
//por lo tanto el acceso a datos esta garantizado para que no vuelva
// a preguntarlo al crear el modulo de datos.

PathIni:=IncludeTrailingBackslash(ExtractFilePath(Paramstr(0)));
Inifilename:=PathIni+INI;
try
IniFile:=TInifile.Create(Inifilename);
IniFile.WriteBool('UDL','Creada',True);
finally
Inifile.Free;
end;
end;
Si no lo entiendes dimelo y Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar la base de datos al cambiar la ruta

Publicado por Ivan (10 intervenciones) el 21/08/2004 22:06:47
Muy buena la ayuda, en este momento la estoy implementando. Gracias por la molestia BigLuis, ojala haya mas gente como vos en este mundo, mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar