Access, SQL Server e i campi #Eliminato
Storie di vita vissuta. Anzi: di tempo perso a cercare di capire perché qualcosa non sta funzionando come dovrebbe, e lo sta facendo in modo assai strano.
Quando si usa un database SQL Server, uno dei modi più rapidi per visualizzare o modificare i record durante lo sviluppo (ma anche dopo, eh ;-) è creare al volo una connessione ODBC al database e creare in un database di Access una serie di collegamenti alle tabelle del server.
Ogni tanto però alcune di queste tabelle (solo alcune!) presentano nei loro campi, al posto dei valori reali, una serie infinita di label #Eliminato. La label #Eliminato viene usata di solito per indicare che il record non c’è più, ma nella visualizzazione di Access ancora non è stata rimossa la riga: ma in questo caso basta il classico F5 (Refresh) e la visualizzazione torna ad essere corretta.
Se questa serie di #Eliminato proprio non vuole sparire, nemmeno cancellando il collegamento alla tabella e ricreandolo da zero, molto probabilmente è perché le tabelle su SQL Server contengono dei tipi di dati che il motore Jet non riesce a gestire. Ad esempio bigint, un tipo di dati numerico per numeri *molto* grandi (2^63, con segno), che in Access non è previsto (ci si deve “accontentare” del corrispondente degli int, ovvero 2^31, con segno). Per risolvere il problema è purtroppo necessario (sempre che sia possibile) modificare la struttura della tabella, sostituendo i tipi di dati non supportati coi loro corrispettivi Jet-friendly.
Link utili:
- Migliorare ODBC DataType mapping con Jet 4.0
Informazioni sulla corrispondenza tra i tipi di dato previsti da ODBC e quelli supportati da Jet 4.0. - Int, bigint, smallint e tinyint (Transact-SQL)
Le differenze tra i tipi numerici disponibili in SQL Server.