2011-01-19 3 views

답변

20

는 내가 아는 가장 좋은 기준은의이다 :

How To Use ADO with Excel Data from Visual Basic or VBA.

특히 중요한 것은 기존 열의 전체 데이터 형식이 mixed data types 일 때 결정되는 방법입니다. 제트 4.0 용 Microsoft OLE DB 공급자에 관하여

, 가장 관련성이 문서에서는이있다 :

말했다

ADO Provider Properties and Settings: Microsoft Jet 4.0 Provider Properties

, 엑셀-의 구체적 세부 사항을 더 이전 문서에 덮여있다.

Excel 및 SQL을 사용할 때 알아야 할 한 가지 중요한 잡았다 :

BUG: Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects (ADO)

사용할 수 있습니다 어떤 키워드/기능/절? 제트 4.0 SQL을 사용하여 관하여

,이 글은 내가 찾은 최고입니다 :

Intermediate Microsoft Jet 4.0 SQL

이론적으로 SQL section of the Access Help 관련해야하지만, 그것은 particularly low quality 및 Jet 4.0이다 특히 빈약 한 범위를 겪습니다.

다시, 모든 것이 Excel에서 직접 작동하지는 않습니다. 예를 들어, CREATE TABLE SQL DDL을 사용하여 새 워크 시트와 통합 문서를 만들 수 있지만 실제적으로 가능하지 않으므로 NOT NULL 가능 열을 만들 수 없습니다. 또한 Excel의 데이터 유형은 덜 세분화되어 있습니다 (예 : 대부분의 숫자 유형은 DOUBLE FLOAT으로 매핑됩니다.

SQL에서 사용할 수있는 식에서 Jet 4.0 식 서비스는 어떻게 든 VBA 식 서비스를 사용합니다. 대체로 Jet는 값을 포함하는 메서드가 아닌 모든 VBA 5.0 (VBA 6.0이 아닌 최신 버전) 함수를 사용할 수 있으며 반환 값은 간단한 내장 데이터 형식 (배열이 없거나 개체가없는 경우)의 단일 값을 반환합니다.). 제 생각에는 Microsoft가 Jet 4.0에서 지원하는 VBA 기능의 명확한 목록을 명시 적으로 게시하지 않았다고 말하는 것이 맞습니다.

How to configure Jet 4.0 to prevent unsafe functions from running in Access 2003

(목록은 부제목 ​​아래 표에 "사용 샌드 박스 모드 작업 : 그러나, 나는 다음과 같은 문서의 목록이 제트 4.0에서 사용 가능한 VBA 기능의 목록과 완벽하게 일치하는 일이 생각 Jet 4.0 서비스 팩 3 이상 "을 참조하십시오.)

일부 기능은 Jet 4.0에서 VBA와 다르게 동작합니다. 내 머리 꼭대기에서 나는 두 가지를 생각할 수 있습니다.IIF()은 Jet 4.0 (문서화되지 않은 AFAIK)의 바로 가기가 될 수 있습니다. VBA에서는 TRUEFALSE 조건이 모두 평가되며 Jet 4.0에서는 일치 조건 만 평가됩니다. CDEC() (캐스트는 DECIMAL입니다) 기능은 broken in Jet 4.0입니다.

날짜 형식의 상수는 어떻게 작성합니까? 즉, SQL에서 2011.01.20 (이 상수 값)을 표현하는 방법은 '2011-01-20'또는 # 2011-01-20 # 또는 다른 것을 사용합니까?

나는 이것을 '리터럴 값'으로 알고 있습니다.

