2014-11-28 2 views
0

SQL을 동적으로 생성하는 오래된보고 도구에서 버그를 해결하려고하는데 데이터 형식이 일치하지 않으면 오류가 발생합니다. 생성 된 SQL은 Dbase 테이블에서 Date 필드를 쿼리합니다.Delphi ADO 쿼리를 통해 DBase Date 필드를 쿼리 할 때 데이터 형식이 일치하지 않습니다.

아래의 쿼리가 TADOQuery에로드되고 활성화되는 간단한 테스트 응용 프로그램에서 같은 문제를 복제 할 수있었습니다.

SELECT * 
FROM [QPERFSAL.DBF] QPERFSAL 
WHERE (QPERFSAL.PERFDATE = '21/01/2014') 

는 그 분명히 날짜 형식과 관련된하지만 다양한 형식을 시도했다하지만, 난 여전히 예를 들어, 오류

확실한 수정 사항은 매개 변수가있는 쿼리를 사용하는 것일 수 있지만 보고서 도구를 사용하여 즉시 생성되므로 사용할 수 없습니다. 예를 들면 다음과 같습니다. ?! 매개 변수 :(

내가 부족 뭔가가 아니면 내가 ADO 연결에서 날짜 형식을 지정할 수 있습니다

감사로 사용할

+0

'yyyymmdd'를 사용해보세요 –

+0

저는 yyyymmdd와 mmddyyyy를 시도했습니다 .201040101과 같은 값을 사용 했으므로 날짜 순서와 관계없이 날짜와 요일이 유효합니다. – chedges

답변

0

첫째, 게시 된 제안 덕분입니다. 아아, 나는 그들에게 시도를 제외한 모든 관련이없는 뭔가를 검색하는 동안 성공 :(감사하게

없이, 나는 해결책을 찾아 냈다.

SELECT * 
    FROM [QPERFSAL.DBF] QPERFSAL 
    WHERE PERFDATE = Format('2014/12/06',"YYYY/MM/DD") 

나는이 현지화에 있지만, 적어도 어떤 영향을 미칠 것인가 확실하지 않다

0

시도하는 것은 다음과

SELECT * 
FROM [QPERFSAL.DBF] QPERFSAL 
WHERE (DTOC(QPERFSAL.PERFDATE) = '01/21/2014') 
+0

"정의되지 않은 함수 'DTOC'이 표현식에 있습니다." ADO를 통해 Microsoft.Jet.OLEDB.4.0을 사용하여 DBF 파일을 열고 네이티브 DBase를 열지 않습니까? – chedges

+0

예, 당신 말이 맞아요. DTOC()는 VFPOLEDB 공급자의 기능입니다. – Oleg

1

VFP OleDB 제공자는 yyyy-mm-dd 또는 mm-dd-yyyy 또는 dd-mm-yyyy 형식에 대해 걱정할 필요가없는 DATE() 함수도 인식합니다. 적절한 날짜 형식 열로 빌드됩니다.

where QPERFSAL.PERFDATE = date(2014, 1, 21) 

는 이제 "perfDate"열이 날짜/시간의 경우, 당신은 TTOD() (시간을 사용하여 날짜/시간 필드의 날짜 전용 부분을 기준으로 비교해야 -date function)

where TTOD(QPERFSAL.PERFDATE) = date(2014, 1, 21) 
관련 문제