2013-01-22 4 views
1

나는 dinamically 만든 SQL 쿼리를 기반으로 TSimpleDataSet 있습니다. 어떤 필드가 기본 키인지 알아야합니까?DBExpress : 기본 키 필드를 찾는 방법은 무엇입니까?

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

이 코드는 'someName'이라는 이름의 기본 키를 가지고 있지만이 인덱스에서 작동하는 필드 (열)를 어떻게 알 수 있습니까?

+1

'선택 * 표에서 표 2 storedprocedure3 가입 someview5 ....'에 가입하고 주 어떤 분야가 될 것 조인 : 명령 텍스트에서 TCustomSQLDataSet 반환 TableName (다음 indexs 정보) 방법 주? –

+0

내 쿼리는 단일 테이블 – TheHorse

+1

으로만 작동하지만 라이브러리는이 기능을 제공 할 것이고 어떤 쿼리와도 작동해야합니다. –

답변

4

기본 키/색인은 여러 열 (하나가 아닌)에 속할 수 있습니다.

스키마 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의 출처를 확인하십시오.

... 
    if FCommandType = ctTable then 
    TableName := FCommandText 
    else 
    TableName := GetTableNameFromSQL(CommandText); 
    DataSet := FSQLConnection.OpenSchemaTable(stIndexes, TableName, '', '', ''); 
    ... 
1

나는 간단한 데이터 세트가 그 정보를 제공하지 않는다고 생각한다.

그러나 그 구성 요소가 있다고 확신합니다. Oracle 데이터베이스의 경우 Devart's ODAC을 확인하십시오. 기본적으로 데이터베이스에는 하나의 쿼리 만 포함됩니다. 그러나 구성 요소가 기본적으로 제공하는 것이 아니라 다른 쿼리가 포함되어 응답 시간이 느려집니다.

Oracle 데이터베이스의 경우 user_indexes에 대한 쿼리

관련 문제