動的に作成されたSQLクエリに基づくTSimpleDataSetがあります。どのフィールドが主キーであるかを知る必要がありますか?
SimpleDataSet1.DataSet.SetSchemaInfo(stIndexes, 'myTable' ,'');
このコードは、「someName」という名前の主キーがあることを示していますが、どのフィールド(列)がこのインデックスで機能するかをどのように知ることができますか?
動的に作成されたSQLクエリに基づくTSimpleDataSetがあります。どのフィールドが主キーであるかを知る必要がありますか?
SimpleDataSet1.DataSet.SetSchemaInfo(stIndexes, 'myTable' ,'');
このコードは、「someName」という名前の主キーがあることを示していますが、どのフィールド(列)がこのインデックスで機能するかをどのように知ることができますか?
主キー/インデックスは、(1 つだけでなく) 複数の列に属することができます。
スキーマstIndexes
データセットは、PK 名INDEX_NAME
と、その PK/インデックスを構成する列を返します ( COLUMN_NAME
)。INDEX_TYPE
持っているインデックスの種類がわかります ( eSQLNonUnique/eSQLUnique/eSQLPrimaryKey
)。
私は働いたことはありませんTSimpleDataSet
が、インデックス情報が保存されているかどうかを確認
してくださいIndexDefs[TIndexDef].Name/Fields/Options
- もしそうならixPrimary
、Options
これはあなたのPKです。そのインデックスにFields
属します。
のソースを見てくださいSqlExpr.pas
: TCustomSQLDataSet.AddIndexDefs
。コマンド テキストから (およびインデックス情報) をTCustomSQLDataSet
返す方法に注意してください。TableName
...
if FCommandType = ctTable then
TableName := FCommandText
else
TableName := GetTableNameFromSQL(CommandText);
DataSet := FSQLConnection.OpenSchemaTable(stIndexes, TableName, '', '', '');
...
単純なデータセットはその情報を提供しないと思います。
ただし、そのためのコンポーネントがあると確信しています。Oracleデータベースについては、DevartのODACを確認してください。基本的に、データベースへのクエリは1つだけです。ただし、コンポーネントがデフォルトで提供するものではありません。これは、別のクエリを伴うため、応答時間が遅くなるためです。
Oracleデータベースの場合は、でクエリを実行しますuser_indexes
。