現在、仕事で作成しているFOMA M1000用のアプリケーションにファイルベースのデータベースを操作する機能を実装するため、思考錯誤していたら、終電間際になって、タイムアップ。帰宅したら、もう、日付が変わってました。
ファイルベースのデータベース(Symbianのtechlibによれば、正式にはClient-side accessと呼ぶらしい)で、次のようなコードを書いてみたところ、 KErrNotSupport がリーブしてしまいます。
どうも、CREATE TABLE では列制約に NOT NULL しか指定できないようで、それに気づくに時間がかかりました。仕方がないので、table 表の各列に NOT NULL を設定し、
PRIMARY KEY の代わりに一意なインデックスを作成しようとして、
とすると、今度は KErrTooBig がリーブしてしまい、踏んだり蹴ったり。
代わりに
とすると、ちゃんとインデックスが生成されます。
何が Too Big なのか、う~ん、わからん。
SQLだけでは、列に PRIMARY KEY 制約を付けられないのでしょうか。参りました。
ファイルベースのデータベース(Symbianのtechlibによれば、正式にはClient-side accessと呼ぶらしい)で、次のようなコードを書いてみたところ、 KErrNotSupport がリーブしてしまいます。
_LIT(KDbFileName, "c:sample.db"); RFs fs; User::LeaveIfError(fs.Connect()); CleanupClosePushL(fs); RDbNamedDatabase ndb; User::LeaveIfError(ndb.Create(fs, KDbFileName); CleanupClosePushL(ndb); _LIT(KMkTable, "CREATE TABLE table ( id VARCHAR (255) PRIMARY KEY, name VARCHAR (8) UNIQUE)"); User::LeaveIfError(ndb.Execute(KMkTable)); CleanupStack::Pop(); ndb.Close(); CleanupStack::Pop(); fs.Close();
どうも、CREATE TABLE では列制約に NOT NULL しか指定できないようで、それに気づくに時間がかかりました。仕方がないので、table 表の各列に NOT NULL を設定し、
_LIT(KMkTable, "CREATE TABLE table ( id VARCHAR (255) NOT NULL, name VARCHAR (8) NOT NULL)");
PRIMARY KEY の代わりに一意なインデックスを作成しようとして、
_LIT(KUniqueIndex, "CREATE UNIQUE INDEX table_index ON table (id)"); User::LeaveIfError(ndb.Execute(KUniqueIndex));
とすると、今度は KErrTooBig がリーブしてしまい、踏んだり蹴ったり。
代わりに
_LIT(KUniqueIndex, "CREATE UNIQUE INDEX table_index ON table (name)"); User::LeaveIfError(ndb.Execute(KUniqueIndex));
とすると、ちゃんとインデックスが生成されます。
何が Too Big なのか、う~ん、わからん。
SQLだけでは、列に PRIMARY KEY 制約を付けられないのでしょうか。参りました。