📄 jvbdelists.pas
字号:
{-----------------------------------------------------------------------------
The contents of this file are 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.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvDBLists.PAS, released on 2002-07-04.
The Initial Developers of the Original Code are: Fedor Koshevnikov, Igor Pavluk and Serge Korolev
Copyright (c) 1997, 1998 Fedor Koshevnikov, Igor Pavluk and Serge Korolev
Copyright (c) 2001,2002 SGB Software
All Rights Reserved.
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.sourceforge.net
Known Issues:
-----------------------------------------------------------------------------}
// $Id: JvBDELists.pas,v 1.16 2005/02/17 10:19:59 marquardt Exp $
unit JvBDELists;
{$I jvcl.inc}
interface
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
SysUtils, Classes,
BDE, DB, DBTables;
type
TJvBDEItemType = (bdDatabases, bdDrivers, bdLangDrivers, bdUsers, bdRepositories);
TJvCustomBDEItems = class(TBDEDataSet)
private
FItemType: TJvBDEItemType;
FSessionName: string;
FSessionLink: TDatabase;
function GetDBSession: TSession;
procedure SetSessionName(const Value: string);
procedure SetItemType(Value: TJvBDEItemType);
protected
function GetRecordCount: Integer; override;
procedure OpenCursor (InfoQuery: Boolean); override;
procedure CloseCursor; override;
function CreateHandle: HDBICur; override;
property ItemType: TJvBDEItemType read FItemType write SetItemType
default bdDatabases;
property SessionName: string read FSessionName write SetSessionName;
public
function Locate(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean; override;
property DBSession: TSession read GetDBSession;
end;
TJvBDEItems = class(TJvCustomBDEItems)
published
property ItemType;
property SessionName;
end;
TJvDBListDataSet = class(TDBDataSet)
protected
function GetRecordCount: Integer; override;
public
function Locate(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean; override;
end;
TDBItemType = (dtTables, dtStoredProcs, dtFiles, dtFunctions);
TJvCustomDatabaseItems = class(TJvDBListDataSet)
private
FExtended: Boolean;
FSystemItems: Boolean;
FFileMask: string;
FItemType: TDBItemType;
procedure SetFileMask(const Value: string);
procedure SetExtendedInfo(Value: Boolean);
procedure SetSystemItems(Value: Boolean);
procedure SetItemType(Value: TDBItemType);
protected
function CreateHandle: HDBICur; override;
function GetItemName: string;
property ItemType: TDBItemType read FItemType write SetItemType
default dtTables;
property ExtendedInfo: Boolean read FExtended write SetExtendedInfo
default False;
property FileMask: string read FFileMask write SetFileMask;
property SystemItems: Boolean read FSystemItems write SetSystemItems
default False;
public
property ItemName: string read GetItemName;
end;
TJvDatabaseItems = class(TJvCustomDatabaseItems)
published
property ItemType;
property ExtendedInfo;
property FileMask;
property SystemItems;
end;
TTabItemType = (dtFields, dtIndices, dtValChecks, dtRefInt,
dtSecurity, dtFamily);
TJvCustomTableItems = class(TJvDBListDataSet)
private
FTableName: TFileName;
FItemType: TTabItemType;
FPhysTypes: Boolean;
procedure SetTableName(const Value: TFileName);
procedure SetItemType(Value: TTabItemType);
procedure SetPhysTypes(Value: Boolean);
protected
function CreateHandle: HDBICur; override;
property ItemType: TTabItemType read FItemType write SetItemType default dtFields;
property PhysTypes: Boolean read FPhysTypes write SetPhysTypes default False; { for dtFields only }
property TableName: TFileName read FTableName write SetTableName;
end;
TJvTableItems = class(TJvCustomTableItems)
published
property ItemType;
property PhysTypes;
property TableName;
end;
TJvDatabaseDesc = class(TObject)
private
FDescription: DBDesc;
public
constructor Create(const DatabaseName: string);
property Description: DBDesc read FDescription;
end;
TJvDriverDesc = class(TObject)
private
FDescription: DRVType;
public
constructor Create(const DriverType: string);
property Description: DRVType read FDescription;
end;
{$IFNDEF BCB}
{ Obsolete classes, for backward compatibility only }
type
TJvDatabaseList = class(TJvCustomBDEItems)
published
property SessionName;
end;
TJvLangDrivList = class(TJvCustomBDEItems)
public
constructor Create(AOwner: TComponent); override;
published
property SessionName;
end;
TJvTableList = class(TJvCustomDatabaseItems)
public
function GetTableName: string;
published
property ExtendedInfo;
property FileMask;
property SystemItems;
end;
TJvStoredProcList = class(TJvCustomDatabaseItems)
public
constructor Create(AOwner: TComponent); override;
published
property ExtendedInfo;
property SystemItems;
end;
TJvFieldList = class(TJvCustomTableItems)
published
property TableName;
end;
TJvIndexList = class(TJvCustomTableItems)
public
constructor Create(AOwner: TComponent); override;
published
property TableName;
end;
{$ENDIF !BCB}
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvBDELists.pas,v $';
Revision: '$Revision: 1.16 $';
Date: '$Date: 2005/02/17 10:19:59 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
BDEConst, DBConsts,
JvDBUtils, JvResources;
//=== Utility routines =======================================================
function dsGetRecordCount(DataSet: TBDEDataSet): Longint;
begin
if DataSet.State = dsInactive then
_DBError(SDataSetClosed);
Check(DbiGetRecordCount(DataSet.Handle, Result));
end;
//=== { TJvSessionLink } =====================================================
type
TJvSessionLink = class(TDatabase)
private
FList: TJvCustomBDEItems;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
constructor TJvSessionLink.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if (AOwner <> nil) and (AOwner is TSession) then
SessionName := TSession(AOwner).SessionName;
Temporary := True;
KeepConnection := False;
end;
destructor TJvSessionLink.Destroy;
begin
if FList <> nil then
begin
FList.FSessionLink := nil;
FList.Close;
end;
inherited Destroy;
end;
//=== { TJvCustomBDEItems } ==================================================
procedure TJvCustomBDEItems.SetItemType(Value: TJvBDEItemType);
begin
if ItemType <> Value then
begin
CheckInactive;
FItemType := Value;
end;
end;
function TJvCustomBDEItems.CreateHandle: HDBICur;
begin
case FItemType of
bdDatabases:
Check(DbiOpenDatabaseList(Result));
bdDrivers:
Check(DbiOpenDriverList(Result));
bdLangDrivers:
Check(DbiOpenLdList(Result));
bdUsers:
Check(DbiOpenUserList(Result));
bdRepositories:
Check(DbiOpenRepositoryList(Result));
end;
end;
function TJvCustomBDEItems.GetDBSession: TSession;
begin
Result := Sessions.FindSession(SessionName);
if Result = nil then
Result := DBTables.Session;
end;
procedure TJvCustomBDEItems.SetSessionName(const Value: string);
begin
CheckInactive;
FSessionName := Value;
DataEvent(dePropertyChange, 0);
end;
procedure TJvCustomBDEItems.OpenCursor;
var
S: TSession;
begin
S := Sessions.List[SessionName];
S.Open;
Sessions.CurrentSession := S;
FSessionLink := TJvSessionLink.Create(S);
try
TJvSessionLink(FSessionLink).FList := Self;
inherited OpenCursor(InfoQuery);
except
FreeAndNil(FSessionLink);
raise;
end;
end;
procedure TJvCustomBDEItems.CloseCursor;
begin
inherited CloseCursor;
if FSessionLink <> nil then
begin
TJvSessionLink(FSessionLink).FList := nil;
FreeAndNil(FSessionLink);
end;
end;
function TJvCustomBDEItems.GetRecordCount: Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -