1

動的に作成されたSQLクエリに基づくTSimpleDataSetがあります。どのフィールドが主キーであるかを知る必要がありますか?

SimpleDataSet1.DataSet.SetSchemaInfo(stIndexes, 'myTable' ,'');

このコードは、「someName」という名前の主キーがあることを示していますが、どのフィールド(列)がこのインデックスで機能するかをどのように知ることができますか?

4

2 に答える 2

4

主キー/インデックスは、(1 つだけでなく) 複数の列に属することができます。

スキーマstIndexesデータセットは、PK 名INDEX_NAMEと、その PK/インデックスを構成する列を返します ( COLUMN_NAME)。INDEX_TYPE持っているインデックスの種類がわかります ( eSQLNonUnique/eSQLUnique/eSQLPrimaryKey)。

私は働いたことはありませんTSimpleDataSetが、インデックス情報が保存されているかどうかを確認 してくださいIndexDefs[TIndexDef].Name/Fields/Options- もしそうならixPrimaryOptionsこれはあなたのPKです。そのインデックスにFields属します。

のソースを見てくださいSqlExpr.pas: TCustomSQLDataSet.AddIndexDefs。コマンド テキストから (およびインデックス情報) をTCustomSQLDataSet返す方法に注意してください。TableName

  ...
  if FCommandType = ctTable then
    TableName := FCommandText
  else
    TableName := GetTableNameFromSQL(CommandText);
  DataSet := FSQLConnection.OpenSchemaTable(stIndexes, TableName, '', '', '');
  ...
于 2013-01-22T21:00:40.160 に答える
1

単純なデータセットはその情報を提供しないと思います。

ただし、そのためのコンポーネントがあると確信しています。Oracleデータベースについては、DevartのODACを確認してください。基本的に、データベースへのクエリは1つだけです。ただし、コンポーネントがデフォルトで提供するものではありません。これは、別のクエリを伴うため、応答時間が遅くなるためです。

Oracleデータベースの場合は、でクエリを実行しますuser_indexes

于 2013-01-22T10:05:44.250 に答える