| history | TOP |
2004/05/07:作成
2004/05/08:最適化シリーズ整理。
| overview | TOP |
タイトルのとおりDelphiでmdbを操作しようというページです。まったくもってイマサラ感がぬぐえませんが、いつもGoogleで探し回っているのでいつか役に立つだろうと。
あ、先に書いときますが、基本的にパクリます。サンプルなんて腐るほどWEB上に転がってますんで。ただし、このページでは参考にすると呼称します(プ)。
それから、基本的なプロジェクトの構成はこんな感じで。
| ファイル名 | 役割 |
| OpeMdb.dpr | プロジェクトファイル |
| Main.*** | フォームファイル/フォームユニット |
| mdb.pas | mdb操作関係の処理を集めたユニット |
文中の、try..finally/try..except にはそれほどの自信はありません。とりあえず捕まえてるだけです。
このページでは、Delphiを使用して、mdbファイルを作成したりパスワードをかけたりパスワードを変更したりします。Windows2000でしか試していません。参考にしたサイトで見たままに、なんのポリシーもなくOleObjectをCreateしています。いつか痛い目を見そうです。
| データベースを作る | TOP |
とりあえず、mdbを作るところから始めます。操作しようというのにAccessで作るってのはアレなので。で、参考URL。もろです。
重要そうなところを強調したので逆に見にくくなってますが。
uses
Windows, SysUtils, ComObj, ActiveX, Variants;
// ---------------------------------------------------------------------------
// データベース作成
function CreateDatabase(const Path: string; var Err: string): Boolean;
const
CONN_STR = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="%s"';
var
Catalog: OleVariant;
ConnStr: string;
begin
Result := false;
ConnStr := Format(CONN_STR, [Path]);
try
try
Catalog := CreateOleObject('ADOX.Catalog');
Catalog.Create(ConnStr);
finally
Catalog := Unassigned;
end;
Result := true;
except
on E:Exception do Err := E.Message;
end;
end;
| データベースを作るサンプル | TOP |
uses
mdb;
procedure TForm1.Button1Click(Sender: TObject);
var
ret: Boolean;
Err: string;
begin
ret := CreateDatabase(ExtractFilePath(ParamStr(0)) + Edit1.Text, Err);
if ret then ShowMessage('成功') else ShowMessage(Err);
end;
| データベースにパスワードを設定する・パスワードを変更する・最適化する | TOP |
次に、データベースにパスワードを設定します。ただし、「パスワードが設定されていないデータベース」が対象です。つまり、このコードを試したデータベースは、このコードでは2度とパスワードを変更できません。あと、これ以降、uses 節は省略します。
(2004/05/08)これ以降、同じようなコードが続くことに気づいたので共通化しました。で、大幅に行数が削減されました。
// ---------------------------------------------------------------------------
// パスワードを設定・変更
function ChangePassword(const Path, OldPath, NewPass: string; var Err: string): Boolean;
const
CONN_STR = 'Data Source="%s";Jet OLEDB:Database Password=%s';
var
Engine: OleVariant;
Temp: string;
S1, S2: string;
begin
Result := false;
// 圧縮先を指定
Temp := ChangeFileExt(Path, '.bak');
// あれば消す(消してよいなら)
DeleteFile(Temp);
// 接続文字列風作成
S1 := Format(CONN_STR, [Path, OldPath]);
S2 := Format(CONN_STR, [Temp, NewPass]);
try
try
// やる
Engine := CreateOleObject('JRO.JetEngine');
Engine.CompactDatabase(S1, S2);
// 置き換える
DeleteFile(Path);
RenameFile(Temp, Path);
finally
Engine := Unassigned;
end;
Result := true;
except
on E:Exception do Err := E.Message;
end;
end;
// ---------------------------------------------------------------------------
// 最適化
function CompactDatabase(const Path, Pass: string; var Err: string): Boolean;
begin
Result := ChangePassword(Path, Pass, Pass, Err);
end;
| データベースにパスワードを設定したりするサンプル | TOP |
// ---------------------------------------------------------------------------
// データベースを作成
procedure TForm1.Button1Click(Sender: TObject);
var
ret: Boolean;
Err: string;
begin
ret := CreateDatabase(ExtractFilePath(ParamStr(0)) + Edit1.Text, Err);
if ret then ShowMessage('成功') else ShowMessage(Err);
end;
// ---------------------------------------------------------------------------
// 初めてパスワードを設定する
procedure TForm1.Button2Click(Sender: TObject);
var
ret: Boolean;
Err: string;
begin
ret := ChangePassword(ExtractFilePath(ParamStr(0)) + Edit1.Text,
'', // 初めてなので空っぽ
Edit2.Text, // パスワードを指定
Err);
if ret then ShowMessage('成功') else ShowMessage(Err);
end;
// ---------------------------------------------------------------------------
// パスワードを変更する
procedure TForm1.Button3Click(Sender: TObject);
var
ret: Boolean;
Err: string;
begin
ret := ChangePassword(ExtractFilePath(ParamStr(0)) + Edit1.Text,
Edit3.Text, // 現在のパスワード
Edit4.Text, // 新しいパスワード
Err);
if ret then ShowMessage('成功') else ShowMessage(Err);
end;
// ---------------------------------------------------------------------------
// 最適化する
procedure TForm1.Button4Click(Sender: TObject);
var
ret: Boolean;
Err: string;
begin
ret := CompactDatabase(ExtractFilePath(ParamStr(0)) + Edit1.Text,
Edit5.Text, // 現在のパスワード
Err);
if ret then ShowMessage('成功') else ShowMessage(Err);
end;
| finalization | TOP |
ヘチョサンプルでしたが、予想以上に行数が育ってしまったので、このページはここまでにします。
ソースダウンロード
20040508Opemdb.zip(174,145bytes)
※何も触らずに上から順にボタンを押していけば、このページで紹介している4つのサンプル(データベースを作成する、パスワードを設定する、パスワードを変更する、パスワードの設定されているデータベースを最適化する)を試すことができます。
エラーになれば捨ててください。
| EOF | TOP |