Re: [firebase-br] Pegar Versão do Firebird via SQL

Euler Jr. euler em siginformatica.com.br
Seg Maio 23 08:51:27 -03 2005


Caro Adilson,
codifiquei este exemplo onde vc pode obter a versao do FB. Alem da versao
outras informacoes podem ser extraidas.
Abaixo segue o codigo, faça as devidas adaptacoes para suas necessidades.


{***************************************************************************
***********
   GetFBVersion()

   Parametros:
   PathFileName - localizacao da biblioteca fbclient

   Author: Euler Jr
   Date: may,2005
   Language: Delphi

   Este exemplo demonstra como eh simples extrair informacoes contidas em
   arquivos binarios e compilados, atraves de chamadas a API do Win32.

   Informe no parametros PathFileName o "caminho" do arquivo fbclient.dll.

   Varias informacoes podem ser estraidas como por exemplo:
   - CompanyName, ProductInformation,Comments, Build in, etc.

   Enjoy !!
****************************************************************************
**********}

unit Unit1;

interface

uses
  Windows, Classes, Forms, StdCtrls, Controls;

type
   TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;


   TWideChar = array[0..254] of Char;

   TString = packed record
      wLength:Cardinal;
      wValueLength:Cardinal;
      wType:Cardinal;
      szKey:TWideChar;
      Padding:Cardinal;
      Value:TWideChar;
   end;

   TStringTable = packed record
      wLength:Cardinal;
      wValueLength:Cardinal;
      wType:Cardinal;
      szKey:TWideChar;
      Children:TString;
   end;

   TStringFileInfo = packed record
      wLength:Cardinal;
      wValueLength:Cardinal;
      wType:Cardinal;
      szKey:TWideChar;
      Padding:Cardinal;
      Children:TStringTable;
   end;


   _VS_FIXEDFILEINFO = packed record
      dwSignature:Cardinal;
      dwStrucVersion:Cardinal;
      dwFileVersionMS:Cardinal;
      dwFileVersionLS:Cardinal;
      dwProductVersionMS:Cardinal;
      dwProductVersionLS:Cardinal;
      dwFileFlagsMask:Cardinal;
      dwFileFlags:Cardinal;
      dwFileOS:Cardinal;
      dwFileType:Cardinal;
      dwFileSubtype:Cardinal;
      dwFileDateMS:Cardinal;
      dwFileDateLS:Cardinal;
   end;


   _VS_VERSION_INFO = packed record
      wLength:Cardinal;
      wValueLength:Cardinal;
      wType:Cardinal;
      szKey:TWideChar;
      Padding1:Cardinal;
      Value:_VS_FIXEDFILEINFO;
      Padding2:Cardinal;
      Children:TStringFileInfo;
   end;


   PVsVersionInfo = ^_VS_VERSION_INFO;
   PFixedFileInfo = ^_VS_FIXEDFILEINFO;




var
  Form1: TForm1;

// pega a versao do FB e + informacoes
function GetFBVersion(PathFileName:AnsiString):AnsiString;


implementation

{$R *.dfm}

function WideCharToString( AValue:TWideChar ):AnsiString;
var
   j:Cardinal;
begin
   Result := '';
   for j := 0 to Length( AValue ) do begin
      if( ( Ord( AValue[ j ] ) > 31 ) and ( Ord( AValue[ j ] ) < 121 ) )
then
         Result := ( Result + AValue[ j ] );
   end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
   Caption := GetFBVersion( 'c:\windows\system\fbclient.dll' );
end;



function GetFBVersion(PathFileName:AnsiString):AnsiString;
var
   lpData: PVsVersionInfo;
   lpBuffer: PFixedFileInfo;
   puLen, dwLen, dwHandle: Cardinal;
   StringFileInfo: TStringFileInfo;
   SString:TString;
   StringTable:TStringTable;
   j: Integer;
begin
   Result := '';
   dwLen := GetFileVersionInfoSize( PChar( PathFileName ), dwHandle );
   GetMem( lpData, 4096 );

   if ( GetFileVersionInfo( PChar( PathFileName ), 0, dwLen, lpData ) ) then
begin

      if ( VerQueryValue( @lpData, '\', Pointer( lpBuffer ), puLen ) ) then
begin

         Result := WideCharToString(
lpData^.Children.Children.Children.Value );
         j := Pos( ':', Result );
         Result := Copy( Result, Length( 'ProductVersion' ) + 1, j -
Length( 'ProductVersion' ) - 1 );

      end;

   end;

   FreeMem( lpData );
end;

end.



Ate +

Euler Jr.
----- Original Message -----
From: "Adilson B. Cápua Jr." <juniorcapua em yahoo.com.br>
To: "Firebase" <Lista em firebase.com.br>
Sent: Thursday, May 19, 2005 10:13 PM
Subject: [firebase-br] Pegar Versão do Firebird via SQL


PessoALL,

Estou implementando uma espécie de LOG do meu programa e agora
estou precisando pegar a versão do Firebird que está sendo executada
no servidor!!! Tem como??? Estou usando DBX + Delphi 7!!!!

Forte Abraço,


+---------------------------------------+
  Adilson Bragança Cápua Jr.
  Linhares - ES             Brasil

  mailto    : juniorcapua em yahoo.com.br
              juniorcapua em gmail.com
  Mobile    : abcjr em oi.com.br
  Messenger : juniorcapua em hotmail.com
  Blogger   : www.dellas.rg3.net
+---------------------------------------+
  Save a tree! Send an e-mail!




______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista