LegatoSQLite.dllを適当なフォルダに設置します。(秀丸エディタフォルダ、秀丸マクロフォルダ等)
アンインストールする場合は、設置したLegatoSQLite.dllを削除して下さい。
※Windows環境の設定によっては、拡張子(.dllの部分)が表示されない場合があります。
ここでは例として、秀丸マクロのINIファイル操作関数(writeinistr、writeininum、getinistr、getininum)の代替処理を行います。
テーブルレイアウトは以下の通りです。
テーブル名 | 列名 | 主キー | 型 | 内容 |
---|---|---|---|---|
Ini | section | 1 | TEXT | セクション名 |
key | 2 | TEXT | キー名 | |
value | TEXT | 値 |
// ---------------------------------------------------------------------------- // LegatoSQLite.dllロード // ---------------------------------------------------------------------------- loaddll "LegatoSQLite"; if (!result) { message "LegatoSQLite.dllをロードできませんでした。"; goto END_MACRO; } // ---------------------------------------------------------------------------- // データベースを開く(秀丸マクロフォルダ直下の「likeIni.db」ファイル) // ---------------------------------------------------------------------------- // ※指定ファイルが存在しない場合は、自動的に作成される。 if (!dllfuncw("open", macrodir + "\\likeIni.db")) goto DLL_ERR; // ---------------------------------------------------------------------------- // テーブル作成 // ---------------------------------------------------------------------------- if (!dllfuncw("exec", "CREATE TABLE Ini (section TEXT, key TEXT, value TEXT, PRIMARY KEY (section, key))")) goto DLL_ERR; // ---------------------------------------------------------------------------- // データ追加(5件) // +----+------------+----------+----------+ // | № | セクション | キー | 値 | // +----+------------+----------+----------+ // | 1 | 野菜 | トマト | Tomato | // | 2 | 野菜 | キャベツ | Cabbage | // | 3 | 果物 | メロン | Mellon | // | 4 | 果物 | みかん | Orange | // | 5 | 家電 | パソコン | PC | // +----+------------+----------+----------+ // ---------------------------------------------------------------------------- if (!dllfuncw("exec", "INSERT INTO Ini (section, key, value) VALUES ('野菜', 'トマト' , 'Tomato' )")) goto DLL_ERR; if (!dllfuncw("exec", "INSERT INTO Ini (section, key, value) VALUES ('野菜', 'キャベツ', 'Cabbage')")) goto DLL_ERR; if (!dllfuncw("exec", "INSERT INTO Ini (section, key, value) VALUES ('果物', 'メロン' , 'Mellon' )")) goto DLL_ERR; if (!dllfuncw("exec", "INSERT INTO Ini (section, key, value) VALUES ('果物', 'みかん' , 'Orange' )")) goto DLL_ERR; if (!dllfuncw("exec", "INSERT INTO Ini (section, key, value) VALUES ('家電', 'パソコン', 'PCs' )")) goto DLL_ERR; // ---------------------------------------------------------------------------- // データ修正(「メロン」のセクションを「野菜」に変更) // ---------------------------------------------------------------------------- if (!dllfuncw("exec", "UPDATE Ini SET section = '野菜' WHERE key = 'メロン'")) goto DLL_ERR; // ---------------------------------------------------------------------------- // データ削除(セクション「家電」を削除) // ---------------------------------------------------------------------------- if (!dllfuncw("exec", "DELETE FROM Ini WHERE section = '家電'")) goto DLL_ERR; // ---------------------------------------------------------------------------- // データ照会(セクション「野菜」のキーと値を、値の昇順で照会) // ---------------------------------------------------------------------------- if (!dllfuncw("exec", "SELECT key, value FROM Ini WHERE section = '野菜' ORDER BY value ASC")) goto DLL_ERR; // データの存在を確認 if (dllfuncw("getColumnCount") == 0) { message "セクション「野菜」は 0件です。"; goto END_MACRO; } // データの取得 #i = 0; while (true) { $key[#i] = dllfuncstrw("getColumnData", 0); // キーを取得 $value[#i] = dllfuncstrw("getColumnData", 1); // 値を取得 #i = #i + 1; if (!dllfuncw("hasNext")) break; } // キーをメニューとして表示 menuarray $key, #i; // メニューの選択結果を値で表示 if (result == 0) goto END_MACRO; // 未選択の場合はマクロ終了 message $value[result - 1]; // メニューの選択結果は1からなので、添字は-1する。 // ---------------------------------------------------------------------------- // 正常終了 // ---------------------------------------------------------------------------- goto END_MACRO; // ---------------------------------------------------------------------------- // DLL関数エラー // ---------------------------------------------------------------------------- DLL_ERR: $$msg = "DLL関数でエラーが発生しました。\n"; $$msg = $$msg + str(dllfuncw("getErrorCode")); // エラーコードを取得 $$msg = $$msg + " : " + dllfuncstrw("getErrorMessage"); // エラーメッセージを取得 message $$msg; // メッセージ出力 goto END_MACRO; // ---------------------------------------------------------------------------- // マクロ終了 // ---------------------------------------------------------------------------- END_MACRO: $$dll = loaddllfile; if ($$dll != "") freedll; // DLLがロードされている場合は解放する。 deletefile macrodir + "\\likeIni.db"; // データベースファイルを削除 endmacro;