Domanda

Ho progettato una query in SQL View con MS Access:

select floor(num1) from t1;

Quando l'eseguo, ottengo "non definito piano funzione".

ricevo errori simili per Ceil, Mod, Power, Sign, Sqrt, Trunc, e le funzioni di initcap.

Lo sintassi SQL del motore di database di Access hanno funzioni equivalenti?

È stato utile?

Soluzione

Sostituire Floor () con Int (). Ho imparato questo con la ricerca nei file di aiuto di accesso, in questo caso, colpendo F1 mentre in Progettazione query, e la ricerca di "funzioni". Questo mi ha portato a un argomento della Guida a confronto le funzioni di VBA e T-SQL.

Probabilmente si dovrebbe avere uno sguardo alla motore di database di Access SQL di riferimento . Non riesco a trovare un buon riferimento on-line per le funzioni che sono supportate attraverso i servizi Jet / ACE e di espressione di accesso. Per qualche ragione sconosciuta, la Guida in linea di accesso non ha incluso Jet / ACE espressioni dal Jet 3.0 e questa risorsa età è stato finalmente rimosso da MSDN un anno o due anni fa: (

Tieni presente che il servizio di espressione Jet / ACE per uso esterno Access supporta un sottoinsieme molto più piccolo di funzioni che è possibile utilizzare il servizio di espressione di accesso durante l'esecuzione di SQL all'interno Access 2007. In generale, le funzioni VBA5 (da non confondersi metodi) che comportano tipi di dati semplici (come distinto da, per esempio, array o oggetti) sono supportati al di fuori dell'interfaccia utente di accesso; per una lista approssimativa dei nomi delle funzioni vedere le 'operazioni Usa Sandbox mode con Jet 4.0 Service Pack 3 e versioni successive' sezione questo articolo MSDN .

Inoltre, il riferimento funzioni nella guida VBE dovrebbe essere un punto di partenza.

I file di aiuto non sono perfetti, ma un po 'di ricerca dovrebbe ottenere quello che ti serve.

Altri suggerimenti

Public Function Floor(ByVal x As Double) As Double
'Be Because VBA does not have a Floor function.
'Works for positive numbers
'Turns 3.9 -> 3
'Note: Round(3.9) = 4

    Dim s As String, dPos As Integer
    s = CStr(x)
    dPos = InStr(s, ".")
    Floor = CLng(Left(s, dPos - 1))
End Function

Come accennato, Piano non è disponibile l'accesso, è necessario utilizzare int () come alternativa. Se ti ostini a usare pavimento, si può sempre creare una funzione di modulo VBA nel file mdb simile al di sotto, ma che è probabilmente eccessivo.

Public Function floor(dblIn As Double, dec As Integer) As Double
  decPosition = InStr(Str(dblIn), ".")
  x = Left(dblIn, decPosition + dec - 1)
  floor = x
End Function

Simile alle altre operazioni matematiche che hai descritto sopra è possibile creare funzioni aggiuntive per creare questo set di funzionalità.

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