VBA와 동일합니다 (즉, #m/d/yyyy#). 따라서 오늘 날짜는 #1/20/2011#이됩니다. 그러나 ISO 8601 날짜 형식과 작은 따옴표 (이식성)를 사용하고 항상 시간 필드를 포함하는 것이 좋습니다 (Jet 4.0에는 하나의 임시 데이터 형식이 있기 때문에 DATETIME). CDATE() 캐스트를 사용하여 지역 설정을 유지합니다. DATETIME 기능 예 오늘 날짜는 CDATE('2011-01-20 00:00:00')입니다.


[원래 "어떻게 유형 DATE의 열을 만들려면 어떻게해야합니까?"영업 의미 생각]

사용할 수 CREATE TABLE DDL 예를 들어, 제트 4.0 DATETIME의 데이터 유형을 명예 반면, 통합 문서를 Excel에서 편집 그러한 제약이 없다는 것을

CREATE TABLE [Excel 8.0;DATABASE=C:\MyNewWorkbook.xls].MyTable 
(
my_date_col DATETIME 
); 

참고 : 테이블 Range가 확장 및 비 시간적 데이터가 다음 데이터 유형을 추가 한 경우 ' Jet 4.0에서 'seen'가 결과로 변경 될 수 있습니다. 사용할 수있는 키워드/기능/조항


+0

날짜 형식의 쓰기 상수를 말하면 SQL에서 2011.01.20 (이 상수 값)을 나타내는 방법은 '2011-01-20'또는 # 2011-01-20을 사용하는 것입니다. #, 또는 다른 것? – deerchao

+0

# 2011-01-20 # – Juancentro

+0

감사합니다. 매우 포괄적 인 링크 목록입니다. 내가 추가 할 모든 것은 .xlsb 파일이 xlsm 또는 xls보다 나쁘게 보인다는 것입니다. 그리고 성가신 경우에는 데이터를 간접적으로 읽는 것이 좋습니다. 즉, 로컬 임시 폴더의 csv 파일에 데이터를 덤프하고 Jet Text ISAM을 사용하여 데이터를 읽는 것입니다. –

6

? YEAR, WEEKDAY, VarType, Val, UCase$, UCase, TypeName, TRIM$, TRIM, TIMEVALUE, TimeSerial, Timer, TIME$, TIME, TAN, SYD, Switch, String$, String, StrConv, StrComp, Str$, Str, Sqr, Space$, Space, SLN, SIN, Sgn, SECOND, RTrim$, RTrim,Round, Rnd, RIGHTB$, RIGHTB, RIGHT$, RIGHT, RGB, RATE, QBColor, PV, PPMT, PMT, Partition, Oct$, Oct, NPV, NPER, NOW, MONTH, MIRR, MINUTE, MIDB$, MIDB, MID$, MID, LTrim$, LTrim, LOG, LENB, LEN, LEFTB$, LEFTB, LEFT$, LEFT, LCase$, LCase, IsObject, IsNumeric, IsNull, ISERROR, IsEmpty, IsDate, IRR, IPMT, INT, InStr, IMEStatus, IIF, HOUR, Hex$, Hex, Fv, Format$, Format, Fix, EXP, Error$, Error, DDB, Day, DATEVALUE, DATESERIAL, DatePart, DateDiff, DATEADD, DATE$, Date, CVErr, CvDate, CVAR, CSTR, CSNG, COS, CLNG, CINT, CHRW$, CHRW, CHRB$, CHRB, CHR$, CHR, Choose, CDBL, CDATE, CCUR, CBYTE, CBOOL, ATN, ASCW, ASCB, ASC, Array, ABS

그들의 주장과 설명

이 모든 기능은 내 SQL에서 일하고 here

를 볼 수 있습니다 : 기능 목록에 대해서는

, 나는 파일 MSMDCB80.DLL에 다음과 같은 이름의 목록을 발견 쿼리, 그래서 이것은 125 개의 함수를 포괄적으로 나열한 것입니다.

+2

StackOverflow : 2008 년 이후 공급 업체의 게으름을 보완하기 – Filip

+0

SQL 쿼리에서'Array'를 사용할 수 없습니다. 'IIF'는 VBA의'IIf' (단락 가능)와 다르게 동작합니다. 목록에'CDEC'에 대한 언급이 없지만 SQL에 아무 것도 쓸 수 없습니다! – onedaywhen

+0

귀하의 목록이 내 답변에 링크 된 것과 동일하다고 생각합니다. https://support.microsoft.com/en-gb/kb/294698 – onedaywhen

관련 문제