I found some code a guy had written to traverse the dao collections of a database. His
code does something to LICENCE the instance of the DAO Engine by the looks.....
Below is a working copy of the small app incase someone else finds they have this
problem.
Chris
unit AddFieldForm;
interface
uses
CallCentralConstants, CallCentralUtils, Registry,
{$IFDEF CALLCENTRAL_DEBUG}
AdrockDelphiDebug,
{$ENDIF}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ActiveX,ComObj,
DAO_TLB, StdCtrls, ComCtrls, ImgList;
type
TForm1 = class(TForm)
CreateNewFields: TButton;
procedure CreateNewFieldsClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
Engine : DBEngine;
DB : Database;
public
{ Public declarations }
Function ReturnDatabasePath(DatabaseName : String) : String;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
Function TForm1.ReturnDatabasePath(DatabaseName : String) : String;
Var
fregistry : TRegistry;
begin
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('Start Of ReturnDataBase Path');
{$endif}
fregistry := TRegistry.Create;
try
fregistry.RootKey := HKEY_LOCAL_MACHINE;
fRegistry.OpenKey('Software\Titan\Access\Aliases\'+DatabaseName, FALSE);
Result := fRegistry.ReadString('PhysicalName');
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('DataBase Path = '+Result);
{$endif}
finally
fregistry.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
const
DAOLIC = 'mbmabptebkjcdlgtjmskjwtsdhjbmkmwtrak';
var
pUnk: IUnknown;
pClass2: IClassFactory2;
licString2: Widestring;
begin
pClass2 := nil;
CoInitialize(NIL);
OleCheck (CoGetClassObject (CLASS_DBEngine,
CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, nil, IClassFactory2,
pClass2));
if Assigned(pClass2) then begin
Licstring2 := DAOLIC;
OleCheck(pClass2.CreateInstanceLic (nil, nil, DBEngine, LicString2, Engine));
end;
end;
procedure TForm1.CreateNewFieldsClick(Sender: TObject);
Const
dbBoolean = 1; // Yes/No
Var
FieldDef,
TableDef : Variant;
TableName : String;
size : Integer;
begin
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('Before OpenDatabase');
{$endif}
DB := Engine.OpenDatabase(ReturnDatabasePath(CallCentralDatabaseName), 0, False,
';PWD='+ReturnDatabasePassword); //Database Open
if (DB <> NIL) then
begin
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('After OpenDatabase - DB <> NIL');
{$endif}
TableName := 'Adrock_Report';
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('tableName = '+TableName);
{$endif}
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('Before TableDef := DB.TableDefs[tableName];');
{$endif}
TableDef := DB.TableDefs[tableName];
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('After TableDef := DB.TableDefs[tableName];');
{$endif}
size := 0;
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('before FieldDef := TableDef.CreateField(''IncludeIncomingCalls'',
dbBoolean, size);');
{$endif}
FieldDef := TableDef.CreateField('IncludeIncomingCalls', dbBoolean,
size);
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('after FieldDef := TableDef.CreateField(''IncludeIncomingCalls'',
dbBoolean, size);');
{$endif}
try
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('Before TableDef.Fields.Append( FieldDef );');
{$endif}
TableDef.Fields.Append( FieldDef );
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('After TableDef.Fields.Append( FieldDef );');
{$endif}
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('Before HALT(1)');
{$endif}
DB.Close;
Halt(1);
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('After HALT(1)');
{$endif}
except
// Do Nothing
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('Exception Raised- Before HALT(0)');
{$endif}
DB.Close;
Halt(0);
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('Exception Raised- After HALT(0)');
{$endif}
end;
end
else
begin
{$ifdef CALLCENTRAL_DEBUG}
SendDebug('After OpenDatabase - DB = NIL');
{$endif}
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CounInitialize;
end;
end.
Christopher Crowe (Software Developer)
Microsoft MVP, MCP
Adrock Software
Byte Computer & Software LTD
P.O Box 13-155
Christchurch
New Zealand
Phone/Fax (NZ) 03-3651-112
---------------------------------------------------------------------------
New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
Website: http://www.delphi.org.nz