Far riconoscere l'apice come testo in una query

di il
11 risposte

Far riconoscere l'apice come testo in una query

Per la ricerca di un utente in un database di access, nella maschera principale ho inserito una casella combinata, che selezionando il nome mi apre la maschera relativa, con origine riga la seguente query

SELECT T_Soggetti.COGNOME, T_Soggetti.NOME, T_Soggetti.COD_FISCALE, T_Soggetti.DATA_NASCITA, T_Soggetti.CIOF, T_Soggetti.AZIENDA_CF, T_Soggetti.RAGIONE_SOCIALE,
FROM T_Soggetti
WHERE (((T_Soggetti.Inviato)="NO"))
ORDER BY T_Soggetti.COGNOME, T_Soggetti.NOME;

e una routine evento dopo aggiornamento
Private Sub Cerca_Sogg_AfterUpdate()
On Error GoTo Err_Cerca_Sogg_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "M_soggetti"

stLinkCriteria = "[COGNOME]=" & " '" & Me![Cerca_Sogg].Column(0) & "'" & "and [NOME]=" & " '" & Me![Cerca_Sogg].Column(1) & "'" & "and [COD_FISCALE]=" & "'" & Me![Cerca_Sogg].Column(2) & " '" & "and [AZIENDA_CF]=" & "'" & Me![Cerca_Sogg].Column(5) & " '"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Cerca_Sogg_Click:
Exit Sub

Err_Cerca_Sogg_Click:
MsgBox Err.Description
Resume Exit_Cerca_Sogg_Click
End Sub
ma purtroppo i nomi con l'apice (ad es. D'ANDREA) non me li vede.
Dove sbaglio? o come faccio a farli visualizzare.
Ho cercato nel forum ma non ho trovato (o forse non sono riuscito a capire) il modo per risolvere questo problema.
Grazie tante a chi mi può aiutare.

11 Risposte

  • Re: Far riconoscere l'apice come testo in una query

    Ciao,io ho avuto un problema simile,nella casella combinata,quando selezionavo un nome con l'apice mi dava errore e si bloccava il programma.ho risolto in questo modo:

    nella mia casellacombinataxx nella routine dopo aggiornamento che creo automaticamente,ho inserito un codice per la ricerca dell'errore:
    una volta riscontrato l'errore invece di darmi il messaggio automatico,ricerca nuovamente il nome richiesto.(esempio d'andrea)
    Vedi se aggiungendo queste righe di codice al tuo risolvi il problema. fammi sapere.

    Private Sub CasellaCombinataxx_AfterUpdate()
    ' Trova il record corrispondente al controllo
    Dim rs As Object
    Set rs = Me.Recordset.Clone

    On Error GoTo Err_CasellaCombinataxx_AfterUpdate (codice inserito a parte )

    rs.FindFirst "[cognome] = '" & Me![CasellaCombinataxx] & "'"
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark

    Err_CasellaCombinataxx_AfterUpdate: (codice inserito a parte)
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark ( richiesta di ricerca nome in base all'errore)


    End Sub
  • Re: Far riconoscere l'apice come testo in una query

    Intanto grazie per il suggerimento.
    Ma dove lo devo inserire quello che mi hai suggerito? E a parte il nome della casella combinata, devo cambiare qualcosa?
    Lo devo proprio sostituire?
    Ho provato vari modi di inserire il codice che mi hai proposto ma purtroppo non funziona.
    Se lo sostituisco interamente mi restituisce "errore runtime 91"
    Ho provato anche ad aggiungere il codice ma anche cambiando alcuni parametri ogni volta mi da un errore diverso.
    Sicuramente sbaglio qualcosa ma non riesco a capire dove.
  • Re: Far riconoscere l'apice come testo in una query

    Ciao,provo a inserire il codice nella tua routine "dopo aggiornamento" vedi se funziona.

    Private Sub Cerca_Sogg_AfterUpdate()
    On Error GoTo Err_Cerca_Sogg_AfterUpdate

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "M_soggetti"

    stLinkCriteria = "[COGNOME]=" & " '" & Me![Cerca_Sogg].Column(0) & "'" & "and [NOME]=" & " '" & Me![Cerca_Sogg].Column(1) & "'" & "and [COD_FISCALE]=" & "'" & Me![Cerca_Sogg].Column(2) & " '" & "and [AZIENDA_CF]=" & "'" & Me![Cerca_Sogg].Column(5) & " '"
    DoCmd.OpenForm stDocName, , , stLinkCriteria

    Err_Cerca_Sogg_AfterUpdate:

    stLinkCriteria = "[COGNOME]=" & " '" & Me![Cerca_Sogg].Column(0) & "'" & "and [NOME]=" & " '" & Me![Cerca_Sogg].Column(1) & "'" & "and [COD_FISCALE]=" & "'" & Me![Cerca_Sogg].Column(2) & " '" & "and [AZIENDA_CF]=" & "'" & Me![Cerca_Sogg].Column(5) & " '"
    DoCmd.OpenForm stDocName, , , stLinkCriteria

    End Sub

    Io ho capito che la casella combinata che hai chiamato cerca_sogg serve per ricercare un cognome.
    non potendo vedere il db mi riesce difficile comprendere la logica,però mi sembra strano che nella routine afterupdate() alla ricerca dell'errore ci sia l'evento on clik.
    Comunque se la tua routine funziona con i cognomi senza apice,ho provato ad inserire nella ricerca dell'errore l'evento che invece di inviarti il messaggio d'errore,ripropone nuovamente la ricerca.fai un tentativo.
  • Re: Far riconoscere l'apice come testo in una query

    Grazie ma purtroppo non funziona e quando eseguo mi restituisce l'errore 3075 "Errore di sintassi (operatore mancante) e se entro nel codice mi evidenzia "DoCmd.OpenForm stDocName, , , stLinkCriteria" in giallo.
    Considera che la casella combinata prende i dati da una query dove visualizzo i dati di più tabelle.
    Ovvero ho i dati del soggetti in una tabella e i dati dell'azienda di cui è dipendete da un'altra tabella, ma credo che questo sia ininfluente.
  • Re: Far riconoscere l'apice come testo in una query

    Ciao,ho ottenuto qualche risultato,provo a spiegarmi:
    ho creato una tab. T_soggetti ,contenente i seguenti campi:
    T_soggetti
    COGNOME, NOME,CD_FISCALE,DATA_NASCITA,CIOF,AZIENDA_CF,RAGIONE_SOCIALE,Inviato

    Una query come quella create da te: (chiamata query1)

    SELECT T_soggetti.COGNOME, T_soggetti.NOME, T_soggetti.COD_FISCALE, T_soggetti.DATA_NASCITA, T_soggetti.CIOF, T_soggetti.AZIENDA_CF, T_soggetti.RAGIONE_SOCIALE, T_soggetti.Inviato
    FROM T_soggetti
    WHERE (((T_soggetti.Inviato)=No))
    ORDER BY T_soggetti.COGNOME, T_soggetti.NOME;

    poi,una maschera che ho chiamato AVVIO contenente solo una casella combinata. questa casella ricava i dati dalla query 1 e filtra tutti i cognomi dove inviato è = no.

    A questa casella, alla proprietà dopo aggiornamento ho inserito questo codice:

    Private Sub Cerca_Sogg_AfterUpdate()
    Dim stDocName As String
    Dim stLinkCriteria As String
    On Error GoTo err_Cerca_Sogg_AfterUpdate
    stDocName = "M_soggetti"
    stLinkCriteria = "[COGNOME]=" & "'" & Me![Cerca_Sogg] & "'"
    DoCmd.OpenForm "M_soggetti"
    err_Cerca_Sogg_AfterUpdate:
    stLinkCriteria = "[COGNOME]=" & "'" & Me![Cerca_Sogg] & "'"
    DoCmd.OpenForm "M_soggetti"
    End Sub

    Ho creato una seconda query che ho chiamato query soggetti :

    SELECT T_soggetti.COGNOME, T_soggetti.NOME, T_soggetti.COD_FISCALE, T_soggetti.DATA_NASCITA, T_soggetti.CIOF, T_soggetti.AZIENDA_CF, T_soggetti.RAGIONE_SOCIALE, T_soggetti.Inviato
    FROM T_soggetti
    WHERE (((T_soggetti.COGNOME)=[Forms]![AVVIO]![Cerca_Sogg]) AND ((T_soggetti.Inviato)=No))
    ORDER BY T_soggetti.COGNOME, T_soggetti.NOME;

    Ho creato un’altra maschera chiamata M_soggetti che prende i dati dalla query soggetti.
    Se tutto va come previsto, selezionando il nome nella casella combinata chiamata(Cerca_Sogg),compariranno i nomi filtrati e selezionando uno di questi (anche con l’apostrofo ),si aprirà la maschera soggetti ,visualizzando i dati completi.
    N.B. nella casella di riepilogo ho provato ad inserire anche il codice da tè proposto con qualche modifica:funziona con i nomi con l’apice ma non mi visualizza correttamente quelli normali.forse a me manca qualcosa comunque te lo scrivo provali entrambi.
  • Re: Far riconoscere l'apice come testo in una query

    Avevo dimenticato il secondo codice.
    N.B. nella casella di riepilogo ho provato ad inserire anche il codice da tè proposto con qualche modifica:funziona con i nomi con l’apice ma non mi visualizza correttamente quelli normali.forse a me manca qualcosa comunque te lo scrivo provali entrambi.

    Private Sub Cerca_Sogg_AfterUpdate()
    Dim stDocName As String
    Dim stLinkCriteria As String
    On Error GoTo err_Cerca_Sogg_AfterUpdate
    stDocName = "M_soggetti"
    stLinkCriteria = "[COGNOME]=" & " '" & Me![Cerca_Sogg].Column(0) & "'" & "and [NOME]=" & " '" & Me![Cerca_Sogg].Column(1) & "'" & "and [CD_FISCALE]=" & "'" & Me![Cerca_Sogg].Column(2) & " '" & "and [AZIENDA_CF]=" & "'" & Me![Cerca_Sogg].Column(5) & " '"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    err_Cerca_Sogg_AfterUpdate:
    stLinkCriteria = "[COGNOME]=" & " '" & Me![Cerca_Sogg].Column(0) & "'" & "and [NOME]=" & " '" & Me![Cerca_Sogg].Column(1) & "'" & "and [CD_FISCALE]=" & "'" & Me![Cerca_Sogg].Column(2) & " '" & "and [AZIENDA_CF]=" & "'" & Me![Cerca_Sogg].Column(5) & " '"
    DoCmd.OpenForm "M_soggetti"

    End Sub
  • Re: Far riconoscere l'apice come testo in una query

    Innanzitutto complimenti per la tua pazienza, hai ricostruito perfettamente le query e ti ringrazio di tutto quello che stai cercando di fare per aiutarmi.
    Con il tuo secondo codice non mi restituisce alcun errore però anche se nella casella combinata mi visualizza il nome corretto con l'apice mi apre la maschera soggetti sempre sul primo record della tabella, ovvero ignora la selezione aprendomi comunque la maschera soggetti.
  • Re: Far riconoscere l'apice come testo in una query

    Ciao,volevo chiederti se con il primo codice hai lo stesso problema.
    a me apre correttamente e visualizza il nome selezionato.
  • Re: Far riconoscere l'apice come testo in una query

    Scusami tanto per il ritardo ma sono stato fuori due settimane.
    Ho rifatto tutto quello che mi hai consigliato con il primo codice, ovvero:
    ho ricreato la query che mi filtra i soggetti;
    ho creato una maschera che mi prende i dati dalla query di cui sopra, con la sola casella combinata dove ho inserito il codice da te proposto (copiato pari pari);
    quando la apro mi fa selezionare i soggetti con l'apice ma poi mi apre la maschera M_Soggetti sempre con il primo record ignorando la selezione.
  • Re: Far riconoscere l'apice come testo in una query

    Allora,prova questa routine e speriamo bene;a mè funziona.
    N.B. ho chiamato la maschera con la casella combinata "AVVIO" e l'altra M_soggetti.

    Private Sub Cerca_Sogg_AfterUpdate()
    Dim stDocName As String
    Dim stLinkCriteria As String


    On Error GoTo err_Cerca_Sogg_AfterUpdate
    stDocName = "M_soggetti"

    stLinkCriteria = "[cognome]=" & "'" & Me![Cerca_Sogg] & "'"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Exit Sub

    err_Cerca_Sogg_AfterUpdate:
    DoCmd.OpenForm "M_soggetti", , , "[cognome] Like forms.AVVIO.[Cerca_Sogg]"

    End Sub

    incrociamo le dita.di più nin sò.fammi sapere ciao.
  • Re: Far riconoscere l'apice come testo in una query

    Grande!!!! Appena ho provato non mi funzionava ma poi ho resettato tutto e ho ricominciato dall'inizio ricreando tutto e funziona. Per ora sto facendo solo alcune prove in quanto l'architettura del DB è piuttosto complessa in quanto M_Soggetti per me è la maschera principale con varie sottomaschere ma credo di poter applicare i tuo consigli senza problemi (o almeno spero altrimenti butto tutto e mi ritiro).
    Comunque grazie infinite ancora e ti farò sapere com'è andata a finire.
    Ciao, ciao a presto
Devi accedere o registrarti per scrivere nel forum
11 risposte