Passaggio di valori con openargs

di il
7 risposte

Passaggio di valori con openargs

Ho una piccola curiosità.

Premetto che il problema è solo ipotetico e nel 99% dei casi si risolve passando tramite OpenArgs, il valore ID del record.
Però immaginiamo di avere un' eccezione, dove bisogna passare obbligatoriamente il testo di un oggetto, dove a monte non sappiamo come verrà scritto e che potrebbe generare un eccezione che causerebbe un errore di valore non corrispondente o di errore di sintassi.

Un eccezione del tipo:
Openargs= "L'amicizia."
Ora, come si può evitare che l'apostrofo venga interpretato dal VBA come un marcatore di stringa, senza dover ricorrere alla manipolazione delle stringhe per controllare se ci sono caratteri speciali riservati e poi ricostruire la stringa nella sintassi esatta?
Esiste un modo alternativo, la manipolazione delle stringhe è l'unica soluzione, oppure non ho abbastanza conoscenza dell'argomento?
A mia discolpa premetto che ho sempre avuto problemi nella costruzione di stringhe e query tramite VBA. (Però di solito al settimo tentativo ci riesco )

7 Risposte

  • Re: Passaggio di valori con openargs

    Io nn ho capito quale sia la tua esigenza
    perchè l'apostrofo dovrebbe essere interpretato come un "marcatore di stringa"?
    quando si passa in openargs un parametro (1 o +) si sa se ti arriva (o meglio se ci si aspetta) una stringa o un numero...
    chiaro che se l'openargs corrisponde ad un testo imputato dall'utilizzatore (simil inputbox) allora è chiaro che può arrivare di ogni ... ma è cmq una stringa
    spiega meglio please
  • Re: Passaggio di valori con openargs

    Premesso che con OpenArgs puoi passare anche un Pointer ad una struttura dati in Memoria, più tipico del C o C++ e cosa che non tanti fanno in VBA.
    Esempio crei una Collection, ci metti dentro 2 TextBox della Maschera(A) di partenza, apri la Maschera(B) in modalità acDialog e passando tramite OpenArgs il Pointer alla Collection.

    Nella Maschera(B) recuperi il Pointer e di conseguenza l'istanza dell'oggetto, quando modifichi il contenuto dell'Item della collection automaticamente stai agendo sull'oggetto iniziale che è visto ByRef... quindi volendo si possono fare cose complicate...

    Trovi un demo chiaro quì:


    Detto questo basta raddoppiare gli apici con chr(34) inizio fine per ovviare, se non ho mal interpretato...
    str=chr(34) & "L'amicizia." & chr(34)
  • Re: Passaggio di valori con openargs

    fratac ha scritto:


    Ora, come si può evitare che l'apostrofo venga interpretato dal VBA come un marcatore di stringa, senza dover ricorrere alla manipolazione delle stringhe per controllare se ci sono caratteri speciali riservati e poi ricostruire la stringa nella sintassi esatta?
    Ma l'apostrofo è delimitatore solo in SQL, non in VBA. Pertanto, se ti arriva una stringa tramite OpenArgs, la passi ad una eventuale query tramite parametro. Non si dovrebbe usare la concatenazione per costruire query per mille motivi.
  • Re: Passaggio di valori con openargs

    @Alex ha scritto:


    Premesso che con OpenArgs puoi passare anche un Pointer ad una struttura dati in Memoria, più tipico del C o C++ e cosa che non tanti fanno in VBA.
    Esempio crei una Collection, ci metti dentro 2 TextBox della Maschera(A) di partenza, apri la Maschera(B) in modalità acDialog e passando tramite OpenArgs il Pointer alla Collection.

    Nella Maschera(B) recuperi il Pointer e di conseguenza l'istanza dell'oggetto, quando modifichi il contenuto dell'Item della collection automaticamente stai agendo sull'oggetto iniziale che è visto ByRef... quindi volendo si possono fare cose complicate...

    Trovi un demo chiaro quì:


    Detto questo basta raddoppiare gli apici con chr(34) inizio fine per ovviare, se non ho mal interpretato...
    str=chr(34) & "L'amicizia." & chr(34)
    Grazie.
    Immaginavo infatti che fosse semplicemente un mio errore nella scrittura della stringa.
    Io scrivevo gli apici in modo esplicito, invece di usare l'ascii.
    In questo modo.
    = "'" & "l'amicizia" & "'" 
    Per quanto riguarda invece il passaggio dei Pointer, non ne ero a conoscenza.
    Me lo dovrò studiare.
    Da una banale domanda mi hai fornito informazioni, che non avrei mai modo di conoscere.
    Grazie.
  • Re: Passaggio di valori con openargs

    Fratac ... guarda che il carattere 34 è il doppio apice non il singolo apice. Non è la stessa cosa
  • Re: Passaggio di valori con openargs

    oregon ha scritto:


    Fratac ... guarda che il carattere 34 è il doppio apice non il singolo apice. Non è la stessa cosa
    Si, lo so che il 34 è il doppio apice, ma costruendo la stringa con il singolo apice, e con l'apostrofo risultava una stringa con 3 marcatori di stringa e non quattro.
    In realtà il dato nel database originale è molto più complesso e il valore openarg è aggiunto a variabili ed espressioni per poi il tutto essere passato al filtro.
    Il mio era solo un esempio veloce per far capire il problema.
    Come detto errore nella costruzione della stringa.
  • Re: Passaggio di valori con openargs

    Non è indispensabile il chr(34) ma, come ti ha detto Antonio, basta raddoppiare i Doppi Apici...
    """ & TuaStringa & """
Devi accedere o registrarti per scrivere nel forum
7 risposte