私はちょうどInterbaseの使用を開始しました。データベースにテーブルがあるかどうかを確認する必要があります。データベースにテーブルが存在する場合、Interbaseをチェックインするにはどうすればいいですか? IBXの場合Interbaseにテーブルが存在するかどうかをテストするにはどうすればよいですか?
答えて
これらの方法はdisponible、少なくともあります
1.あなたはRDB$RELATION_NAME
列でフィルタリングするRDB$RELATIONSシステムテーブルを照会することができますSQLクエリ
を使用します。
function TableExists(Database: TIBDatabase; const TableName: string): Boolean;
var
Query: TIBSQL;
begin
Query := TIBSQL.Create(Database);
try
Query.SQL.Text := 'SELECT 1 FROM RDB$RELATIONS WHERE RDB$RELATION_NAME = ?';
Query.Params[0].AsString := TableName;
Query.ExecQuery;
{ RecordCount reports only visited records, so it should be either 0 or 1 now }
Result := Query.RecordCount > 0;
finally
Query.Free;
end;
end;
このバージョンでは、大文字と小文字が区別されます:
SELECT 1 FROM RDB$RELATIONS
WHERE RDB$RELATION_NAME = 'MyTable'
IBXでは、クライアント側で使用すると、インスタンスのためにこれを書くことができます。たとえば、このクエリでは、1
表はMyTable
がデータベースに存在する呼び出されたときに返しますテーブルがコードからのみ存在するかどうかを判断する必要があるときに効率的です(頻繁にチェックするために、GetTableNamesメソッドによって返されたすべてのテーブル名のリストをキャッシュし、そのようなリストだけをクエリします) 。
2.使用TIBDatabase.GetTableNames方法
TIBDatabaseクラスはGetTableNamesの方法で、すべてのテーブル名を一覧表示することができます。返された文字列リストコレクションでは、IndexOfメソッドで名前が存在するかどうかを確認できます。たとえば:
function TableExists(Database: TIBDatabase; const TableName: string): Boolean;
var
Tables: TStrings;
begin
Tables := TStringList.Create;
try
Database.GetTableNames(Tables, True);
Result := Tables.IndexOf(TableName) <> -1;
finally
Tables.Free;
end;
end;
このバージョンでは、大文字と小文字を区別しません(限り、あなたが返されるコレクションのCaseSensitiveプロパティのデフォルト値は変更されません)と、自然に、単一またはocassional使用のための第一の方法ほど効率的ではありませんこれは、サーバーからクライアントへのテーブル名コレクション全体をフェッチするためです。しかし、GetTableNamesメソッド自体は、返されたコレクションをキャッシュすると頻繁に使用すると便利です。 TIBExtractクラス
を使用
3. TIBExtract IBXクラスは、メタデータをフェッチすることを意図しています。残念ながら、すべてのテーブルのリストまたはテーブル自体の詳細のいずれかをフェッチできるため、特定のテーブルがデータベースに存在するかどうかをチェックするだけでは効率的で簡単ではありません。だから私はこのオプションを例のままにしておきます。
...「RDB $ PROCEDURES」(http://docwiki.embarcadero.com/InterBase/2017/en/RDB$PROCEDURES) 'RDB $ PROCEDURE_NAME = 'から選択カウント(*)を見つけ出すのを手伝ってくれました。 my_proc'' – Wolf
- 1. PHPでリモートイメージファイルが存在するかどうかをテストするにはどうすればよいですか?
- 2. テーブルが既に存在するかどうかをテストするには?
- 3. ファイルが存在するかどうかを確認するにはどうすればよいですか?
- 4. レポが存在するかどうかを確認するにはどうすればよいですか?
- 5. ルート「URL」が存在するかどうかを確認するにはどうすればよいですか?
- 6. メールアドレスが存在するかどうかを確認するにはどうすればよいですか?
- 7. ファイルが存在するかどうかを確認するにはどうすればよいですか?
- 8. 変数が存在するかどうかを確認するにはどうすればよいですか?
- 9. リソースが存在するかどうかを確認するにはどうすればよいですか?
- 10. 値が存在するかどうかをテストするには?
- 11. 変数が存在するかどうかを確認するにはどうすればいいですか?
- 12. 外部URLのファイルがダウンロードされずに存在するかどうかをテストするにはどうすればよいですか?
- 13. オートプレフィクサーが動作しているかどうかをテストするにはどうすればよいですか?
- 14. リンクhrefを含むHTMLリンク要素(a)がDOMに存在するかどうかをテストするにはどうすればよいですか?
- 15. 特定のIDを持つ要素がjQueryのページに存在するかどうかをテストするにはどうすればよいですか?
- 16. アイテムが別のテーブルに存在するかどうかを示すクエリに列を含めるにはどうすればよいですか?
- 17. mixinが存在するかどうかテストできますか?
- 18. xがユニバーサルセットのメンバーであるかどうかをテストするにはどうすればよいですか?
- 19. コードにデバッガがあるかどうかテストするにはどうすればよいですか?
- 20. 実行ファイルがWindowsバッチファイルの%PATH%に存在するかどうかをテストするにはどうすればよいですか?
- 21. Genshiストリームに文字列が存在するかどうかをテストするにはどうすればよいですか?
- 22. BOOLがNSUserDefaultsのユーザー設定に存在するかどうかをテストするにはどうすればよいですか?
- 23. 存在するシンボルが存在するかどうかを検出するにはどうすればよいですか?
- 24. テーブルにデータベースが存在するかどうかを調べる
- 25. データベースにテーブルが存在するかどうかを調べる
- 26. テーブルに列が存在するかどうかを確認するにはどうすればよいですか?
- 27. laravelで接続が正常かどうかをテストするにはどうすればよいですか?
- 28. Strutsタグを使用して特定のリクエストパラメータが存在するかどうかをテストするにはどうすればよいですか?
- 29. CasperJSにセレクターが存在するかどうかをテストするには?
- 30. rspecにアソシエーションが存在するかどうかのテスト
Interbase? Interbaseを使用してもよろしいですか?もしそうなら、このhttp://www.devrace.com/en/fibplus/articles/2325.phpをチェックしてください。 – Victoria
@Victoria –
ありがとうございました!とにかくFireDACを使用している場合は、サポートされているすべてのDBエンジン汎用メソッド[GetTableNames](http://docwiki.embarcadero.com/Libraries/Tokyo/en/FireDAC.Comp.Client.TFDCustomConnection.GetTableNames)に使用できます。あなたが知りたいと思っているテーブル。 – Victoria