FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Sugerencias, informacion...Access + Alias
Hola, antetodo un saludo a todos. Hace tiempo ya estuve en este mismo foro, pero al final por falta de tiempo deje de usarlo . Ahora vuelvo con algunas dudas, espero que me ayudeis...empiezo:
Estoy haciendo una aplicacion con builder c++ 3, pero para el caso es lo mismo que delphi 4. Tengo que conectar a una base de datos access, que para 1 ordenador estara en modo local y para el resto en red. La aplicacion en modo local ya esta hecha... mis problemas son los siguientes: 1º - Para realizar la instalacion de la aplicacion, estoy usando el InnoSetup 4, y funciona estupendamente, pero mi primer problema son los alias. Yo creo un alias desde codigo con Session->AddStandardAlias("nombrealias", "path", "Microsoft Access Driver (*.mdb)"); y la cosa es que se queda almacenado el alias en el BDE, pero al intentar abrir alguna tabla o Database...nada, me dice que Invalid configuration parameter he comparado el alias creado por codigo con uno creado manualmente desde el BDE Administrator, y la unica diferencia es un campo ODBC DSN, pero desde codigo no se como incluir ese campo. Ademas, al crear el alias por codigo, no indico por ningun lado cual es la base de datos en cuestion, solo el path...asi que si alguien me explica un poco o me ayuda....mil gracias 2º - Mi segundo problema es todavia teorico pero bueno, quiero que al instalar me pueda preguntar si lo que quiero instalar va a ser para acceder a la BD en modo local o modo remoto, para asi poder crear supuestamente un alias u otro...como puedo hacer esto? y es posible crear un alias para una BD en red por codigo? 3º - Por ultimo y por ahora, jejeje, estoy usando un Database, tables y querys...con eso en modo local no tengo ningun problema, es decir, puedo acceder a BD locales y remotas, pero esto es suficiente o seria mejor usar algun otro componente para cliente/servidor o alguna cosa asi mas compleja? Gracias a todos y por todo, Antonio |
#2
|
||||
|
||||
Nadie me puede ayudar?
Vamos a ver...para empezar solo busco como crear una conexion (alias) mediante codigo, para conectar a una base de datos access.
Tengo mi aplicacion y mi base de datos, y quiero conectarme a la base de datos pero desde codigo. Supongo que sera con el objeto Session que tiene la aplicacion por defecto. Yo intento hacerlo con AddStandarAlias(...) pero no funciona y supongo que es porque no le indico exctamente donde esta la BD...pero como puedo hacer eso? Gracias... |
#3
|
||||
|
||||
Pos como nadie me responde...pos al final lo hago yo...
Para quien le pueda interesar y tuviera el mismo problema que yo ...he encontrado un programita llamado ISTool, que permite crear scripts para el inno setup y asi crear alias, entradas a registro...de manera automatica introduciendo unos parametros ...una de las opciones es crear ODBC que es lo que yo estaba necesitando, yaque el alias no me servia, asi que ahora ya estoy sin problemas...
Adios, PD.- Si alguien necesita algo mas de informacion que me lo diga... |
#4
|
|||
|
|||
Hola alt126,
yo estoy en un caso parecido al tuyo, solo que me conecto a access por ADO. Podrias indicarme como cambias el alias con la aplicacion istool en funcion de si es local o no? |
#5
|
||||
|
||||
La respuesta es un poco complicada...
Vamos a ver...mas que con el IsTool, lo que yo he hecho fue con el "Inno Setup Form Designer 1.1.2c", que te permite hacer formularios para incluirlos en la instalacion. Asi que lo que hice fue, crear un formulario donde preguntaba si la instalacion era local o remota. Si era local el alias lo instalaba con un path y si era remota con otro.
Asi que la respuesta se puede dividir en varias partes: - primero como hacer para seleccionar entre local o remoto -> yo use ese programa. - segundo como crear el alias -> se hace creando unas entradas al registro desde el inno setup. Como no se si todo esto te aclara algo o no...te dejo aki el codigo...(un poco largo y lioso, te lo advierto!!!). Si te aclara algo, mira concretamente las partes del registro y del codigo, pero ojo, la mayor parte del codigo de la parte codigo la genera el programa ese para crear forms. Aqui tienes: ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=Facturas 1.0 AppVerName=Facturas 1.0 DefaultDirName={pf}\Facturas DisableDirPage=yes DefaultGroupName=Facturas DisableProgramGroupPage=yes [Tasks] ; NOTE: The following entry contains English phrases ("Create a desktop icon" and "Additional icons"). You are free to translate them into another language if required. Name: "desktopicon"; Description: "Crear un acceso en el escritorio"; GroupDescription: " "; Flags: unchecked [Files] Source: "C:\a\Facturacion.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\Manual de usuario.doc"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\ayuda.ico"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\Manual de instalacion.doc"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\vclx35.bpl"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\borlndmm.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\cp3240mt.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\qrpt35.bpl"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\vcl35.bpl"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\vcldb35.bpl"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\a\MiniReg.exe"; DestDir: "{app}"; Flags: deleteafterinstall Source: "C:\a\BdeInst.dll"; DestDir: "{app}"; Flags: deleteafterinstall ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\Manual de Usuario"; Filename: "{app}\Manual de Usuario.doc"; IconFilename: "{app}\ayuda.ico" Name: "{group}\Manual de Instalación"; Filename: "{app}\Manual de Instalacion.doc"; IconFilename: "{app}\ayuda.ico" Name: "{group}\Facturas"; Filename: "{app}\Facturacion.exe"; ; NOTE: The following entry contains an English phrase ("Uninstall"). You are free to translate it into another language if required. Name: "{group}\Desinstalar Facturas"; Filename: "{uninstallexe}" Name: "{userdesktop}\Facturas"; Filename: "{app}\Facturacion.exe"; Tasks: desktopicon [Run] ; NOTE: The following entry contains an English phrase ("Launch"). You are free to translate it into another language if required. Filename: "{app}\MiniReg.exe"; Parameters: """{app}\BdeInst.dll""" Filename: "{app}\Facturacion.exe"; Description: "Ejecutar Facturas"; Flags: nowait postinstall skipifsilent [Registry] Root: HKCU; SubKey: Software\ODBC\ODBC.INI\ODBC Data Sources; ValueType: string; ValueName: BaseDatosFacturas; ValueData: Microsoft Access Driver (*.mdb); Flags: createvalueifdoesntexist uninsdeletevalue Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Driver; ValueType: string; ValueData: C:\WINDOWS\System32\odbcjt32.dll Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: DBQ; ValueType: string; ValueData: "{code:RutaAlias|a}" Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: DriverId; ValueType: dword; ValueData: 25 Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: FIL; ValueType: string; ValueData: MS Access Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: SafeTransactions; ValueType: dword; ValueData: 0 Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: UID; ValueType: string; ValueData: Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas\Engines\Jet; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: ImplicitCommitSync; ValueType: string; ValueData: Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas\Engines\Jet; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: MaxBufferSize; ValueType: dword; ValueData: 2048 Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas\Engines\Jet; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: PageTimeout; ValueType: dword; ValueData: 5 Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas\Engines\Jet; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: Threads; ValueType: dword; ValueData: 3 Root: HKCU; SubKey: Software\ODBC\ODBC.INI\BaseDatosFacturas\Engines\Jet; Flags: createvalueifdoesntexist uninsdeletevalue; ValueName: UserCommitSync; ValueType: string; ValueData: no [code] var RadioButton1: TRadioButton; RadioButton2: TRadioButton; Label1: TLabel; FolderTreeView1: TFolderTreeView; ruta: String; function InitializeSetup(): Boolean; var Acc97Path: String; begin Result := true; //Solo si access existe. if(not RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE')) then begin Result := False; MsgBox('Se requiere que Microsoft Access este instalado' #13#13 'La instalación no puede continuar', mbError, MB_OK); end; if(not RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Excel.EXE')) then begin Result := False; MsgBox('Se requiere que Microsoft Excel este instalado' #13#13 'La instalación no puede continuar', mbError, MB_OK); end; if(RegQueryStringValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Office\8.0','', Acc97Path)) then begin Result := False; MsgBox('Se requiere una version de Microsoft Access 2000 o superior' #13#13 'La instalación no puede continuar', mbError, MB_OK); end; end; procedure LocalOnClick(Sender: TObject); begin ruta:='c:\BaseDatos.mdb'; end; procedure NuevaRutaOnClick(Sender: TObject); begin ruta:=FolderTreeView1.Directory + 'BaseDatos.mdb'; end; procedure RemotoOnClick(Sender: TObject); begin RadioButton1.Visible:=false; RadioButton2.Visible:=false; ScriptDlgPageSetCaption('Instalación en Red'); ScriptDlgPageSetSubCaption1('Seleccione donde esta ubicada la base de datos'); ScriptDlgPageSetSubCaption2(''); { Label1 } Label1 := TLabel.Create(WizardForm.ScriptDlgPanel); with Label1 do begin Parent := WizardForm.ScriptDlgPanel; Left := 10; Top := 10; Width := 182; Height := 13; Caption := 'Seleccione la ruta a la base de datos:'; end; { FolderTreeView1 } FolderTreeView1 := TFolderTreeView.Create(WizardForm.ScriptDlgPanel); with FolderTreeView1 do begin Parent := WizardForm.ScriptDlgPanel; Left := 30; Top := 30; Width := 350; Height := 180; Cursor := crArrow; TabOrder := 0; OnChange := @NuevaRutaOnClick; end; end; function ScriptDlgPages(CurPage: Integer; BackClicked: Boolean): Boolean; var Next, NextOK: Boolean; CurSubPage: Integer; begin { place subpages between 'Welcome'- and 'SelectDir' page } if (not BackClicked and (CurPage = wpWelcome)) or (BackClicked and (CurPage = wpSelectDir)) then begin { find startpage } if not BackClicked then CurSubPage := 0 else CurSubPage := 1; { iterate through all subpages } while (CurSubPage >= 0) and (CurSubPage <= 1) and not Terminated do begin ScriptDlgPageOpen(); ScriptDlgPageClearCustom(); { insert subpage } case CurSubPage of 0: // custompage 1 begin ScriptDlgPageSetCaption('Tipo de Instalación'); ScriptDlgPageSetSubCaption1('Seleccione donde esta ubicada la base de datos'); ScriptDlgPageSetSubCaption2(''); { RadioButton1 } RadioButton1 := TRadioButton.Create(WizardForm.ScriptDlgPanel); with RadioButton1 do begin Parent := WizardForm.ScriptDlgPanel; Left := 32; Top := 56; Width := 369; Height := 17; Caption := 'Instalación Local (La base de datos esta en este ordenador)'; TabOrder := 0; OnClick := @LocalOnClick; end; { RadioButton2 } RadioButton2 := TRadioButton.Create(WizardForm.ScriptDlgPanel); with RadioButton2 do begin Parent := WizardForm.ScriptDlgPanel; Left := 32; Top := 80; Width := 369; Height := 17; Caption := 'Instalación Remota (La base de datos esta en otro ordenador)'; TabOrder := 1; OnClick := @RemotoOnClick; end; Next := ScriptDlgPageProcessCustom(); NextOK := True; end; 1: // custompage n begin end; end; { check sub-page navigation } if Next then begin if NextOK then CurSubPage := CurSubPage + 1; end else CurSubPage := CurSubPage - 1; end; { check main-page navigation } if not BackClicked then Result := Next else Result := not Next; ScriptDlgPageClose(not Result); end { return default } else Result := True; end; { NextButtonClick } function NextButtonClick(CurPage: Integer): Boolean; begin Result := ScriptDlgPages(CurPage, False); end; { BackButtonClick } function BackButtonClick(CurPage: Integer): Boolean; begin Result := ScriptDlgPages(CurPage, True); end; function RutaAlias(S: String): String; begin Result := ruta; end; |
#6
|
|||
|
|||
Muchas gracias, lo probaré ...
Con el "Inno Setup Form Designer 1.1.2c" puedes hacer que cuando seleccionas local o remoto, a parte de cambiar el path del alias, se copien o no algunos archivo de la instalacion? Por ejemplo, si la instalacion es local, copio la base de datos y si es un cliente ya no necesito copiarla... |
|
|
|