problème avec apostrophes

problème avec apostrophes - VB/VBA/VBS - Programmation

Marsh Posté le 02-03-2004 à 10:20:08    

Bonjour,  
 
je rencontre qq problèmes dans ma base de données access à cause des apostrophes:  
- je ne peux pas avoir de fiches avec des apostrophes dans les champs car le logiciel ne me les accepte pas dans la recherche:  
voilà le code:  
Code:  
[/cpp]Private Sub Commande29_Click()  
Dim recRecherche As DAO.Recordset  
Dim reqRecherche As String  
Dim marqueur As Integer  
marqueur = 0  
'requete de base pour la recherche  
'reqRecherche = "SELECT Entreprises.[Raison sociale], Entreprises.Adresse, Entreprises.[Adresse 2], " & _  
" Entreprises.[Code postal], Entreprises.Ville, Entreprises.Pays, Interlocuteurs.Titre, Interlocuteurs.[Nom interlocuteur], Interlocuteurs.Prénom,Interlocuteurs.Fonction, " & _  
" Entreprises.[Type de relation], Contrats.Type, Contacts.Intéret, Contacts.[Date du contact]," & _  
" Contrats.Date FROM ((Entreprises LEFT JOIN Contrats ON Entreprises.[Raison sociale] = Contrats.Société)" & _  
" LEFT JOIN Interlocuteurs ON Entreprises.[Raison sociale] = Interlocuteurs.Société) " & _  
" LEFT JOIN Contacts ON Interlocuteurs.[Nom interlocuteur] = Contacts.Interlocuteur " & _  
" GROUP BY Entreprises.[Raison sociale], Entreprises.Adresse, Entreprises.[Adresse 2], " & _  
" Entreprises.[Code postal], Entreprises.Ville, Entreprises.Pays, Interlocuteurs.Fonction, " & _  
" Entreprises.[Type de relation], Contrats.Type, Contacts.Intéret, Contacts.[Date du contact], " & _  
" Contrats.Date  "  
reqRecherche = "SELECT Entreprises.[Raison sociale], Entreprises.Adresse, Entreprises.[Adresse 2], " & _  
" Entreprises.[Code postal], Entreprises.Ville, Entreprises.Pays, Interlocuteurs.Titre, " & _  
" Interlocuteurs.[Nom interlocuteur], Interlocuteurs.Prénom, Interlocuteurs.Fonction, " & _  
" Entreprises.[Type de relation], Contrats.Type, Contacts.Intéret, Contacts.[Date du contact], " & _  
" Contrats.Date " & _  
" FROM ((Entreprises LEFT JOIN Contrats ON Entreprises.[Raison sociale] = Contrats.Société) " & _  
" LEFT JOIN Interlocuteurs ON Entreprises.[Raison sociale] = Interlocuteurs.Société) " & _  
" LEFT JOIN Contacts ON Interlocuteurs.[Nom interlocuteur] = Contacts.Interlocuteur" & _  
" GROUP BY Entreprises.[Raison sociale], Entreprises.Adresse, Entreprises.[Adresse 2], " & _  
" Entreprises.[Code postal], Entreprises.Ville, Entreprises.Pays, Interlocuteurs.Titre, " & _  
" Interlocuteurs.[Nom interlocuteur], Interlocuteurs.Prénom, Interlocuteurs.Fonction, " & _  
" Entreprises.[Type de relation], Contrats.Type, Contacts.Intéret, Contacts.[Date du contact]," & _  
" Contrats.Date"  
'concatenation des criteres des recherche  
If Me.Rech_Fonction <> "" Then  
    reqRecherche = "" & reqRecherche & " HAVING(((Interlocuteurs.Fonction) = '" & Me.Rech_Fonction & "')) "  
    marqueur = 1  
End If  
    If Me.Rech_TypeRel <> "" Then  
    reqRecherche = "" & reqRecherche & "" & IIf(marqueur = 1, Me.txt_ANDOR_typerel, " HAVING " ) & "(((Entreprises.[Type de relation]) = '" & Me.Rech_TypeRel & "')) "  
    If marqueur <> 1 Then  
        marqueur = 1  
    End If  
     
End If  
If Me.Rech_TypeContrat <> "" Then  
    reqRecherche = "" & reqRecherche & "" & IIf(marqueur = 1, Me.txt_ANDOR_typecontrat, " HAVING " ) & "  (((Contrats.Type) = '" & Me.Rech_TypeContrat & "')) "  
If marqueur <> 1 Then  
        marqueur = 1  
    End If  
     
End If  
If Me.Rech_IntPot <> "" Then  
    reqRecherche = "" & reqRecherche & "" & IIf(marqueur = 1, Me.txt_ANDOR_intPot, " HAVING " ) & "  (((Contacts.Intéret) = '" & Me.Rech_IntPot & "'))"  
If marqueur <> 1 Then  
        marqueur = 1  
    End If  
     
End If  
If Me.Rech_IntPot1 <> "" Then  
    reqRecherche = "" & reqRecherche & "" & IIf(marqueur = 1, Me.txt_ANDOR_intPot1, " HAVING " ) & "  (((Contacts.Intéret) = '" & Me.Rech_IntPot1 & "'))"  
If marqueur <> 1 Then  
        marqueur = 1  
    End If  
     
End If  
If Me.Rech_IntPot2 <> "" Then  
    reqRecherche = "" & reqRecherche & "" & IIf(marqueur = 1, Me.txt_ANDOR_intPot2, " HAVING " ) & "  (((Contacts.Intéret) = '" & Me.Rech_IntPot2 & "'))"  
If marqueur <> 1 Then  
        marqueur = 1  
    End If  
     
End If  
If Me.Rech_DateContactDebut <> "" And Me.Rech_DateContactFin <> "" Then  
    reqRecherche = "" & reqRecherche & "" & IIf(marqueur = 1, Me.txt_ANDOR_DateContact, " HAVING " ) & " (((Contacts.[Date du contact]) Between #" & Me.Rech_DateContactDebut & "# And #" & Me.Rech_DateContactFin & "#))"  
If marqueur <> 1 Then  
        marqueur = 1  
    End If  
     
End If  
If Me.Rech_DateContratDebut <> "" And Me.Rech_DateContratFin <> "" Then  
    reqRecherche = "" & reqRecherche & "" & IIf(marqueur = 1, Me.txt_ANDOR_DateContrat, " HAVING " ) & "(((Contrats.Date) Between #" & Me.Rech_DateContratDebut & "# And #" & Me.Rech_DateContratFin & "#))"  
End If  
'Afficher la ligne suivante pour débugger au cas où la requête ne fonctionne pas  
'MsgBox "" & reqRecherche  
Set recRecherche = CurrentDb.OpenRecordset(reqRecherche)  
 
 
'Insertion des résultats dans la table T_RESULTATRECHERCHE  
CurrentDb.Execute ("DELETE * FROM T_RESULTATRECHERCHE" )  
While recRecherche.EOF <> True  
    CurrentDb.Execute ("INSERT INTO T_RESULTATRECHERCHE([Raison sociale],[Adresse],[Adresse 2],[Code Postal],[Ville],[Pays],[Titre],[Nom interlocuteur],[Prénom]) " & _  
    " VALUES('" & recRecherche![Raison sociale] & "','" & recRecherche!Adresse & "','" & recRecherche![Adresse 2] & "'," & _  
    "'" & recRecherche![Code postal] & "','" & recRecherche![Ville] & "','" & recRecherche![Pays] & "'," & _  
    "'" & recRecherche![Titre] & "','" & recRecherche![Nom interlocuteur] & "','" & recRecherche![Prénom] & "')" )  
         
    recRecherche.MoveNext  
Wend  
'affichage des résultats  
If MsgBox("Voulez vous afficher les résultats ?", vbYesNo, "Résultats de la recherche" ) = vbYes Then  
    DoCmd.OpenQuery "T_RESULTATRECHERCHE Requête"  
    End If  
End Sub

Code :
  1. - je rencontre également ce problème dans un code sur un bouton qui utilise un champ
  2. voici le code:
  3. Code:
  4. [cpp]Private Sub contacts_Click()
  5. On Error GoTo Err_contacts_Click
  6.     Dim stDocName As String
  7.     Dim stLinkCriteria As String
  8.     stDocName = "Interlocuteurs"
  9.     stLinkCriteria = "Interlocuteurs.Société = '" & Me.Raison_sociale & "'"
  10.     DoCmd.OpenForm stDocName, , , stLinkCriteria
  11. Exit_contacts_Click:
  12.     Exit Sub
  13. Err_contacts_Click:
  14.     MsgBox Err.Description
  15.     Resume Exit_contacts_Click
  16.    
  17. End Sub


 
Que peut-on faire?
 
Merci d'avance

Reply

Marsh Posté le 02-03-2004 à 10:20:08   

Reply

Marsh Posté le 02-03-2004 à 13:39:34    

En effet, vb ne "voit" pas un code écrit aprés une apostrophe.
Dans ton code sur bouton (ce sera pareil pour ton autre code, mais il était trop long, j'ai pas tout lu), si la valeur selectionnée de ton champs "Raison_sociale" comporte une apostrophe, ça fait planter ton code. Il faut donc mettre cette valeur entre guillemets, de façon à ce que l'apostrophe soit inclu dans la chaine de texte.
En modifiant ton code avec cette valeur, ça devrait fonctionner :
 
Dim Quote
Quote = """"
 
stLinkCriteria = "Interlocuteurs.Société = " & Quote & Me.Raison_sociale & Quote
 
(remplace les apostrophes de ton code par cette "Quote", et il incluera les apostrophes de tes raisons sociales dans la chaine de texte.)

Reply

Marsh Posté le 02-03-2004 à 14:27:44    

Autre solution : tu double les quote ...
 
Si tu remplace le ' qui est dans ta variable par par '' et ça marche.
 

Code :
  1. Genre maVariable = Replace(maVariable, "'", "''" ) avant d'executer ta commande.


Message édité par latruffe le 02-03-2004 à 14:28:04

---------------
« Lorsque le bûcheron pénétra dans la forêt avec sa hache, les arbres se dirent : ne nous inquiétons pas, le manche est des nôtres. » | Gérez votre collection de BD en ligne !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed