FireDAC에서 매크로를 사용하여 SQL 쿼리를 사전 처리하려고합니다.FireDAC - 매크로 확장 후 SQL 표시
이Select * from MyTable
join OtherTable on MyTable.Key = OtherTable.Key
&Where
그럼 내 코드에서 내가 할이 : 이것은 복잡한 쿼리에 좋은 일했다
WhereClause = 'stuff based on my form';
Query.MacroByName('Where').AsRaw := WhereClause;
Query.Open;
그것은 나를 수 있기 때문에 SQL이 같은 설정으로 나는 데이터 모듈에 TADQuery 개체가 SQL 속성 편집기를 사용하여 내 필드와 조인 조건이 올바른지 확인하십시오.
제 문제는 where 절로 인해 SQL 문이 유효하지 않은 경우입니다. 전처리가 실행될 SQL을 볼 수있는 방법이 있습니까? 지금 당장 FireDac 오류를 잡아 내고 EADDBEngineException 객체에있는 SQL을 보여줍니다. 그러나 그것은 여전히 매크로와 함께 원래의 SQL을 보여줍니다. 오류가 발생한 후에도 매크로를 얻을 수 없다면 어쨌든 매크로 대체가 강제로 수행되어 디버거에서 SQL을보고 잘못된 것을 볼 수 있습니다.
가까운 미래에 SQL Server로 옮길 목표로 MS Access 데이터베이스에 연결하는 것이 중요합니다.
그냥 추측 (I 이후 현재 FireDAC을 가지고 있지는 않지만) ['Prepare'] (http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile)에 전화 할 필요는 없습니다. = uADCompClient_T ADRdbmsDataSet_Prepare.html) 메서드를 사용하여 전처리를 트리거 할 수 있습니까? 쿼리 준비 결과는 ['SQLText'] (http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=uADCompClient_TADCustomCommand_SQLText.html) 속성에 저장해야하지만 여기에는 도움이 매우 혼란 스러워요. 그리고 나는이 속성이'TADSQLQuery'에 숨겨져 있다고 생각합니다. – TLama
글쎄, 내가 무슨 일이 일어나고 있는지 대략 체크했는데'Prepare '(나는 당신에게 쓸모가 없다)를 호출하는 것이 그 전처리를 유발시키는 최소한의 요구 사항인지 아직도 확신 할 수 없다. 비록 전처리 된 SQL은 DBMS로 전송되며 ['Text'] (http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=uADCompClient_TADCustomQuery_Text)를 통해 액세스 할 수 있습니다. .html) 속성 (이러한 속성의 경우 일반적이지는 않은 이름). 그래서, 나는 오히려 믿을만한 대답을 기다리고 싶습니다. 좋은 질문! – TLama
@tlama - 고마워! ADQuery.Text가 필요한 것 같습니다. 나는 그것을 생각하지 않고 그 재산을 바로 지나쳤습니다. 귀하의 의견에서 나는 그 도움말 파일에 대한 또 다른 짧은 참조를 찾았습니다. [추적 및 모니터링] (http://docs.embarcadero.com/products/rad_studio/firedac/Tracing_and_Monitoring.html) 섹션에는 "SQL 명령 텍스트 확인"이라는 제목 아래쪽 단락이 있습니다. 오류 객체의 .Text 속성에 접근 할 수있는 것처럼 보이지 않지만 디버거에서 볼 수있는 큰 도움이 될 것입니다. –