ADO (Provider = "Microsoft.Jet.OLEDB.4.0"
)를 사용하여 Excel 2003에서 Access 2003으로 스프레드 시트를 가져오고 있습니다. 그러나 날짜 필드에 일부 텍스트 항목이 있습니다. 예상대로 이러한 값은 #Num!
값으로 전달됩니다.#Num! Excel을 Access로 가져 오는 중 오류가 발생했습니다.
내가하고 싶은 것은 문제가되는 필드를 IIf(IsDate(FIELDNAME),FIELDNAME,#1/1/1900#)
과 같이 감싸는 것입니다. 그러나 이는 여전히 #Num!
입니다. 따라서 테스트는 IsDate()
, IsDate(CVar())
, IsError()
, IsError(CDat())
및 VBAFunctionThatReturns0GivenAnyValue(FIELDNAME)
입니다.
누구나 사용할 수있는 랩퍼 기능에 대해 알고 있습니까? 내 재치가 끝나면 더 많든 적든?
참고 : 가져온 데이터를 제어 할 수 없으므로 원하는대로 스프레드 시트를 수정할 수 없습니다. 또한 가져 오기 기능 자체에서 특정 해커가 발생하지 않도록하고 싶습니다 (예 : 대신 TransferSpreadsheet 사용). 목표는 데이터를 가져 오는 데 동일한 접근 방식을 사용하는 것입니다. 작동하지 않는 비트는 무시하십시오.
또한 여기서 날짜가 아닌 값은 삭제하는 것이 적절하다는 점을 지적해야합니다. 텍스트로 가져 오기는 이상적으로 내가 피하고 싶습니다. 이후 모든 종류의 다른 오류가 체인 아래로 이어질 것이기 때문입니다.
EDIT : 2003 규정을 추가했습니다. 환경에 설치된 .Net 프레임 워크의 버전에 ACE.12.0 공급자가 포함되어 있지 않거나 포함되지 않는 것으로 나타납니다.
편집 2 : 요청에 따라 실행중인 SQL을 (약간 청소 한) 버전입니다. 그것은 정확한 쿼리 아니다주의,하지만 같은 스프레드 시트에서이 작업을 실행하면 같은 문제가 발생하십시오
SELECT
CStr(Nz([Notes], "")),
[ID],
[Date]
INTO
[;DATABASE=C:\DatabaseTarget.Mdb].[tblImport]
FROM
[Excel 8.0;Database=C:\ExcelSheet.xls].[sheet1$]
WHERE
[ID] IS NOT NULL
문제는 INTO
절을 복용하고 [Date]
의 값을 보면 알 수있다. 그 중 하나는 그 후도 오히려 문제 : 그것은 작동해야처럼 IsNull()
의 모양에 대한
SELECT
CStr(Nz([Notes], '')),
[ID],
CStr(Nz([Date],'')) As [Test1],
IsError([Date]) As [Test2],
IsDate([Date]) As [Test3],
IsNull([Date]) As [Test4],
IIf(True, 1, [Date]) As [Test5],
FROM
[Excel 8.0;Database=C:\ExcelSheet.xls].[sheet1$]
WHERE
[ID] IS NOT NULL
ACE에서도 제대로 작동 할 수 있지만 불행히도 Office 2003과 같이 JET가 붙어 있습니다. 미안합니다. IsNull()을 사용했는지 확신 할 수 없습니다. Nz를 직접 테스트하거나 실행합니다. 상황에 따라 약간의 차이가 있습니다. 일부 텍스트 데이터가 올바르게 해석되지만 일부는 올바르게 해석되지 않기 때문입니다. – tobriand
@tobriand 방금 Jet을 사용하여 코드를 테스트했으며 정확히 동일한 결과를 얻었습니다. (나는 나의 대답을 업데이트했다.) –
나는 그것을 몇 분 후에 시험해보고 그것을 고쳐 주는지 보게 될 것이다. IsNull에서 데이터를 래핑하지 않으면 #Num도 생성됩니다. 오류? – tobriand