コンテンツにスキップ

SQLOPEN

Category: データベース

書式

SQLOPEN( path [, mode] )

引数

Parameter Description
path データベースファイルのパス(yaya.dll からの相対パス、または絶対パス)。":memory:" ならメモリ上のデータベース
mode 開き方(省略可。下記参照)。省略時は "rwc"

mode

mode 動作
"rwc" 読み書き。ファイルが無ければ作る(省略時)
"rw" 読み書き。ファイルが無ければ失敗する
"r" 読み取り専用。ファイルが無ければ失敗する

戻り値

  • 1: 成功
  • 0: 失敗
  • 2: すでに開いている

解説

SQLite のデータベースを開く。開いたデータベースには、SQLEXEC と SQLQUERY で SQL を実行する。

FOPEN と同じく、データベースは開いたときのパスで識別する。以降の SQLEXEC・SQLQUERY・SQLCLOSE には、SQLOPEN と同じ書き方のパスを渡す。"data.db" と "./data.db" のように書き方が違うと、同じファイルでも別のものとして扱われ、2つ目の接続が開く(SQLite のロックで守られるので中身は壊れないが、閉じるときはそれぞれ閉じる必要がある)。

  • 複数のデータベースを同時に開ける
  • ":memory:" のデータベースは1つだけ開ける。閉じると中身は消える
  • 開いたデータベースは、SQLCLOSE で閉じるか、unload のときに自動で閉じる。終わっていないトランザクションはロールバックされる
  • 別のプロセス(ほかのゴーストなど)が書き込み中でロックされているときは、最大1秒待つ。それでも解除されなければ、その SQL はエラー(database is locked)になる

データベースの中身(表の作り方、ジャーナルの方式など)は SQL で指定する。たとえば書き込みの多い用途では、開いた直後に SQLEXEC(path, "PRAGMA journal_mode=WAL") を実行しておくとよい。

SQLite の拡張機能の読み込み(load_extension)は使えない。

エラー

状況 警告 GETLASTERROR
引数がない W0008 8
path または mode が文字列でない W0009 9
path が空文字列 W0010 10
mode が不正 W0012 12
データベースを開けない W0029 29

W0029 の警告には SQLite のエラーメッセージが付く。

使用例

if SQLOPEN("ghost.db") == 0 {
    // 開けなかった
}
SQLEXEC("ghost.db", "CREATE TABLE IF NOT EXISTS talk(id INTEGER PRIMARY KEY, text TEXT)")

SQLOPEN(":memory:")      // メモリ上の作業用データベース
SQLOPEN("ref.db", "r")   // 読み取り専用

互換性

  • YAYA: Tc602-11以降

関連項目