문제

TadoQuery에서 일부 레코드를 걸러 내려고합니다. 필터링 된 속성을 True로 설정하고 필터를 Field = 'value'로 설정하면 모두 잘 작동합니다. 추가 로이 필터를 동적으로 빌드하고 싶습니다.

<space>AND field='value'

항상 값으로는 사실이며, 나는 1 = 1이 트릭을 할 것이라고 생각했습니다. 그래서 나는 기본 필터로 1 = 1을 가질 것입니다. AND field='value' 필요에 따라.

그러나 이것은 작동하지 않습니다. 오류 메시지는 다음과 같습니다.

인수는 잘못된 유형이며, 허용 가능한 범위를 벗어나거나 서로 충돌하고 있습니다.

누구 든지이 필터에 대한 다재다능한 항상 진실한 표현으로 무엇을 사용할 수 있는지 말해 줄 수 있습니까?

도움이 되었습니까?

해결책

나는 그것이 말할 필요도 없다고 생각하지만, 이것이 작동하는지 여부는 OLE DB 제공 업체에 달려 있습니다. 기존 레코드 세트에 필터를 설정하면 다른 OLE DB 인터페이스 (올바르게 기억하면 iviewFilter)를 통과하게됩니다. 따라서 필터가 SQL 문의 WARE 절에서 작동하더라도 필터로 작동한다는 의미는 아닙니다. 설정 한 필터는 구성 요소 조각으로 구문 분석 된 다음 OLE DB 인터페이스로 전달됩니다. 공급자의 구현은 "constant = constant"형식의 필터를 기대하지 않을 수 있습니다. 해결 방법으로 SQL 문의 WHERE 절에 모든 것을 설정하려고 시도 할 수 있습니다.

다른 팁

무언가를 필터링하지 않으면 '필터링 된'속성을 False로 설정하고 결과 세트를 필터링하기를 원할 때 사실과 조건을 설정해야합니다.

나는 정확한 SQL 속성을 동적으로 구축하므로 항상 데이터베이스에 전송되는 것을 정확히 알 수 있습니다 (그리고 원하는 레코드 만 프로그램에서 수신 할 수 있음을 확신합니다).

1 = 1 트릭은 쿼리의 WHERE 절에서 잘 작동하지만 필터링 된 속성에는 잘 작동하지 않습니다. 필터를 비활성화하려면 필터링 된 설정 필터링이 False로 설정하면 모든 레코드가 반환됩니다.

필터링의 문제점은 클라이언트 측면이 완료되었다는 것입니다. SQL Server와 같은 데이터베이스 엔진을 사용하고 필터링 할 수있는 큰 레코드 세트가있을 것으로 예상되는 경우, 데이터베이스 서버가 요청한 레코드 만 반환 할 수있는 SQL 쿼리를 변경하여 더 잘 제공됩니다. 먼저 TadoQuery를 닫고 SQL을 변경 한 다음 다시 열어야합니다.

전체 데이터 세트를 반환하지 않기 위해 사용하는 트릭 (대형 데이터 세트에 사용)은 표시하려는 최대 레코드 수를 고려한 다음 상위 SQL 구문을 사용하여 'n을 표시하려는 레코드 수보다 하나 더 반환하는 것입니다. '... 해당 번호에 도달하면 N-1 레코드 이상이 반환되고 검색/필터 기준을 조정하는 것을 사용자에게 알립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top