2009-08-18 6 views
3

データベースがどのように構造化されているか確認するには?私たちのソース管理は過去に非常に弱かったので、現在のバージョンのC++プログラムで必要とされている列やテーブルが欠落しているデータベースを使用して、数多くのプロダクションインストールを行っています。私は、起動時にデータベースが期待どおりに構築されていることを確認するために私のアプリのチェックをしたいと思っています。理想的には、これはSQL、Oracle、Access、MySql DBで機能します。C++のデータベース構造をプログラムで確認する

+0

これは本当にC++とは関係ありません。正しく理解すれば、特定のスキーマに対して実際のデータベース・インスタンスを移植可能に検証する方法を知りたいとします。 C++タグを削除し、SQLタグを追加し、質問を編集する方がよいでしょう。 –

答えて

4

難易度は、クロスDBMSにあるようです。 ODBCドライバは、すべてのデータベースにわたって必要な機能のほとんどを提供します。 この状況では、ODBC SQLTablesとSQLDescribeColumnを使用して、データベースのすべてのテーブル、カラム、およびインデックスの定義を抽出し、それを既知のに対して実行されるプロセスの出力と比較しました。データベース。

構造を検証したいだけなら、論理的に列と索引を追加してデータベースを修復するコードは簡単ですが、少し難しくなります。

2

SQLを使用してデータベースを照会できると仮定すると、DESCRIBE SQLステートメントを使用して、探しているテーブルの説明を要求できます。

DESCRIBE table1; 

これは、あなたが、例えばフィールドのリスト、そのタイプ、およびその他の情報で提供します

...それが正しいかどうかを分析するために記述を通じて確認するようにコードを使用します

Field |Type |NULL |Key |Default| Extra 
Col 1 |int(11) |NO |PRI |NULL | auto_increment 
Co1 2 |time |No | |NULL | 

この表を確認することができます。

+0

あなたのデータベースが '記述'をサポートしていない場合、それらの多くには、そのデータベース内のすべてのテーブルの詳細を取得するためにクエリできる 'マスター'テーブルもあります。 – Jay

0

"起動時にデータベースが構造化されていることを確認するためにアプリをチェックしたいと思います。"

これは解決すると思われることは何ですか?

データベースがあなたのプログラムが期待している方法で構造化されていない場合、私はあなたのプログラムがほぼ確実に失敗すると確信しています。

あなたがチェックをすることができれば(ここで示唆されているものをはるかに上回ることができると確信しています)、それ以外にあなたのために残されていることは他にありますかあなたのプログラムを中止するには、 "期待どおりにデータベースを動かすことはできません"と言いましたか?

結果は、両方の状況でほぼ同じになることが保証されています。プログラムは実行されません。 「期待どおりに構造化されていないデータベース」で問題が発生している場合は、プロセス全体を確認する必要があります(また、障害を修正する必要があります)。ソフトウェアは "それ自身の世界で"生きておらず、どちらのデータベースも存在しません。

+0

インストールを行う人がそれを再現するように、プログラムはすぐにエラーメッセージを表示することがあります。私はそれを生産のラインのどこかに壊すことは望んでおらず、誰かがそれを把握する必要がある技術サポートコールをもたらします。 – JonF

関連する問題