Se que dije que pondría primero el módulo de configuración, pero primero tengo que poner el módulo de datos (Data Module) en mi caso el nombre de la Unidad es UDM
Aquí una imagen
Aquí el código
Código Delphi
[-]unit UDM;
interface
uses
SysUtils, Classes, IBDatabase, DB,Forms, IBCustomDataSet, Dialogs;
type
TDM = class(TDataModule)
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
IBDCLIEN: TIBDataSet;
IBDCLIENID: TIntegerField;
IBDCLIENNOMMODULO: TIBStringField;
IBDCLIENCODIGO: TIBStringField;
IBDCLIENNOMBRE: TIBStringField;
IBDCLIENFORMAPAGO: TIBStringField;
IBDCLIENFECHAALTA: TDateField;
IBDCLIENDTO: TIBBCDField;
IBDCLIENNOTAS: TWideMemoField;
IBDCLIENIMG: TBlobField;
IBDCLIENIMPUESTOS: TIBStringField;
IBDCLIENTIPOIMP: TIntegerField;
IBDCLIENCIF: TIBStringField;
IBDCLIENRET: TIBStringField;
IBDCLIENPORRET: TIBBCDField;
IBDCLIENTARIFA: TIBStringField;
IBDCLIENUSARRAPEL: TIBStringField;
IBDCLIENDIASPRESENT: TIBStringField;
IBDCLIENDIASDECOBRO: TIBStringField;
IBDCLIENAVISOS: TWideMemoField;
IBDCLIENLIMITECREDITO: TIBBCDField;
IBDCLIENPENDIENTEPAGO: TIBBCDField;
IBDCLIENSECTOR: TIBStringField;
IBDCLIENCODAGENTE: TIBStringField;
IBDUSUA: TIBDataSet;
IBDUSUAID: TIntegerField;
IBDUSUACLAVE: TIBStringField;
IBDUSUAUSUARIO: TIBStringField;
IBDUSUANIVEL: TIntegerField;
IBDUSUANOMBRE: TIBStringField;
IBDirecciones: TIBDataSet;
IBDireccionesID: TIntegerField;
IBDireccionesMODULO: TIBStringField;
IBDireccionesCODIGO: TIBStringField;
IBDireccionesDIRECCION: TIBStringField;
IBDireccionesCP: TIBStringField;
IBDireccionesPOBLACION: TIBStringField;
IBDireccionesPROVINCIA: TIBStringField;
IBDireccionesTF: TIBStringField;
IBDireccionesNOTA: TWideMemoField;
IBDireccionesPAIS: TIBStringField;
IBDConfi: TIBDataSet;
IBDPC: TIBDataSet;
IBDPCID: TIntegerField;
IBDPCMODULO: TIBStringField;
IBDPCCODIGO: TIBStringField;
IBDPCNOMBRE: TIBStringField;
IBDPCMOVIL: TIBStringField;
IBDPCEMAIL: TIBStringField;
IBDPCCASADO: TIBStringField;
IBDPCHIJOS: TIBStringField;
IBDPCFECHANACIM: TDateField;
IBDPCPUESTO: TIBStringField;
IBDPCEXT: TIBStringField;
IBDPCNOTAS: TWideMemoField;
IBDPCFOTO: TBlobField;
IBDContacto: TIBDataSet;
IBDContactoID: TIntegerField;
IBDContactoMODULO: TIBStringField;
IBDContactoCODIGO: TIBStringField;
IBDContactoNOMBRE: TIBStringField;
IBDContactoTF: TIBStringField;
IBDContactoTF2: TIBStringField;
IBDContactoFAX: TIBStringField;
IBDContactoMAIL: TIBStringField;
IBDContactoMAIL2: TIBStringField;
IBDContactoWEB: TIBStringField;
IBDContactoCLAVEWEB: TIBStringField;
IBDContactoMOVIL: TIBStringField;
IBDContactoMOVIL2: TIBStringField;
IBDContactoNOTAS: TWideMemoField;
IBDBcos: TIBDataSet;
IBDBcosID: TIntegerField;
IBDBcosMODULO: TIBStringField;
IBDBcosCODIGO: TIBStringField;
IBDBcosBANCO: TIBStringField;
IBDBcosENTIDAD: TIntegerField;
IBDBcosOFICINA: TIntegerField;
IBDBcosDC: TIntegerField;
IBDBcosCUENTA: TIntegerField;
IBDBcosTF: TIBStringField;
IBDConfiID: TIntegerField;
IBDConfiXEMPRESA: TIBStringField;
IBDConfiXCALLE: TIBStringField;
IBDConfiXCP: TIBStringField;
IBDConfiXPOBLACION: TIBStringField;
IBDConfiXPROVINCIA: TIBStringField;
IBDConfiXTF: TIBStringField;
IBDConfiXTF2: TIBStringField;
IBDConfiXLOGO: TBlobField;
IBDConfiXWEB: TIBStringField;
IBDConfiXEMAIL: TIBStringField;
IBDConfiXMOVIL: TIBStringField;
IBDConfiXFAX: TIBStringField;
IBDConfiXCIF: TIBStringField;
IBDConfiXREGMERCANTIL: TIBStringField;
IBDConfiXNOTA: TWideMemoField;
IBDConfiXCOLORA: TIBStringField;
IBDConfiXCOLORB: TIBStringField;
IBDConfiXCOLORACT: TIBStringField;
IBDConfiXCOLORNOACT: TIBStringField;
IBDConfiXNUMPRE: TIBStringField;
IBDConfiXNUMPED: TIBStringField;
IBDConfiXNUMALB: TIBStringField;
IBDConfiXNUMFAC: TIBStringField;
IBDConfiXNUMLOTE: TIBStringField;
IBDConfiXNUMCLI: TIBStringField;
IBDConfiXNUMPRO: TIBStringField;
IBDConfiXNUMAGEN: TIBStringField;
IBDConfiXNUMALMACEN: TIBStringField;
IBDConfiXNUMALMACENDEF: TIBStringField;
IBDConfiXLARGOLOTE: TIntegerField;
IBDConfiXLARGONUM: TIntegerField;
IBDConfiXSERIE: TIBStringField;
IBDConfiXSERIE2: TIBStringField;
IBDConfiXSERIE3: TIBStringField;
IBDConfiXUASARSERIEYEAR: TIBStringField;
IBDConfiXLDPD1: TWideMemoField;
IBDConfiXLDPD2: TWideMemoField;
IBDConfiXLDPD3: TWideMemoField;
IBDConfiXNOMMONEDA: TIBStringField;
IBDConfiXNOMIMPUESTO: TIBStringField;
IBDConfiXDESIMP1: TIBStringField;
IBDConfiXIMP1: TIBBCDField;
IBDConfiXDESIMP2: TIBStringField;
IBDConfiXIMP2: TIBBCDField;
IBDConfiXDESIMP3: TIBStringField;
IBDConfiXIMP3: TIBBCDField;
IBDConfiXDESIMP4: TIBStringField;
IBDConfiXIMP4: TIBBCDField;
IBDConfiXDESREQ1: TIBStringField;
IBDConfiXREQ1: TIBBCDField;
IBDConfiXDESREQ2: TIBStringField;
IBDConfiXREQ2: TIBBCDField;
IBDConfiXDESREQ3: TIBStringField;
IBDConfiXREQ3: TIBBCDField;
IBDConfiXDESREQ4: TIBStringField;
IBDConfiXREQ4: TIBBCDField;
IBDConfiXMODCOPIASEG: TIBStringField;
procedure IBDatabase1BeforeConnect(Sender: TObject);
private
public
end;
var
DM: TDM;
implementation
{$R *.dfm}
procedure TDM.IBDatabase1BeforeConnect(Sender: TObject);
var Ruta:string;
begin
Ruta:=ExtractFilePath(Application.ExeName); if FileExists(Ruta+ 'PGF2.FDB') then IBDatabase1.DatabaseName:=ExtractFilePath(Application.ExeName) + 'PGF2.FDB'
else
begin
if FileExists(ruta+'bd\'+'PGF2.FDB') then IBDatabase1.DatabaseName:=ExtractFilePath(Application.ExeName)+'bd\' + 'PGF2.FDB'
else
begin
Showmessage('Lo sentimos pero no encontramos el archivo PGF2.FDB, donde se encuentra el ejecutable, o en la capeta BD de la ubicación del Ejecutable');
end;
end;
end;
end.
Como podemos ver tenemos en el evento IBDatabase1BeforeConnect el buscar la base de datos donde esta el ejecutable o en su defecto dentro de la carpeta bd\ que debe estar donde este el ejecutable, con lo que podemos usar el programa desde un pendrive por ejemplo (teóricamente)