Fórum Distribuição DBExpress Interbase #264704
09/01/2005
0
O que tá faltando para a distribuição de um aplicativo desenvolvido em Delphi 7 (DBExpress) + Interbase 7.1 funcionar em um ambiente C/S ?!
SERVIDOR
- Instalei a versão SERVER do Interbase 7.1;
CLIENTE
- Copiei o arquivo gds32.dll para a pasta system (Windows98)
- Arquivos midas.dll e dbexpint.dll também na pasta system
Está dando o seguinte erro ao executar o aplicativo:
´Unable to complete network request to host 192.168.0.60´. Failed to establish a connection. unknown Win32 error 10060´
Detalhes: Não estou utilizando conexão nomeada no SQLConnection.
[]´s
Michaell
Curtir tópico
+ 0Posts
09/01/2005
Vinicius2k
Seu instalador precisa editar o arquivos SERVICES do windows acrescentando a linha :
gds_db 3050/tcp # InterBase Server
Este procedimento deve eliminar o erro.
O local do arquivo SERVICES varia conforme a versão do S.O:
Win 9X / ME em ¬SystemRoot¬\
Win NT / 2K / XP / 2003 em ¬SystemRoot¬\system32\drivers\etc
É aconselhável registrar a midas.dll como ´DLL de sistema´ no Windows... isto pode evitar alguns erros comuns, como o conhecido ´Unable to load midas.dll´. Para isso, seu instalador deve executar : [b:49e08e6e01]regsvr32 midas.dll[/b:49e08e6e01]
Espero ter ajudado...
T+
Gostei + 0
10/01/2005
Michaell
Se não for incômodo, você teria algum script do INNO SETUP como exemplo que efetua a instalação de um aplicativo Delphi + IB Client para me enviar (Com a edição desse arquivo Services e a execução do utilitário regsvr32)? E-mail: rnet@hotmail.com
Antecipadamente,
Obrigado!
gds_db 3050/tcp # InterBase Server
Gostei + 0
10/01/2005
Bruno_fantin
Gostei + 0
11/01/2005
Vinicius2k
Eu não tenho nenhum script pronto para instalação de server e/ou client do IB junto com a aplicação...
Eu não conheço o suficiente do Inno Setup para afirmar, com certeza, de que ele não será capaz de fazer a edição do arquivos SERVICES, mas creio que ele não possa fazê-lo...
O que eu uso para efetuar a instalação automatizada, é embutir o instalador inteiro do Firebird (não uso IB) no setup da aplicação e utilizo a seção [b:5fdb4cd7fd][Run][/b:5fdb4cd7fd] do script para rodar o setup do Firebird em modo silencioso. De acordo com o tipo de instalação da aplicação escolhida pelo usuário, o setup do Firebird será executado com parametros diferentes, também utilizo a mesma seção para registrar a midas.dll, por exemplo :
[Run] // --> Se o foi selecionada a instalação "Cliente" Filename: Firebird-1.5.2.4731-Win32.exe; Parameters: "/SP- /VERYSILENT /DIR=""C:\Firebird"" /GROUP=""Firebird 1.5.2"" /COMPONENTS=""ClientComponent"" /COPYFBCLIENT"; Flags: waituntilidle runminimized; Components: ComponenteCliente // --> Se o foi selecionada a instalação "Servidor" : Filename: Firebird-1.5.2.4731-Win32.exe; Parameters: "/SP- /VERYSILENT /DIR=""C:\Firebird"" /GROUP=""Firebird 1.5.2"" /COMPONENTS=""SuperServerComponent, ServerComponent, DevAdminComponent, ClientComponent"" /COPYFBCLIENT"; Flags: waituntilidle runminimized; Components: ComponenteServidor // --> E em qualquer uma das duas, o registro da midas : Filename: regsvr32.exe; Parameters: midas.dll /s; Flags: waituntilidle runminimized
Com isso eu não preciso me preocupar com quais arquivos distribuir e onde e o que editar.... o que for necessário será sempre feito.
Mas isto só é possível porque o setup do Firebird permite a instalação silenciosa com parametros. Creio que o IB também permita, mas vc precisará pesquisar sua documentação para checar quais opções ele possui.
Eu disponho ainda de um código fonte de uma aplicação console que faz a edição do arquivo SERVICES. Nunca testei, mas seria uma outra opção : utilizar a seção [Run] para executar esta aplicação após a instalação da sua aplicação :
program Set3050;
uses Windows, SysUtils, Classes, ShlObj;
type
DirectoryType = (_WINDOWS, _SYSTEM{, _TEMP, _CURRENT});
function GetDirectory(Dir: DirectoryType): string;
var Path: array [0..MAX_PATH] of Char;
begin
case Dir of
_WINDOWS: GetWindowsDirectory(Path, Sizeof(Path));
_SYSTEM : GetSystemDirectory(Path, Sizeof(Path));
// _TEMP : GetTempPath(Sizeof(Path), Path);
// _CURRENT: GetCurrentDirectory(Sizeof(Path), Path);
end;
Result := StrPas(Path)+´\´;
end;
function ExtractWord(N: Integer; const S: string; const WordDelims: TSysCharSet): string;
var C, I, X: Integer;
begin
C := 0;
I := 1;
X := 0;
while (I <= Length(S)) and (C <> N) do begin
while (I <= Length(S)) and (S[I] in WordDelims) do Inc(I);
if I <= Length(S) then Inc(C);
if C <> N then
while (I <= Length(S)) and not (S[I] in WordDelims) do Inc(I)
else X := I;
end;
I := X;
C := 0;
if I <> 0 then
while (I <= Length(S)) and not(S[I] in WordDelims) do begin
Inc(C);
SetLength(Result, C);
Result[C] := S[I];
Inc(I);
end;
SetLength(Result, C);
end;
const ServFile = ´Services´;
NtServFile = ´Drivers\Etc\´+ServFile;
gds_db = ´gds_db´;
ServRow = gds_db+´ 3050/tcp´;
var FilePth: String;
Lst: TStrings;
i: Integer;
begin
FilePth := GetDirectory(_SYSTEM)+NtServFile;
if not FileExists(FilePth) then begin
FilePth := GetDirectory(_WINDOWS)+ServFile;
if not FileExists(FilePth) then begin
// throw Exeption - TCP/IP not installed! You must install TCP/IP support as first.
Exit;
end;
end;
Lst := TStringList.Create;
try
Lst.LoadFromFile(FilePth);
for i:=Lst.Count-1 downto 0 do
if LowerCase(ExtractWord(1,Lst.Strings[i],[´ ´,9]))=gds_db then Exit;
Lst.Add(ServRow);
Lst.SaveToFile(FilePth);
finally
Lst.Free;
end;
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH, PChar(FilePth), nil);
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH or SHCNF_FLUSH, PChar(ExtractFilePath(FilePth)), nil);
end.Espero ter ajudado...
T+
Gostei + 0
11/01/2005
Michaell
[]´s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)