Domanda

Sto lavorando su un prodotto legacy e ho un po 'di SQL in esecuzione tramite ADO, ad un database di Access con le tabelle collegate a SQL Server. Ricevo l'errore 'funzione non definita 'Round', quando eseguo il codice SQL, ma se prendo la query e correre direttamente in Access funziona benissimo . So che tutto sia corretto e che questo è un problema specifico della macchina in quanto questo è il codice di produzione, funziona su altre macchine ed è stato implementato con successo per molti clienti.

Non sono nemmeno sicuro da dove cominciare ad essere onesti. Sono in esecuzione le corrette (recenti) versioni di Jet / ADO / MDAC.

Qualsiasi aiuto sarebbe apprezzato.

Grazie in anticipo.

EDIT: Ovviamente, la SQL include la funzione di aggregazione 'Round'. Sono consapevole delle differenze tra Jet e SQL implementazioni. Questo problema è dovuto a qualche problema con un componente sulla mia macchina e NON con il codice. Lo SQL eseguito correttamente quando fatto attraverso MS Access 2007, ma non attraverso ADO.

È stato utile?

Soluzione

EDIT2: soluzione giusta dai commenti:

shahkalpesh: Se esegue bene attraverso Access, potrebbe essere che Access ha la DLL a sua disposizione, che ha la funzione Round. Qual è la stringa di connessione, si sta utilizzando?

Stimul8d: Non sono sicuro di come può essere qualsiasi cosa, in modo da fare con la stringa di connessione. Questo codice funziona su ogni altra macchina, senza modifiche; non solo sulla mia.

Andomar: Beh, questo è il tuo problema proprio lì, la macchina è farked up. È comunque possibile installare VB6 SP6 forse.

Stimul8d: Beh, SP6 riparato. Acclamazioni Anndomar, idea del perché SP6 fisso, ma lo ha fatto!

EDIT: Sulla base di tuo commento dopo questo newsgroup potrebbe essere la risposta:

  

Purtroppo, quando si esegue   query al di fuori di accesso (come voi   sono da VB), il tuo unico collegamento a   il database è attraverso il Jet   motore, che non sa nulla   su maggior parte delle funzioni VBA. Non c'è   modo per aggirare questo, altro che tornare   i dati per la vostra applicazione VB e   utilizzare le funzioni base dei dati lì.

E due post successivi:

  

ho risolto il problema. Aggiornato il mio VB   con il Service Pack 6 ... ci sono voluti   cura dei problemi.

Old risposta qui:

Prova FLOOR () al posto di ROUND ().

Per arrotondare qualcosa all'intero più vicino, si potrebbe:

declare @floatmyboat float
set @floatmyboat = 1.51
select floor(@floatmyboat+0.5)

P.S. Forse inviare l'errore esatto che si ottiene. Se si tratta di "La funzione rotonda richiede da 2 a 3 argomenti.", Questo significa che SQL Server è Borking sul ROUND ().

Altri suggerimenti

La funzione round () esiste in SQL Server pure.
L'unica differenza è:. In Access la precisione è un parametro opzionale, ma in SQL Server è necessario specificarlo

Quindi questo funziona solo in Access, ma non in SQL Server:

select round(Column) from Table

Questo funziona in Access e di SQL Server:

select round(Column,1) from Table
  

potrebbe essere che Access ha la DLL   a sua disposizione, che ha la rotonda   la funzione

ACE / Jet utilizza i servizi di condivisione di espressione con VBA. In termini generali, ACE / Jet supporta espressioni come tutte le funzioni VBA5 (distinti dai metodi) cui argomenti e restituire valori sono scalari tipi (ad esempio presenta array, senza oggetti). Il Round() espressione rientra in questa definizione e infatti è disponibile per ACE / Jet con la stessa semantica sua funzione equivalente VBA. Come chiunque abbia familiarità con il motore ACE / Jet dovrebbe sapere, però, la semantica possono differire dai equivalenti VBA per esempio ACE / Jet ANSI-92 query in modalità SQL

SELECT TYPENAME(ROUND(5, 1))

restituisce 'lungo', mentre VBA

?Typename(Round(5, 1))

restituisce 'Integer'.

In altre parole, <=> non era intenzione di essere il problema qui.

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