2011-01-19 11 views

risposta

20

Quando si utilizza Excel come origine dati Jet 4.0, il miglior riferimento che conosco è:

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

Di particolare importanza è il modo in cui il tipo di dati complessivo di una colonna esistente viene determinato quando contiene mixed data types.

Per quanto riguarda il provider Microsoft OLE DB per Jet 4.0, l'articolo più rilevante è questo:

ADO Provider Properties and Settings: Microsoft Jet 4.0 Provider Properties

Detto questo, dettaglio Excel-specifico è meglio trattato nel precedente articolo.

Un Gotcha importante che si dovrebbe essere a conoscenza di quando si utilizzano Excel e SQL:

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

quali parole chiave/funzioni/clausole sono disponibili?

Per quanto riguarda utilizzando Jet 4.0 SQL, questo articolo è il migliore che abbia mai trovato:

Intermediate Microsoft Jet 4.0 SQL

In teoria, il SQL section of the Access Help dovrebbe essere rilevante, ma è di un particularly low quality e Jet 4.0 soffre specificamente di scarsa copertura.

Ancora, non tutto funzionerà direttamente in Excel. Ad esempio, sebbene sia possibile utilizzare DDL SQL CREATE TABLE per creare un nuovo foglio di lavoro e una cartella di lavoro, non è possibile creare una colonna valida NOT NULL perché non è fisicamente possibile. Inoltre, i tipi di dati di Excel come meno granulari, ad es. la maggior parte dei tipi numerici mappano a DOUBLE FLOAT.

Per quanto riguarda le espressioni che possono essere utilizzate in SQL, il servizio di espressione Jet 4.0 utilizza in qualche modo i servizi di espressione VBA. In generale, Jet può utilizzare qualsiasi funzione VBA 5.0 (non la versione più recente, essendo VBA 6.0) che non è un metodo che invola i valori e restituisce restituisce un singolo valore, solo di tipi di dati intrinseci semplici (senza matrici, senza oggetti, ecc.). Penso di essere corretto nel dire che Microsoft non ha mai pubblicato esplicitamente un elenco definitivo delle funzioni VBA supportate da Jet 4.0. Tuttavia, credo che una lista nel seguente articolo coincide perfettamente con l'elenco delle funzioni VBA che utilizzabile in Jet 4.0:

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

(l'elenco è in una tabella sotto la voce "Operazioni Utilizzare la modalità Sandbox con Jet 4.0 Service Pack 3 e versioni successive ".)

Si noti che alcune funzioni si comportano in modo diverso in Jet 4.0 rispetto a VBA. In cima alla mia testa, posso pensare a due.IIF() può eseguire il collegamento in Jet 4.0 (non documentato, AFAIK): in VBA, vengono valutate entrambe le condizioni TRUE e FALSE, in Jet 4.0 viene valutata solo la condizione corrispondente. CDEC() (cast per DECIMAL) la funzione è broken in Jet 4.0.

come si scrivono le costanti di tipo data? Voglio dire, il modo di esprimere 2011.01.20 (questo valore costante) in SQL, ad esempio, io uso "2011-01-20" o # 2011-01-20 # o qualcos'altro?

Lo so come un "valore letterale".

Questo è lo stesso di VBA vale a dire #m/d/yyyy#, quindi la data di oggi sarebbe #1/20/2011#. Tuttavia, preferisco usare il formato data ISO 8601 e le virgolette singole (per la portabilità) e includere sempre il campo orario (perché Jet 4.0 ha un solo tipo di dati temporali, essendo DATETIME) e, per garantire che le impostazioni regionali siano rispettate, utilizzare il cast CDATE()DATETIME es la data odierna sarebbe CDATE('2011-01-20 00:00:00').


[Originariamente pensare il PO voleva dire: "Come faccio a creare una colonna di tipo DATE?"]

è possibile utilizzare CREATE TABLE DDL per esempio

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

notare che, mentre Jet 4.0 onorerà il tipo di dati di DATETIME, non esiste tale vincolo quando la cartella di lavoro viene modificato in Excel: se la tabella Range è esteso ei dati non-temporali ha aggiunto poi il tipo di dati ' visto 'da Jet 4.0 potrebbe cambiare di conseguenza.


+0

Dicendo costanti di scrittura di tipo data, intendo, il modo per esprimere 2011.01.20 (questo valore costante) in SQL, ad esempio, utilizzo '2011-01-20' o # 2011-01-20 #, o qualcos'altro? – deerchao

+0

Usa # 2011-01-20 # – Juancentro

+0

Grazie, questa è una lista di link molto completa. Tutto quello che vorrei aggiungere è che i file .xlsb sembrano essere peggio di xlsm o xls; e un workflow affidabile (se ingombrante) consiste nel leggere indirettamente i dati: eseguire il dump dei dati in file csv in una cartella temporanea locale e leggerli utilizzando l'ISAM di Jet Text. –

6

quali parole chiave/funzioni/clausole sono disponibili?

Per quanto riguarda l'elenco delle funzioni, ho trovato la seguente lista i nomi nel file MSMDCB80.DLL:

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

i loro argomenti e descrizione potrebbe essere trovato here

Ogni funzione sta lavorando nel mio SQL domande, quindi immagino, questa è una lista completa di 125 funzioni.

+2

StackOverflow: compensazione per la pigrizia dei venditori dal 2008 – Filip

+0

Impossibile ottenere 'Array' per lavorare in una query SQL. 'IIF' si comporta in modo diverso da' IIf' di VBA (in grado di cortocircuitare). Nessuna menzione di 'CDEC' nella tua lista ma poi non fa nulla di utile in SQL comunque! – onedaywhen

+0

Penso che la tua lista sia la stessa a cui mi collego nella mia risposta: https://support.microsoft.com/en-gb/kb/294698 – onedaywhen

Problemi correlati