データベースはSQLiteを使用
DBアクセス用のコンポーネントはSQLConnectionでconnectして、SQLの実行はSQLQueryを使用。
やりたかったこと
アプリ開発中にテーブルの構成を変更することになり、DBのversionを取得して、バージョンに応じてALTER TABLEを実行するようにするため、user_versionをDBから情報を取りたかった。のだけど、情報取得の際のキー名がわからなかった。
SELECTした情報を参照する方法
SQLQuery1->SQL->Text = "SELECT * FROM Stock;";
SQLQuery1->Active = true;
if (!SQLQuery1->IsEmpty()) {
SQLQuery1->First();
while(!SQLQuery1->Eof){
Ansi state = SQLQuery1->FieldByName("productname")->AsAnsiString;
SQLQuery1->Next();
}
}
SQLQuery1->Active = false;
通常はこんな感じでFieldByNameでカラム名を指定するのだけど、
SQLQuery1->SQL->Text = "PRAGMA user_version;"
として、SQLQuery1->FieldByName("productname")->AsInteger;
としても、「そんなもんはねぇ」と言われてしまい、取得できませんでした。
"pragrama user_version"の場合
で、結論。
SQLQuery1->SQL->Text = "PRAGMA user_version;";
SQLQuery1->Active = true;
if (!SQLQuery1->IsEmpty()) {
TStrings *sl = new TStringList();
SQLQuery1->First();
if(!SQLQuery1->Eof){
SQLQuery1->GetFieldNames(sl);
AnsiString str = sl->Strings[0];
ret = SQLQuery1->FieldByName(str)->AsInteger;
}
delete sl;
}
SQLQuery1->Active = false;
のように、GetFieldNamesでフィールド名を取得して使えばいけました。
それだけ。