git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@19 7f62d464-2af8-f54e-996c-e91b33f51cbe
276 lines
8.5 KiB
Plaintext
276 lines
8.5 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) }
|
|
{ }
|
|
{ Copyright (c) 1997 Master-Bank }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit DBCbRest;
|
|
|
|
{$R-}
|
|
|
|
{$I 'jvcl.inc'}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF COMPILER10_UP}
|
|
DBCommonTypes,
|
|
{$ENDIF COMPILER10_UP}
|
|
Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
|
|
ExtCtrls, BDE, JvLabel, JvComponent, JvExControls;
|
|
|
|
type
|
|
TRestructureDialog = class(TForm)
|
|
OkBtn: TButton;
|
|
CancelBtn: TButton;
|
|
MessageGrp: TGroupBox;
|
|
IconImage: TImage;
|
|
YesBtn: TRadioButton;
|
|
NoBtn: TRadioButton;
|
|
ObjTypeLabel: TJvLabel ;
|
|
ObjType: TEdit;
|
|
ObjDescLabel: TJvLabel ;
|
|
ObjDesc: TMemo;
|
|
MsgLabel: TMemo;
|
|
procedure FormCreate(Sender: TObject);
|
|
private
|
|
FCBDesc: RESTCbDesc;
|
|
function SetCBDesc(var RestInfo: RESTCbDesc): Boolean;
|
|
function GetResult: CBRType;
|
|
protected
|
|
procedure CreateParams(var Params: TCreateParams); override;
|
|
public
|
|
end;
|
|
|
|
function RestCallback(var RestInfo: RESTCbDesc): CBRType;
|
|
|
|
var
|
|
ShowRestWarnings: Boolean = True;
|
|
|
|
implementation
|
|
|
|
uses DB, DBTables, Consts, JvDBUtils, JvBdeUtils;
|
|
|
|
{$R *.DFM}
|
|
{$WARNINGS OFF}
|
|
|
|
function RestCallback(var RestInfo: RESTCbDesc): CBRType;
|
|
begin
|
|
Result := cbrCONTINUE;
|
|
with TRestructureDialog.Create(Application) do
|
|
try
|
|
if SetCBDesc(RestInfo) then begin
|
|
if ShowModal = mrOK then Result := GetResult
|
|
else Result := cbrABORT;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
{ TRestructureDialog }
|
|
|
|
function TRestructureDialog.SetCBDesc(var RestInfo: RESTCbDesc): Boolean;
|
|
const
|
|
SRIntType: array[RINTType] of PChar = ('Dependent', 'Master');
|
|
begin
|
|
FCBDesc := RestInfo;
|
|
MsgLabel.Lines.Add(BdeErrorMsg(FCBDesc.iErrCode));
|
|
case FCBDesc.iErrCode of
|
|
DBIERR_OBJMAYBETRUNCATED,
|
|
DBIERR_TABLELEVELCHANGED,
|
|
DBIERR_VALIDATEDATA:
|
|
begin
|
|
Result := True;
|
|
YesBtn.Visible := True;
|
|
NoBtn.Visible := True;
|
|
YesBtn.Checked := True;
|
|
end;
|
|
else
|
|
Result := ShowRestWarnings and
|
|
((FCBDesc.iErrCode = DBIERR_OBJIMPLICITLYMODIFIED) or
|
|
(FCBDesc.iErrCode = DBIERR_OBJIMPLICITLYDROPPED) or
|
|
(FCBDesc.iErrCode = DBIERR_VALFIELDMODIFIED) or
|
|
(FCBDesc.iErrCode = DBIERR_VCHKMAYNOTBEENFORCED));
|
|
YesBtn.Visible := False;
|
|
NoBtn.Visible := False;
|
|
end;
|
|
if Result then begin
|
|
ObjDesc.Lines.Clear;
|
|
case FCBDesc.eRestrObjType of
|
|
restrNEWFLD, restrOLDFLD:
|
|
begin
|
|
ObjType.Text := 'Data Field';
|
|
ObjDesc.Lines.Add(StrPas(FCBDesc.uObjDesc.fldDesc.szName));
|
|
end;
|
|
restrNEWINDEX, restrOLDINDEX:
|
|
begin
|
|
ObjType.Text := 'Index';
|
|
if FCBDesc.uObjDesc.idxDesc.szName[0] <> #0 then
|
|
ObjDesc.Lines.Add(StrPas(FCBDesc.uObjDesc.idxDesc.szName));
|
|
if FCBDesc.uObjDesc.idxDesc.szTagName[0] <> #0 then
|
|
ObjDesc.Lines.Add(StrPas(FCBDesc.uObjDesc.idxDesc.szTagName));
|
|
ObjDesc.Lines.Add(Format('Fields in the key: %d',
|
|
[FCBDesc.uObjDesc.idxDesc.iFldsInKey]));
|
|
end;
|
|
restrNEWVCHK, restrOLDVCHK:
|
|
begin
|
|
ObjType.Text := 'Validity check';
|
|
ObjDesc.Lines.Add(Format('Field number: %d',
|
|
[FCBDesc.uObjDesc.vchkDesc.iFldNum]));
|
|
if FCBDesc.uObjDesc.vchkDesc.bRequired then
|
|
ObjDesc.Lines.Add('Value is required');
|
|
if FCBDesc.uObjDesc.vchkDesc.bHasMinVal then
|
|
ObjDesc.Lines.Add('Has min value');
|
|
if FCBDesc.uObjDesc.vchkDesc.bHasMaxVal then
|
|
ObjDesc.Lines.Add('Has max value');
|
|
if FCBDesc.uObjDesc.vchkDesc.bHasDefVal then
|
|
ObjDesc.Lines.Add('Has default value');
|
|
if FCBDesc.uObjDesc.vchkDesc.szLkupTblName[0] <> #0 then
|
|
ObjDesc.Lines.Add(Format('Lookup Table name: %d',
|
|
[FCBDesc.uObjDesc.vchkDesc.szLkupTblName]));
|
|
end;
|
|
restrNEWRINT, restrOLDRINT:
|
|
begin
|
|
ObjType.Text := 'Referential integrity check';
|
|
if FCBDesc.uObjDesc.rintDesc.szRintName[0] <> #0 then
|
|
ObjDesc.Lines.Add(StrPas(FCBDesc.uObjDesc.rintDesc.szRintName));
|
|
if FCBDesc.uObjDesc.rintDesc.szTblName[0] <> #0 then
|
|
ObjDesc.Lines.Add(Format('%s table: %s',
|
|
[SRIntType[FCBDesc.uObjDesc.rintDesc.eType],
|
|
FCBDesc.uObjDesc.rintDesc.szTblName]));
|
|
end;
|
|
restrNEWSEC, restrOLDSEC:
|
|
begin
|
|
ObjType.Text := 'Auxilary password';
|
|
if FCBDesc.uObjDesc.secDesc.eprvTable = prvREADONLY then
|
|
ObjDesc.Lines.Add('Read Only')
|
|
else if FCBDesc.uObjDesc.secDesc.eprvTable = prvMODIFY then
|
|
ObjDesc.Lines.Add('Modify')
|
|
else if FCBDesc.uObjDesc.secDesc.eprvTable = prvINSERT then
|
|
ObjDesc.Lines.Add('Insert')
|
|
else if FCBDesc.uObjDesc.secDesc.eprvTable = prvINSDEL then
|
|
ObjDesc.Lines.Add('Insert / Delete')
|
|
else if FCBDesc.uObjDesc.secDesc.eprvTable = prvFULL then
|
|
ObjDesc.Lines.Add('Full Writes');
|
|
if FCBDesc.uObjDesc.secDesc.szPassword[0] <> #0 then
|
|
ObjDesc.Lines.Add(Format('Password: %s',
|
|
[FCBDesc.uObjDesc.secDesc.szPassword]));
|
|
end;
|
|
restrNEWTABLE:
|
|
begin
|
|
ObjType.Text := 'New Table';
|
|
end;
|
|
end;
|
|
ObjDescLabel.Enabled := ObjDesc.Lines.Count > 0;
|
|
end;
|
|
end;
|
|
|
|
function TRestructureDialog.GetResult: CBRType;
|
|
begin
|
|
if YesBtn.Visible then begin
|
|
{ DBIERR_OBJMAYBETRUNCATED, DBIERR_TABLELEVELCHANGED, DBIERR_VALIDATEDATA }
|
|
if YesBtn.Checked then Result := cbrYES
|
|
else if NoBtn.Checked then Result := cbrNO
|
|
else Result := cbrUSEDEF;
|
|
end
|
|
else Result := cbrCONTINUE;
|
|
end;
|
|
|
|
procedure TRestructureDialog.CreateParams(var Params: TCreateParams);
|
|
begin
|
|
inherited CreateParams(Params);
|
|
if Application.MainForm <> nil then
|
|
Params.WndParent := Application.MainForm.Handle;
|
|
end;
|
|
|
|
procedure TRestructureDialog.FormCreate(Sender: TObject);
|
|
begin
|
|
Icon.Handle := LoadIcon(0, IDI_EXCLAMATION);
|
|
IconImage.Picture.Icon := Icon;
|
|
end;
|
|
|
|
{ TRestructClass }
|
|
|
|
type
|
|
TRestructClass = class(TObject)
|
|
private
|
|
FCBRest: RESTCbDesc;
|
|
FRestrCallBack: TBDECallback;
|
|
FCBBath: RESTCbDesc;
|
|
FBatchCallBack: TBDECallback;
|
|
function RestrCallBack(CBInfo: Pointer): CBRType;
|
|
procedure RegisterCallbacks(Session: TSession);
|
|
public
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
destructor TRestructClass.Destroy;
|
|
begin
|
|
if Assigned(Session) and (Session.Active) then begin
|
|
FBatchCallBack.Free;
|
|
FRestrCallBack.Free;
|
|
end;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TRestructClass.RegisterCallbacks(Session: TSession);
|
|
begin
|
|
FRestrCallBack := TBDECallback.Create(Self, nil, cbRESTRUCTURE,
|
|
@FCBRest, SizeOf(FCBRest), RestrCallBack, False);
|
|
FBatchCallBack := TBDECallback.Create(Self, nil, cbBATCHRESULT,
|
|
@FCBBath, SizeOf(FCBBath), RestrCallBack, False);
|
|
end;
|
|
|
|
function TRestructClass.RestrCallBack(CBInfo: Pointer): CBRType;
|
|
begin
|
|
try
|
|
Result := RestCallback(RESTCbDesc(CBInfo^));
|
|
except
|
|
Result := cbrUseDef;
|
|
end;
|
|
end;
|
|
|
|
var
|
|
RestructClass: TRestructClass;
|
|
|
|
procedure InitProc(Session: TSession);
|
|
begin
|
|
RestructClass.RegisterCallbacks(Session);
|
|
end;
|
|
|
|
initialization
|
|
RestructClass := TRestructClass.Create;
|
|
RegisterBDEInitProc(InitProc);
|
|
finalization
|
|
RestructClass.Free;
|
|
end. |