0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【C++Builder】SQLQueryを使ってuser_versionを取得する方法

Posted at

データベースは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でフィールド名を取得して使えばいけました。
それだけ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?