2014-12-04 7 views
6

Ho un database back-end di MS Access 2010 front-end/SQL Server 2012, con un numero di campi data in diverse tabelle. A volte ho bisogno di memorizzare l'ora, quindi ho usato i tipi di dati datetime o smalldatetime. Tuttavia alcuni campi devono solo memorizzare la data, quindi ho usato il tipo di dati Data.Sql Il tipo di data del server viene visualizzato come campo di testo in MS Access

Il mio problema è che in MS Access, la mia tabella collegata a ODBC mostra i campi del tipo di dati Data come Testo. Questo porta quindi a problemi con alcune date memorizzate nel formato aaaa-gg-mm e altre nel formato aaaa-mm-gg.

È un bug? Devo usare smalldatetime?

Grazie per qualsiasi tipo di assistenza, Jim

+0

Solo per chiarire questo problema di formattazione dello schermo poiché il server SQL memorizza una data come [numero intero 3 byte] (http://msdn.microsoft.com/en-us/library/bb630352%28v=sql.110%29.aspx). Il formato della data non è memorizzato. –

+0

Ciao Conrad, è un problema di formattazione, ma va oltre. Ad esempio, ho una query di accesso che dovrebbe escludere qualsiasi record in cui [datefield]> Date(), ma poiché [datefield] viene caricato come una stringa di testo, il record viene incluso qualunque. Inoltre, se osservo il progetto di tabella della tabella collegata in Access, mostra il campo come un campo di testo, non uno di data. – BiigJiim

+0

Si potrebbe voler provare 'CDate ([datefield])> Date()' o provare a usare un 'DateTime' invece di un' Date' e usare una maschera di input. –

risposta

4

avuto lo stesso problema io stesso il collegamento Access 2007 e SQL Server 2008.

Vedi this question, se si guarda al commento di Albert D. Kallal alla prima risposta, ci dice che il problema è con un driver obsoleto che collega il front-end al back-end.

Se non si è in grado di scegliere un driver aggiornato (e tenere presente che anche se è possibile, altri utenti del database su macchine client diverse potrebbero non essere in grado) la soluzione alternativa è quella di utilizzare tipo di dati datetime in ogni caso.

+0

Grazie - questo è quello che sospettavo, che era un problema di driver. Piuttosto che scherzare con i nuovi driver (che il client non può avere sulle macchine di produzione) ho cambiato tutto in datetime. Sembra solo un po 'una soluzione spazzatura per un problema che non dovrebbe esistere. P.S. Ho provato a valutare la tua risposta, ma apparentemente non ho feedback sufficienti! – BiigJiim

+0

@BiigJiim: non è necessario modificare la risposta, basta contrassegnare come "la" risposta. –

0

Solo per esporre sul commento data dal @BiigJiim ho effettivamente avuto il driver Native Client 11.0 già installato, ma come stavo creando connessioni tavolo DSN ho dovuto cambiare la mia stringa di connessione formalmente a: Driver={SQL Server Native Client 11.0};