#include <vcl.h>
#pragma hdrstop
#include "FrmAccessHeard.h"
#include <Registry.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
const
Byte titlestr[16] =
{0x00,0x01,0x00,0x00,0x53,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x20,0x4A,0x65,0x74} ;//对应MDB文件的前16个字节
Byte titlestr2[16] =
{0x48,0x4A,0x00,0x58,0x55,0x43,0x48,0x41,0x4E,0x47,0x59,0x4F,0x55,0x00,0x20,0x20} ;//更改后的MDB文件的前16个字节
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ADOConnection1->Connected=false;
AnsiString DBName,TempName;
char CDBName[100];
char CTempName[100];
DBName=ExtractFilePath(Application->ExeName)+"Message.db";
TempName=ExtractFilePath(Application->ExeName)+"Temp.db";
strcpy(CDBName,DBName.c_str());
strcpy(CTempName,TempName.c_str());
CopyFile(CDBName,CTempName,false);
uncrypMDB(CTempName);
CopyFile(CTempName,CDBName,false);
ADOConnection1->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='"+DBName+"';Persist Security Info=False;Jet OLEDB:Database Password=123456";
ADOConnection1->Connected=true;
CopyFile(CDBName,CTempName,false);
EncrypMDB(CTempName);
CopyFile(CTempName,CDBName,false);
DeleteFile(CTempName);
TRegistry *reg = new TRegistry();
try
{
reg->RootKey =HKEY_CLASSES_ROOT;
reg->OpenKey(".ldb",true);
reg->WriteString("","tempdb");
}
__finally
{
reg->CloseKey();
reg->Free();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EncrypMDB(String filename)
{
TFileStream *F;
if (!FileExists(filename))
return;
F = new TFileStream(filename,fmOpenWrite);
try
{
F->Seek(0x00,soFromBeginning);
F->Write(titlestr2,16);
}
__finally
{
F->Free();
}
}
void __fastcall TForm1::uncrypMDB(String filename) //还原MDB前16个字节
{
TFileStream *F;
if (!FileExists(filename))
return;
F = new TFileStream(filename,fmOpenWrite);
try
{
F->Seek(0x00,soFromBeginning);
F->Write(titlestr,16);
}
__finally
{
F->Free();
}
}