Condividi tramite

Instr: problema sintassi funzione predefinita di testo (Access 2016)

Anonimo
2019-08-04T12:38:41+00:00

Ciao a tutti,

se inserisco il valore iniziale (e/o il valore di confronto), dal quale cominciare a cercare, la funzione mi dà errore (sembra errore di sintassi).

Il caso concreto:

  • InStr(1, [Studenti].[E-mail],":",1)    così non funziona
  • InStr([Studenti].[E-mail],":",1)    non funziona
  • InStr(1,[Studenti].[E-mail],":")    non funziona
  • InStr([Studenti].[E-mail],":")        solo così funziona

ll generatore di espressioni di access mi dice che la sintassi della funzione Instr è:

InStr(«inizio», «stringa», «stringacorrisp», «confronto») .

E nella guida https://support.office.com/it-it/article/Funzione-InStr-85d3392c-3b1c-4232-bb18-77cd0cb8a55b leggo:

InStr ([inizio, ] stringa1, stringa2 [confronto ] )

Come detto, il problema è che la funzione mi dà errore se inserisco il primo argomento e/o il confronto.

Invece, se evito di inserirli, la funzione dà il risultato corretto.

Dunque qual è la sintassi corretta?

Grazie

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-08-06T05:37:15+00:00

ciao Paolo,

la virgola come separatore si usa in Sql, nella griglia di struttura direi il punto e virgola.

Facciamo che ci dici quale problema hai per il quale hai pensato di usare la funzione instrinseca instr e vediamo di trattarlo nella sua interezza?

Ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-08-06T17:52:59+00:00

    Ciao Sandro,

    ti ringrazio molto per il tempo che dedichi a tutti noi della community, per i piccoli e grandi problemi.

    Il mio problema era solo quello della sintassi corretta della funzione InStr, nell'ambito di un percorso di apprendimento dell'uso di Access che parte da zero, secondo una modalità "fare per imparare" (sto seguendo un libro per newbies).

    E tu mi hai aiutato molto: l'ultima tua osservazione è stata determinante "la virgola come separatore si usa in Sql, nella griglia di struttura direi il punto e virgola".

    Ho provato ad utilizzare il database su un pc diverso e le virgole  (che usavo sempre e con successo nel mio database) sono divenute (=automaticamente convertite) punti e virgola (;).

    Allora ho consultato le "impostazioni internazionali" (area geografica, personalizza formato, separatore di elenco): su quel pc c'è appunto il ";" come separatore di elenco.

    Così ora ho consultato il valore di separatore di elenco sul pc che uso a casa: era ",". Così l'ho cambiato in ";" e ora la formula Insr funziona come da manuale.

    Non so ancora cosa ne sarà delle altre formule che avevano la ",": immagino siano state tutte cambiate in automatico.

    Comunque (per ora) direi che il problema è risolto.

    Grazie sempre grazie

    Paolo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-08-05T20:51:15+00:00

    Ciao Sandro,

    ti ringrazio della risposta, già preziosa perché mi ha dato un'idea di come controllare le formule: usando una query! Per me che non so nulla di Access, è una bella idea.

    Infatti la formula con InStr devo inserirla in una macro incorporata in una tabella: sto facendo esercizi per imparare. E Access 2016 in tutti i casi (all'interno della macro) - casi diversi da quello in cui ometto i parametri - mi restituisce il simbolo di attenzione: impossibile elaborare l'espressione.

    Ho fatto uno snapshot di 3 casi utilizzando una query: solo con primo parametro (errore sintassi), con entrambi i parametri (errore sintassi), solo il secondo parametro (#Errore nel campo).

    Come detto, l'unico caso in cui Access 2016 mi restituisce la posizione del carattere ":" (due punti), cercato nel campo indirizzo e-mail in formato collegamento ipertestuale, è quello senza parametri.

    https://1drv.ms/b/s!AlBSt1K5dCSRiQApR4rcQeO2RqLT

    https://1drv.ms/b/s!AlBSt1K5dCSRiQGsPlrFcm\_wa3VD invece lo snapshot della macro incorporata.

    Scusa ma sono alle prime armi e quando scrivi in visual basic non capisco.

    Grazie ancora

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-08-05T09:22:57+00:00

    ciao Paolo,

    in effetti non e' molto chiaro...

    la pagina del supporto MS definisce solamente il primo e l'ultimo parametro come opzionali, mentre l'intellisense vba li definisce *tutti* opzionali :

    La cosa ulteriormente strana e' che il parametro opzionale in VBA nella funzioni UDF vanno sempre posti alla fine, per intenderci :

    Option Compare Database

    Option Explicit

    Public Function ftc(ByVal num2 As String, Optional ByVal num As Integer) As Integer

    End Function

    questo infatti genera un errore :

    da me comunque con A16, testando quando descrivi ottengo un errore solamente nel caso in cui il secondo paramentro non e' specificato mentre il primo si :

    SELECT TPersona2.idpersona,

                TPersona2.email,

               InStr(1,[tpersona2].[Email],":",1) AS primo,

               InStr([tpersona2].[Email],":",1) AS secondo,

               InStr(1,[tpersona2].[Email],":") AS terzo,

               InStr([tpersona2].[email],":") AS quarto

    FROM

                TPersona2;

    per quanto alle funzioni intrinseche quindi direi che se ci sono parametri opzionali posti all'inizio e alla fine, se decidi di gestire l'ultimo devi gioco forza gestire anche il primo.

    A me pare pero' che tra esse instr sia il vero ed unico caso :-)

    HTH.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento