Come eseguire una query per una colonna MS Access il cui nome ha un punto interrogativo, tramite ODBC?

StackOverflow https://stackoverflow.com/questions/1409610

  •  05-07-2019
  •  | 
  •  

Domanda

Ho un database MS Access (Access 2002, per la cronaca). Ha una colonna il cui nome contiene un punto interrogativo, ad esempio tabella " Utenti " con colonne " uid " e " isAdmin? " ;. Devo collegarmi a questo database tramite ODBC e fare una query per questa colonna, seguendo le seguenti linee:

select [uid], [isAdmin?] from Users order by [isAdmin?];

Come posso evitare il punto interrogativo nel nome della colonna, in modo che il driver ODBC di MS Access non pensi che sia un parametro di query? Questa query non utilizza alcun parametro, quindi va bene se li disabilito del tutto.

Alcune limitazioni:

  • Non riesco facilmente a cambiare i nomi delle colonne.
  • Non posso usare facilmente qualcosa di diverso da ODBC per connettermi, anche se questo è probabilmente il mio piano di fallback se non riesco a far funzionare ODBC.
  • Non posso semplicemente dire selezionare * da Utenti - continuerebbe a soffocare nell'ordine di (che è complicato nella query reale, quindi deve essere fatto in SQL).

Le cose che ho provato che non funzionano:

  • seleziona [uid], '[isAdmin?]' da Users; - questo rende la seconda colonna la stringa " [isAdmin?] "
  • seleziona [uid], ['isAdmin?'] da Users;
  • seleziona [uid], [isAdmin \?] da Users;
  • seleziona [uid], [isAdmin \?] {escape '\'} dagli utenti; - né altri caratteri di escape funzionano.
  • seleziona [uid], {[isAdmin?]} dagli utenti;

MODIFICA : avrei dovuto chiarire, non posso cambiare facilmente molto il database, tranne tramite ODBC (o ADO o DAO o altro, ma sarà un po 'complicato, e a quel punto posso semplicemente eseguire la query attraverso quelli).

È stato utile?

Soluzione

Un'altra opzione sarebbe quella di creare una vista della tabella Users e rinominare la colonna offensiva nella vista.

Altri suggerimenti

Potrebbe sembrare una soluzione subdola, ma sembra che non ti sia stato dato alcun aiuto ragionevole per risolvere il problema.

Hai accesso in scrittura alla struttura dell'MDB? E hai una copia di Access standalone?

In tal caso, crea un nuovo file MDB vuoto (lo eliminerai al termine). Crea una tabella collegata dal nuovo MDB e usala per scrivere una QueryDef salvata che alias il campo. Quindi usa DoCmd.TransferDatabase per esportarlo dal tuo MDB temporaneo in quello reale.

Ciò presuppone che tu abbia accesso al file system SMB all'MDB a cui accedi dalla tua applicazione tramite ODBC.

L'altra alternativa, poiché ottenere una vista con aliasing appropriato nell'MDB è un affare one-shot, sarebbe quella di farlo con OLEDB, supponendo che tu abbia accesso OLEDB all'MDB.

Vorrei utilizzare passare le query e rinominare i campi nella query. Crea il tuo passaggio attraverso qualcosa come

 select [uid], [isAdmin?] AS ISADMIN from Users order by [isAdmin?]

(o qualunque cosa sia nell'SQL nativo),
quindi in Access, fai semplicemente riferimento a quella query

select Uid, ISADMIN from qpstUsers

Ho affrontato una specie di problemi identici. (utilizzando il driver MS Access da SQLdeveloper).

ACCESSO SQL non piace '"' come in NON MI PIACE " * val * " poi ho sostituito con NON MI PIACE '* val *'

Prova questo " IsAdmin? "

Le doppie virgolette hanno funzionato nella mia situazione in cui qualcuno ha chiamato la colonna: Lead #

La mia clausola where è poi diventata dove " Lead # " = '123'


Lo riprendo ...

dove ([Lead #] = 123)

Questo è ciò che mi ha salvato. Notare le parentesi attorno alla clausola e la mancanza di virgolette singole attorno al mio parametro 123. Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top