GARANTIR DESCONTO

Fórum Distribuição DBExpress Interbase #264704

09/01/2005

0

Pessoal,

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

Michaell

Responder

Posts

09/01/2005

Vinicius2k

Colega,

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+


Responder

Gostei + 0

10/01/2005

Michaell

Colega Vinicius,

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!

Colega, 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:92fd0f1215]regsvr32 midas.dll[/b:92fd0f1215] Espero ter ajudado... T+



Responder

Gostei + 0

10/01/2005

Bruno_fantin

Só uma dica... Complia a midas juntos com o cliente... Usando a unit MidasLib...


Responder

Gostei + 0

11/01/2005

Vinicius2k

Olá Michaell,

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+


Responder

Gostei + 0

11/01/2005

Michaell

Obrigado pelas dicas! Vou tentar desenvolver algo semelhante...

[]´s


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar