Problemi con stringa strSql

di il
15 risposte

Problemi con stringa strSql

Buongiorno,
ho un problema, non riesco a passare al comando strSql la stringa U/010101/001 come campo testo. Quando lancio il comando mi esce una maschera chiedendo di immettere valore parametro U
Ringrazio in anticipo chi riuscirà a darmi una dritta.

'Inserisci riga protocollo
    Dim strSQL As String
    strSQL = "INSERT INTO dbo_tbl_protin_test (ID, [CODGEN]) VALUES ( 80000" & ",U/010101/001" & " )"
    DoCmd.RunSQL strSQL
End Sub

15 Risposte

  • Re: Problemi con stringa strSql

    Dato che è una stringa va tra singoli apici

    VALUES ( 80000, 'U/010101/001')"
  • Re: Problemi con stringa strSql

    Direi che dovresti ripassare la concatenazione di stringhe
  • Re: Problemi con stringa strSql

    Direi che dovresti

    EVITARE COME LA PESTE
    PENA IL TAGLIO DI QUELLO CHE TI E' PIU' CARO

    il passaggio parametri come concatenazione di stringhe ma usare gli statement con 'parametrici'

    (rappresentati da '?')
  • Re: Problemi con stringa strSql

  • Re: Problemi con stringa strSql

    migliorabile ha scritto:


    EVITARE COME LA PESTE...il passaggio parametri come concatenazione di stringhe ma usare gli statement con 'parametrici'
    (penso sia per il pericolo di SQL injection)
    Questa indicazione mal si concilia con DAO, se non con un forte uso di query parametriche, quelle veramente parametriche, quelle che in SQL iniziano con PARAMETERS e il cui funzionamento deve essere ben gestito da codice e interfaccia utente.
    Altrimenti si deve passare ad ADO ma entriamo in un territorio a me sconosciuto.
  • Re: Problemi con stringa strSql

    Ti ringrazio per i consigli, nella mia poca esperienza, sto testando questo codice di SQL injection su varie tabelle test, e a parte la stringa in questione, le insert sembrano andare tutte a buon fine senza problemi. Spero continui così. Grazie ancora
  • Re: Problemi con stringa strSql

    Davy ha scritto:


    ...sto testando questo codice di SQL injection ...
    No, hai capito male, la SQL injection è un tipo di "attacco" che sfruttando il sistema di aggiungere "parti variabili" ad una query lasciate alla libertà dell'utente possono creare danni anche notevoli.
    Quello che stai facendo è la concatenazione di stringhe che contengono anche "parametri" (virgolette non casuali, non sono parametri in senso proprio, come indicato sopra). Di per sè, se l'operazione viene fatta con particolare attenzione, non crea problemi, però appunto bisogna usare molta attenzione, in particolare nelle query d'azione, ma non solo.
    Quanto già suggerito da Oregon, cioè racchiudere la stringa da due apici singoli, basta e avanza per il caso specifico.

    In generale, in VBA, se all'interno di una stringa vuoi inserire il doppio apice devi ricordardi di raddoppiarlo affinché venga considerato parte della stringa e non come delimitatore della stringa stessa. Un esempio dovrebbe chiarire
    Dim strMiaStringa As String
    'Voglio ottenere questa stringa: A me piace scrivere "tutto" tra virgolette
    strMiaStringa = "A me piace scrivere ""tutto"" tra virgolette"
    Debug.Print strMiaStringa
    Questa è la versione più semplice. Pensa ad esempio ad una variabile che contenga la stringa "tutto" e che voglia usare quella per costruire la stessa stringa finale
    Dim strMiaStringa As String
    Dim strTutto as String
    'Voglio ottenere questa stringa: A me piace scrivere "tutto" tra virgolette
    strTutto = "tutto"
    strMiaStringa = "A me piace scrivere """ & strTutto & """ tra virgolette"
    Debug.Print = strMiaStringa
    
    Perché ci sono 3 doppiapici consecutivi? i primi due sono un doppioapice raddoppiato, per indicare che il doppioapice (1 volta sola, ovviamente) fa parte del contenuto della stringa e il terzo chiude la stringa
    Nella finestra immediata vedi il contenuto di strMiaStringa, con il doppioapice prima e dopo la parola tutto.
    Esempio esasperato che puoi incrociare
    Dim strDoppioApice As String
    strDoppioApice = """"
    Debug.Print strDoppioApice
    
    Nella finestra immediata apparirà un doppioapice e basta, nonostante nel codice ce ne siano ben 4 consecutivi.
    Spiegazione: il primo e l'ultimo servono a delimitare una stringa su VBA, i due centrali sono il modo con cui in VBA si fa capire che si vuole mettere un doppioapice in una stringa.
    Questo fa parte delle conoscenze che uno deve avere radicate per poter gestire le stringhe in VBA. Niente di impossibile, solo un po' di tempo, alcuni errori all'inizio ma poi con il Debug.Print di sicurezza, perché non si sa mai, se ne acquisisce padronanza e via!
    Da non sottovalultare l'uso dell'equivalente codice ASCII da usare con Chr$: il doppio apice è Chr$(34)
    Con quello l'ultimo esempio sarebbe di una banalità disarmante
    Dim strDoppioApice As String
    strDoppioApice = Chr$(34)
    Debug.Print strDoppioApice
    mentre gli altri due diventerebbero rispettivamente
    'Primo esempio, con Chr$(34)
    strMiaStringa = "A me piace scrivere " & Chr$(34) & "tutto" & Chr$(34) & " tra virgolette"
    'Secondo esempio
    strMiaStringa = "A me piace scrivere " & Chr$(34) & strTutto & Chr$(34) & " tra virgolette"
    Come vedi a volte aiuta, a volte complica. Dipende dal caso specifico.
  • Re: Problemi con stringa strSql

    Phil gli hai fatto un corso completo
  • Re: Problemi con stringa strSql

    Non ho capito perché l'uso dei PARAMTERS mal si concilia con DAO...?
    BOH...

    Mi chiedo invece perché, dal momento che usa SQLSERVER, non scriva una SP server side e la lanci con una query di tipo Pass Trough... che è decisamente meglio in questi casi di ACTIONS e non si deve preoccupare di apici o altro...
  • Re: Problemi con stringa strSql

    @Alex ha scritto:


    ...
    Mi chiedo invece perché, dal momento che usa SQLSERVER, non scriva una SP server side e la lanci con una query di tipo Pass Trough... che è decisamente meglio in questi casi di ACTIONS e non si deve preoccupare di apici o altro...
    se usa SQLSERVER come banca dati sono d'accordo ... ma da dove l'hai evinto?! non trovo traccia che lui l'abbia scritto da qualche parte, ma forse sono cieco (mia moglie dice sempre che se non mi corrono addosso le cose io nn le trovo ehehe)
  • Re: Problemi con stringa strSql

    Muttley io leggo molto attentamente i 3d ed il primo post non può sfuggire il nome della Tabella oggetto della INSERT che riporta [dbo_....] tipico del Link di tabelle da SQLSEVER...

    Che ne dici...? Sono stato abbastanza attento oppure no...?

    P.s. discorso a prescindere valido con qualsivoglia RDBMS SERVER, e quello di certo non è JET
  • Re: Problemi con stringa strSql

    @Alex ... che dire... e pensare che avevo cercato in lungo ed in largo traccia di qualcosa che mi indicasse riferimenti ad un RDBMS ehehe evidentemente mia moglie ha ragione... maledizione!
    e dire che era lì ... proprio sotto gli occhi!

    cmq non avevo dubbi che avessi ragione ed il mio tono era assolutamente scherzoso
  • Re: Problemi con stringa strSql

    muttley005 ha scritto:


    ...ma da dove l'hai evinto?! ...
    Lui ha evinto, tu hai eperso. Non c'è sfida.
  • Re: Problemi con stringa strSql

    Philcattivocarattere ha scritto:


    muttley005 ha scritto:


    ...ma da dove l'hai evinto?! ...
    Lui ha evinto, tu hai eperso. Non c'è sfida.
    ahahaha top questa
Devi accedere o registrarti per scrivere nel forum
15 risposte