Access的mdb文件(50分)

  • 主题发起人 主题发起人 saving88
  • 开始时间 开始时间
S

saving88

Unregistered / Unconfirmed
GUEST, unregistred user!
我用自动化在程序中自动创建一个aceess2000的数据库文件,但不知怎样给这个数据库加上密码,在visual basic中也没有找到相关的帮助,求大家帮助.
 
用ACCESS加密码还是用程序加密码,用程序加密码是要求用程序浏览数据时要输入密码才
能见到的吗?
 
我也碰到过,是DELPHI的程序。
ACCESS和VB不能同时打开。
你把ACCESS关了,就可以用VB的程序打开数据库并且不用密码!
 
是这样的,我用delphi的createOleObject连接access,可以自动创建数据库,并可创建表,还可
向表中插入记录,就是不知道怎样加密码(效果就是在Access2000中的安全菜单里设置密码)。
不知道听明白了没有?或者这样说吧,怎样用VBA命令加密码,知道VBA命令我就会了。
 
在“Visual Basic 编辑器”中创建的 Visual Basic Applications (VBA)
密码的保护!你可以在ACCESS的帮助文档中找一下。
delphi中建议用ADO的Connectstrin给ACCESS数据库加密码!
 
saving88, 您好,可不可以发一你的关于建ACCESS的库和表的代码给我本人将非常感激!
我的E_mail:chl@jxbys.gov.cn
 
我发给你,请接受

通过OLE方式创建
相信各位都用通过OLE方式访问Word、Excel文件的经历,具体我不说太多,直接把具体代码写出来就完了
在引用部分加入:
uses ComObj;
实现部分:
procedure TFormOffice.BitBtn1Click(Sender: TObject);
var
CreateAccess:OleVariant;
begin
CreateAccess:=CreateOleObject('ADOX.Catalog');
CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/Aceco.mdb');
end;

说明:
1、在C:/下创建Aceco.mdb;
2、是Access2000格式,用Access97打不开;

数据库连接代码:
mystr1='provider=%s;data provider=%s;data source=%s';
myprovider='msdatashape.1';
mydataprovider='microsoft.jet.oledb.4.0';
mydatasource:=apppath+'aceco.mdb';
adoconnection1.Connected:=false;
adoconnection1.ConnectionString:=format(mystr1,[myprovider,mydataprovider,mydatasource]);
adoconnection1.Connected:=true;
建表和索引代码:
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create Table FaqClass ' +
'(' +
'ClassID INT not null,' +
'ClassTitle char(100) not null,' +
'ParentClassID INT not null,' +
'ClassType TINYINT DEFAULT 0' +
')';
adoquryClass.ExecSQL;
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create UNIQUE Index ClassIDIndex ON FaqClass (ClassID)';
adoquryClass.ExecSQL;
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create Index ClassTitleIndex ON FaqClass (ClassTitle)';
adoquryClass.ExecSQL;
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create Index ParentClassIDIndex ON FaqClass (ParentClassID)';
adoquryClass.ExecSQL;
adoquryClass.Close;
adoquryClass.SQL.Text := 'Create Index ClassTypeIndex ON FaqClass (ClassType)';
adoquryClass.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Table FaqMemo' +
'(' +
'MemoID INT not null,' +
'ParentClassID INT not null,' +
'MemoTitle char(100) not null,' +
'MemoText TEXT,' +
'MemoPublic BIT DEFAULT 0,' +
'MemoLastModifyTime DATETIME' +
')';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create UNIQUE Index MemoIDIndex ON FaqMemo (MemoID)';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Index ParentClassIDIndex ON FaqMemo (ParentClassID)';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Index MemoTitleIndex ON FaqMemo (MemoTitle)';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Index MemoPublicIndex ON FaqMemo (MemoPublic)';
adoquryMemo.ExecSQL;
adoquryMemo.Close;
adoquryMemo.SQL.Text := 'Create Index MemoLastModifyTimeIndex ON FaqMemo (MemoLastModifyTime)';
adoquryMemo.ExecSQL;
 
yuuh:您好!
我已经收到了非常感谢您,真的有好多东西要向您学习!
 
这是取密码,你试一下将它反操作
procedure TForm1.Button1Click(Sender: TObject);
const
xorString:array[0..12]of byte=
( $86, $FB, $EC, $37,
$5D, $44, $9C, $FA,
$C6, $5E, $28, $E6,$13 );
xorString2:array[0..20]of byte=
( $D3, $EC, $08, $9C,
$93, $28, $46, $8A,
$01, $7B, $A0, $DF,
$22, $13, $9A, $B1,
$61, $79, $C7, $7C,$5B);
var
passBuf:array[0..14]of byte;
pass:array[0..14]of char;
passBuf2:array[0..40]of byte;
pass2:array[0..20]of char;
B:Byte;
F:TFileStream;
I,j:integer;
begin
if not FileExists(FileNameEdit.Text) then
begin
Showmessage('唉,快被老兄你玩死了,OK,我不玩了!古得掰。');
Application.Terminate;
exit;
end;
F:=TFileStream.Create(FileNameEdit.Text,fmShareDenyNone);
if NOT chk2000.Checked then
try
F.Seek($42,soFromBeginning);
F.Read(passBuf,14);
for I:=0 to 13 do
begin
B := passBuf xor xorString;
pass:=char(B);
end;
pass[sizeof(pass) - 1] := #0;
passEdit.Text:=StrPas(Pass);
finally
F.Free;
end else
try
F.Seek($42,soFromBeginning);
F.Read(passBuf2,40);
I:=0;j:=0;
while I<40 do
begin
B := passBuf2 xor xorString2[j];
pass2[j]:=char(B);
inc(i,2);inc(j);
end;
pass2[sizeof(pass2) - 1] := #0;
passEdit.Text:=StrPas(Pass2);
finally
f.Free;
end;

end;
 
后退
顶部