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 |