2014-07-07 3 views
1

ADOConnection에서 SQL Server로 전달 된 모든 SQL 쿼리를 기록 할 계획입니다.TAdoConnection.OnWillExecute 동안 쿼리 이름 가져 오기

이 메시지는 How can I monitor the SQL commands send over my ADO connection?이며 모든 쿼리를 기록 할 수 있습니다.

하지만 쿼리 구성 요소 (데이터 집합)의 이름도 기록하고 싶습니다. 코드 아래에서 시도했지만 Command.Name이 비어 있습니다.

쿼리 이름을 가져 오는 방법이 있습니까?

+0

(D7, Win7에 64 비트 및 TAdoQuery 및 TAdoDatasets으로 테스트)

. 그러나 나는 그것을 시도한 적이 없으며 아마도 그것을하는 더 직접적인 방법이있을 것입니다. – TLama

답변

2

TLama 's는 좋은 제안입니다. 비슷한 맥락에서, 이것은 좀 더 직접적이다, 그리고

I : Integer; 
ADataSet : TDataSet; 
ADataSetName : String; 

당신의 AssignFile()

ADataSet := Nil; 
    for I := 0 to Connection.DataSetCount - 1 do begin 
    if Connection.DataSets[I] is TCustomAdoDataSet then 
     if TCustomAdoDataset(Connection.DataSets[I]).Recordset = RecordSet then 
     ADataSet := Connection.DataSets[I]; 
    end; 

    if ADataSet <> Nil then 
    ADataSetName := ADataSet.Name 
    else 
    ADataSetName := ''; 

그것은 때문에 작동하기 전에이 추가 :

이 이벤트 핸들러에 일부 변수를 추가 TAdoConnection 호출이 연결 속성이있는 TDataSet에 속성 값이 s 인 경우

procedure TCustomConnection.RegisterClient 

연결에. 당신은 당신이 모든 데이터 세트의 컨트롤을 반복하고 자신의`Recordset`가 전달 된 하나와 같은지 여부를 확인 어쩌면 경우, 충분히 운이 좋다면

+0

답장을 보내 주셔서 감사합니다. select 문에 대한 작업이지만 insert/update/delete 문에 대해 공백을 제공합니다. 쿼리 이름을 기록하는 다른 옵션을 찾고 있습니다. – Bharat

관련 문제