■プロフィール

mimizuno

Author:mimizuno

■最近の記事
■最近のコメント
■最近のトラックバック
■月別アーカイブ
■カテゴリー
■ブロとも申請フォーム
■ブログ内検索

■RSSフィード
■リンク
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | --:--:--
BCCでSQLite その2
コメントで気づいたけど、前回の記事で書き忘れてたことがあった。

そのままのsqlite3.hだと
エラー E2232 sqlite3.h 3084: <定数> メンバー 'sqlite3_index_info::nConstraint' のクラスにコンストラクタがない

のようなエラーが出る。

これを直すにはsqlite3.hを少し編集する必要がある。
sqlite-source-3_5_0.zipに含まれているsqlite3.hの場合
3061行のconst int nConstraint;を
/*const*/ int nConstraint;
のようにconstをコメントアウトする。(削除してもいい)
同様に3067行、3068行、3072行、3078行のconstを削除する。
このとき*constの*は消さないこと。
最終的にsqlite3.hの3059行辺りは以下のようになる。

struct sqlite3_index_info {
/* Inputs */
/*const*/ int nConstraint; /* Number of entries in aConstraint */
const struct sqlite3_index_constraint {
int iColumn; /* Column on left-hand side of constraint */
unsigned char op; /* Constraint operator */
unsigned char usable; /* True if this constraint is usable */
int iTermOffset; /* Used internally - xBestIndex should ignore */
} */*const*/ aConstraint; /* Table of WHERE clause constraints */
/*const*/ int nOrderBy; /* Number of terms in the ORDER BY clause */
const struct sqlite3_index_orderby {
int iColumn; /* Column number */
unsigned char desc; /* True for DESC. False for ASC. */
} */*const*/ aOrderBy; /* The ORDER BY clause */

/* Outputs */
struct sqlite3_index_constraint_usage {
int argvIndex; /* if >0, constraint is part of argv to xFilter */
unsigned char omit; /* Do not code a test for this constraint */
} */*const*/ aConstraintUsage;
int idxNum; /* Number used to identify the index */
char *idxStr; /* String, possibly obtained from sqlite3_malloc */
int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */
int orderByConsumed; /* True if output is already ordered */
double estimatedCost; /* Estimated cost of using this index */
};


この修正で特に問題はおきないと思うけど、そこらへん未確認

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

bcc | 17:28:54 | Trackback(0) | Comments(2)
BCCでSQLite
無料のC++コンパイラbccでSQLiteを使ってみる。

bccはhttp://www.codegear.com/jp/downloads/free/cppbuilderから取れる模様。
SQLiteはhttp://www.sqlite.org/から。
今回使うのはsqlitedll-3_5_0.zipとヘッダファイルが必要なのでsqlite-source-3_5_0.zip

zipを解凍してsqlite3.dllとsqlite3.hを取り出す。

BCC用のlibファイルは用意されてないので自分で作る
implib sqlite3.lib sqlite3.dll

DBを開いて閉じるだけのソース(TestApp.cpp)

#include "sqlite3.h"
#include <stdio.h>

int main() {
sqlite3* db;
char *dbname = "TEST.DB";

if (sqlite3_open(dbname, &db) != SQLITE_OK) {
return -1;
}
sqlite3_close(db);
return 0;
}


bcc32 testApp.cpp sqlite3.lib
としてコンパイルしたが、

Error: 外部シンボル '_sqlite3_open' が未解決


よくわからないが関数の前にアンダーバーがついてしまってる?
implibのヘルプを見ると

-a Microsoft ライブラリとの互換性のために cdecl 関数に '_' エリアスを追加


というのがあったので
implib -a sqlite3.lib sqlite3.dll
としてから
もう一度コンパイルしたらうまくいった。
実行するとTEST.DBファイルが出来る。

これでbccからSQLiteを使うことが出来るようになった。

特にやりたいことがあったわけでもないので今回はこれでおしまい。

テーマ:プログラミング - ジャンル:コンピュータ

bcc | 14:22:42 | Trackback(0) | Comments(1)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。