導入・基本操作

  1. 導入
  2. 基本操作

導入

LegatoSQLite.dllを適当なフォルダに設置します。(秀丸エディタフォルダ、秀丸マクロフォルダ等)

アンインストールする場合は、設置したLegatoSQLite.dllを削除して下さい。

※Windows環境の設定によっては、拡張子(.dllの部分)が表示されない場合があります。

基本操作

ここでは例として、秀丸マクロのINIファイル操作関数(writeinistr、writeininum、getinistr、getininum)の代替処理を行います。

テーブルレイアウトは以下の通りです。

INIファイル代替テーブル
テーブル名 列名 主キー 内容
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;