Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129

    [VB6] - Problema con gli apostrofi

    Ciao a tutti

    Ho un problema un pochino rognoso con la gestione degli apostrofi. Nel senso che se metto un testo apostrofato in una textbox e provo a fare un salvataggio mi viene il messaggio di errore:

    Run-Time error '-2147217900 (80040e14)':
    [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi (operatore mancante)
    nell'espressione della query <nome campo> = '<testo apostrofato>"


    il debug si ferma all'ultima riga del codice sottostante (ho messo l'asterisco vicino nel punto esatto dove si ferma)

    Dim sSQL As String
    Dim rsOrdine As New ADODB.Recordset
    '-- faccio la select estraendo nome del cliente e giornale sSQL = "Select * from TabellaGiornali Where Titolo = '" & Form22.Text1.Text & "'"
    '-- apro la connessione
    rsOrdine.Open sSQL, Adodc1.ConnectionString (*)

    come è possibile risolvere questo problema?

    Ciao e Grazie
    Giuseppe

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    23
    Dovresti usare una funzione che applicata a una stringa ne duplica gli apici in essa contenuta.
    Poi la applichi alla TextBox nel costruire la stringa sql.
    codice:
       sSQL = "Select * from TabellaGiornali Where " _
            & "Titolo = '" & DuplicaApice(Form22.Text1.Text) & "'"
    Io uso questa funzione che mi avevano passato, puoi anche migliorarla:
    codice:
    Public Function DuplicaApice(ByVal stringa As String) As String
       
       Dim Lun_str As Integer
       Dim k0 As Long
       Dim k1 As Integer
       Dim car As String
       Dim strbuff As String
    
       If IsNull(stringa) Then
          EliminaApice = ""
       Else
    
          k0 = InStr(stringa, Chr$(39))
          If k0 > 0 Then
             Lun_str = Len(stringa)         
             strbuff = Mid(stringa, 1, k0 - 1)
             For k1 = k0 To Lun_str
                 car = Mid(stringa, k1, 1)
                 If car = Chr(39) Then car = Chr(39) & Chr(39)
                 strbuff = strbuff & car
             Next k1
          Else
             strbuff = stringa
          End If
    
          EliminaApice = strbuff
          
       End If

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129
    Grazie.

    ho seguito il tuo consiglio....tutto ok ma al momento di scrivere i dati nella tabella access (di seguito eccoti il codice che uso)

    cn.Execute ("INSERT INTO TabellaClienti (Nome,Indirizzo,Telefono,Cap,Citta,Prov) Values('" & Form2.Text1.Text & "','" & Form2.Text3.Text & "','" & Form2.Text2.Text & "', '" & Form2.Text4.Text & "','" & Form2.Text5.Text & "','" & Form2.Combo1.Text & "')")

    L'errore che mi dà è:

    Run-Time error '-2147217900 (80040e14)':
    [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi (operatore mancante) nell'espressione della query "'Nome','Indirizzo','Telefono','Cap','Citta','Prov ')'

    Perchè?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    23
    Cosi' su 2 piedi non saprei esattamente dov'e' il problema, ma come consiglio generale applica la funzione di duplicazione apice a ogni campo di tipo stringa che potrebbe contenere apici, del tipo Nome, Indirizzo, Citta.
    Se non funziona, assegna l'istruzione di insert a una stringa, vai in debug e stampatela, magari vedi chiaramente dove e' l'errore, eventualmente postamela.

  5. #5
    Originariamente inviato da dr75
    Dovresti usare una funzione che applicata a una stringa ne duplica gli apici in essa contenuta.
    Poi la applichi alla TextBox nel costruire la stringa sql.
    codice:
       sSQL = "Select * from TabellaGiornali Where " _
            & "Titolo = '" & DuplicaApice(Form22.Text1.Text) & "'"
    Io uso questa funzione che mi avevano passato, puoi anche migliorarla:
    codice:
    Public Function DuplicaApice(ByVal stringa As String) As String
       
       Dim Lun_str As Integer
       Dim k0 As Long
       Dim k1 As Integer
       Dim car As String
       Dim strbuff As String
    
       If IsNull(stringa) Then
          EliminaApice = ""
       Else
    
          k0 = InStr(stringa, Chr$(39))
          If k0 > 0 Then
             Lun_str = Len(stringa)         
             strbuff = Mid(stringa, 1, k0 - 1)
             For k1 = k0 To Lun_str
                 car = Mid(stringa, k1, 1)
                 If car = Chr(39) Then car = Chr(39) & Chr(39)
                 strbuff = strbuff & car
             Next k1
          Else
             strbuff = stringa
          End If
    
          EliminaApice = strbuff
          
       End If
    In VB6 puoi fare semplicemente un

    codice:
    NuovaStringa = Replace(VecchiaStringa, "'", "''")

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129
    Ci ho smanettato un po' sopra....ora c'è qs errore che però non so cosa voglia dire.

    Run-Time error '-2147217904 (80040e10)':
    [Microsoft][Driver ODBC Microsoft Access] Parametri insufficienti.
    Previsto 1


    che vuol dire?

  7. #7
    Originariamente inviato da giuxmian
    Ci ho smanettato un po' sopra....ora c'è qs errore che però non so cosa voglia dire.

    Run-Time error '-2147217904 (80040e10)':
    [Microsoft][Driver ODBC Microsoft Access] Parametri insufficienti.
    Previsto 1


    che vuol dire?
    scrivi la stringa SQL risultante

    fai Debug.Print <variabile_sql> e postami quello che esce prima di inviarla alla connessione del db

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.