git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@19 7f62d464-2af8-f54e-996c-e91b33f51cbe
279 lines
8.0 KiB
Plaintext
279 lines
8.0 KiB
Plaintext
{******************************************************************
|
|
|
|
JEDI-VCL Demo
|
|
|
|
Copyright (C) 2002 Project JEDI
|
|
|
|
Original author:
|
|
|
|
Contributor(s):
|
|
|
|
You may retrieve the latest version of this file at the JEDI-JVCL
|
|
home page, located at http://jvcl.delphi-jedi.org
|
|
|
|
The contents of this file are used with permission, subject to
|
|
the Mozilla Public License Version 1.1 (the "License"); you may
|
|
not use this file except in compliance with the License. You may
|
|
obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1_1Final.html
|
|
|
|
Software distributed under the License is distributed on an
|
|
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
implied. See the License for the specific language governing
|
|
rights and limitations under the License.
|
|
|
|
******************************************************************}
|
|
|
|
{*******************************************************}
|
|
{ }
|
|
{ Delphi VCL Extensions (RX) demo program }
|
|
{ }
|
|
{ Copyright (c) 1997 Master-Bank }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit BdeInfo;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses Classes, {$IFDEF WIN32} Windows, BDE, Registry, {$ELSE} IniFiles,
|
|
DbiTypes, DbiProcs, DbiErrs, {$ENDIF WIN32} SysUtils, DB, DBTables;
|
|
|
|
{ TBdeInfo }
|
|
|
|
type
|
|
TBdeInfo = class
|
|
private
|
|
FDllList: TStrings;
|
|
FDirectory: string;
|
|
FCfgPath: string;
|
|
FVer: SYSVersion;
|
|
FConfig: SYSConfig;
|
|
FInfo: SYSInfo;
|
|
procedure UpdateInformation(OnCreate: Boolean);
|
|
procedure UpdateDllList;
|
|
procedure UpdateRegInfo;
|
|
function GetDllCount: Integer;
|
|
function GetBdeDll(Index: Integer): string;
|
|
function GetVersionDateTime: TDateTime;
|
|
function GetNetworkType: string;
|
|
function GetNetUserName: string;
|
|
function GetLanguageDriver: string;
|
|
function GetLangDriverDesc: string;
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure Update;
|
|
property DllCount: Integer read GetDllCount;
|
|
property BdeDll[Index: Integer]: string read GetBdeDll;
|
|
property BdeDllList: TStrings read FDllList;
|
|
property VersionDateTime: TDateTime read GetVersionDateTime; { Version Date }
|
|
property BdeDirectory: string read FDirectory;
|
|
property ConfigPath: string read FCfgPath; { CFG File Path }
|
|
property EngineVersion: Word read FVer.iVersion; { Engine Version }
|
|
property InterfaceLevel: Word read FVer.iIntfLevel; { Interface Level }
|
|
property NetworkType: string read GetNetworkType; { Network Type }
|
|
property NetUserName: string read GetNetUserName; { Net User Name }
|
|
property LanguageDriver: string read GetLanguageDriver; { Language Driver }
|
|
property LangDriverDesc: string read GetLangDriverDesc; { LangDriver Description }
|
|
property BufferSpace: Word read FInfo.iBufferSpace; { Buffer size, in K }
|
|
property HeapSpace: Word read FInfo.iHeapSpace; { Heap Space, in K }
|
|
property ActiveDrivers: Word read FInfo.iDrivers; { Active Drivers }
|
|
property ActiveClients: Word read FInfo.iClients; { Active Clients }
|
|
property ActiveSessions: Word read FInfo.iSessions; { Active Sessions }
|
|
property ActiveDatabases: Word read FInfo.iDatabases; { Active Databases }
|
|
property ActiveCursors: Word read FInfo.iCursors; { Active Cursors }
|
|
end;
|
|
|
|
function FieldTypeName(AType: Word): string;
|
|
function FieldSubtypeName(ASubtype: Word): string;
|
|
|
|
implementation
|
|
|
|
uses JvJCLUtils;
|
|
|
|
{ TBdeInfo }
|
|
|
|
constructor TBdeInfo.Create;
|
|
begin
|
|
inherited Create;
|
|
FDllList := TStringList.Create;
|
|
UpdateInformation(True);
|
|
end;
|
|
|
|
destructor TBdeInfo.Destroy;
|
|
begin
|
|
FDllList.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TBdeInfo.Update;
|
|
begin
|
|
UpdateInformation(False);
|
|
end;
|
|
|
|
procedure TBdeInfo.UpdateRegInfo;
|
|
var
|
|
I: Integer;
|
|
{$IFDEF WIN32}
|
|
Reg: TRegistry;
|
|
begin
|
|
Reg := TRegistry.Create;
|
|
with Reg do
|
|
try
|
|
LazyWrite := False;
|
|
RootKey := HKEY_LOCAL_MACHINE;
|
|
OpenKey('SOFTWARE\Borland\Database Engine', False);
|
|
try
|
|
FDirectory := ReadString('DLLPATH');
|
|
FCfgPath := ReadString('CONFIGFILE01');
|
|
finally
|
|
CloseKey;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
{$ELSE}
|
|
Ini: TIniFile;
|
|
const
|
|
sIDAPI = 'IDAPI';
|
|
begin
|
|
Ini := TIniFile.Create('win.ini');
|
|
with Ini do
|
|
try
|
|
FDirectory := ReadString(sIDAPI, 'DLLPATH', '');
|
|
FCfgPath := ReadString(sIDAPI, 'CONFIGFILE01', '');
|
|
finally
|
|
Free;
|
|
end;
|
|
{$ENDIF WIN32}
|
|
I := Pos(';', FDirectory);
|
|
if I > 0 then FDirectory := Copy(FDirectory, 1, I - 1);
|
|
I := Pos(';', FCfgPath);
|
|
if I > 0 then FCfgPath := Copy(FCfgPath, 1, I - 1);
|
|
UpdateDllList;
|
|
end;
|
|
|
|
procedure TBdeInfo.UpdateDllList;
|
|
var
|
|
Rec: TSearchRec;
|
|
Status: Integer;
|
|
begin
|
|
FDLLList.BeginUpdate;
|
|
try
|
|
FDLLList.Clear;
|
|
Status := FindFirst(FDirectory + '\*.dll', faAnyFile, Rec);
|
|
try
|
|
while Status = 0 do begin
|
|
FDLLList.Add(AnsiUpperFirstChar(Rec.Name));
|
|
Status := FindNext(Rec);
|
|
end;
|
|
finally
|
|
FindClose(Rec);
|
|
end;
|
|
finally
|
|
FDLLList.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
function TBdeInfo.GetDllCount: Integer;
|
|
begin
|
|
Result := FDllList.Count;
|
|
end;
|
|
|
|
function TBdeInfo.GetBdeDll(Index: Integer): string;
|
|
begin
|
|
Result := FDllList[Index];
|
|
end;
|
|
|
|
procedure TBdeInfo.UpdateInformation(OnCreate: Boolean);
|
|
begin
|
|
if OnCreate then begin
|
|
UpdateRegInfo;
|
|
Check(DbiGetSysVersion(FVer));
|
|
end;
|
|
Check(DbiGetSysConfig(FConfig));
|
|
Check(DbiGetSysInfo(FInfo));
|
|
end;
|
|
|
|
function TBdeInfo.GetVersionDateTime: TDateTime;
|
|
var
|
|
Hour, Min, MSec, M, D: Word;
|
|
Y: SmallInt;
|
|
begin
|
|
Check(DbiDateDecode(FVer.dateVer, M, D, Y));
|
|
Check(DbiTimeDecode(FVer.timeVer, Hour, Min, MSec));
|
|
Result := EncodeDate(Y, M, D) + EncodeTime(Hour, Min, 0, 0);
|
|
end;
|
|
|
|
function TBdeInfo.GetNetworkType: string;
|
|
begin
|
|
Result := StrPas(FConfig.szNetType);
|
|
end;
|
|
|
|
function TBdeInfo.GetNetUserName: string;
|
|
begin
|
|
Result := StrPas(FConfig.szUserName);
|
|
end;
|
|
|
|
function TBdeInfo.GetLanguageDriver: string;
|
|
begin
|
|
Result := StrPas(FConfig.szLangDriver);
|
|
end;
|
|
|
|
function TBdeInfo.GetLangDriverDesc: string;
|
|
var
|
|
Cursor: HDBICur;
|
|
Info: LDDesc;
|
|
begin
|
|
Result := '';
|
|
Check(DbiOpenLdList(Cursor));
|
|
try
|
|
while DbiGetNextRecord(Cursor, dbiNOLOCK, @Info, nil) = DBIERR_NONE do
|
|
if StrIComp(Info.szName, FConfig.szLangDriver) = 0 then begin
|
|
Result := Format('%s (%d)', [Info.szDesc, Info.iCodePage]);
|
|
Break;
|
|
end;
|
|
finally
|
|
DbiCloseCursor(Cursor);
|
|
end;
|
|
end;
|
|
|
|
function FieldTypeName(AType: Word): string;
|
|
const
|
|
{$IFDEF COMPILER3_UP}
|
|
MaxTypes = fldCURSOR;
|
|
{$ELSE}
|
|
MaxTypes = fldLOCKINFO;
|
|
{$ENDIF}
|
|
Types: array [fldUNKNOWN..MaxTypes] of PChar =
|
|
('Unknown', 'String', 'Date', 'Blob', 'Boolean', 'Int16', 'Int32',
|
|
'Float64', 'Decimal', 'Bytes', 'Time', 'DateTime', 'UInt16', 'UInt32',
|
|
'Float80', 'VarBytes', 'LockInfo'
|
|
{$IFDEF COMPILER3_UP}, 'Oracle Cursor' {$ENDIF});
|
|
begin
|
|
if AType < Low(Types) then AType := Low(Types)
|
|
else if AType > High(Types) then AType := Low(Types);
|
|
Result := StrPas(Types[AType]);
|
|
end;
|
|
|
|
function FieldSubtypeName(ASubtype: Word): string;
|
|
const
|
|
MinSubType = fldstMONEY - 1;
|
|
MaxSubtype = fldstAUTOINC;
|
|
Subtypes: array [MinSubType..MaxSubtype] of PChar =
|
|
('Password', 'Money', 'Memo', 'Binary', 'Formatted Memo', 'OLE',
|
|
'Graphic', 'dBase OLE', 'User Typed', 'Auto Increment');
|
|
begin
|
|
Result := '';
|
|
if ASubtype = fldstPASSWORD then ASubtype := Low(Subtypes)
|
|
else begin
|
|
if ASubtype < Low(Subtypes) + 1 then ASubtype := 0
|
|
else if ASubtype > High(Subtypes) then ASubtype := 0;
|
|
end;
|
|
if ASubtype > 0 then Result := StrPas(Subtypes[ASubtype]);
|
|
end;
|
|
|
|
end. |