[VBA] Formulaire / sous formulaire et les requêtes.

Formulaire / sous formulaire et les requêtes. [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 31-10-2006 à 09:28:09    

Bonjour à tous,
 
j'utilise un tutorial.
 
celui ci permet une recherche avancé avec formulaire et sous formulaire.
 

Code :
  1. Private Sub Restriction(ByVal Chaine As String, _
  2.          ByVal ChamP As String, ByVal matable As String, _
  3.          ByRef ArGument As Integer, ByRef ClausE As String, ByRef astype As Integer)
  4. ' Choix du type : 0 pour un string, 1 pour un numérique ou booleen
  5. ' 2 pour une date
  6. 'Construit la requête au premier passage
  7. If ArGument = 0 Then
  8.   'Elimine les espaces
  9.    matable = Trim$(matable)
  10.   'Si table est une sous requete :(commence par select)
  11.   If InStr(1, matable, "SELECT ", vbTextCompare) <> 0 Then
  12.     'Enleve le ; s'il existe
  13.     If Right(matable, 1) = ";" Then _
  14.        matable = Left(matable, Len(matable) - 1)
  15.     'encadre la sous requete avec des ()
  16.     ClausE = "SELECT * FROM (" & matable & " )"
  17.   Else
  18.     ClausE = "SELECT * FROM " & matable
  19.   End If
  20. End If
  21. If Chaine <> "" Then
  22.     If ArGument = 0 Then
  23.      ' Ajoute le WHERE
  24.     ClausE = ClausE & " WHERE "
  25.     ' Ajout de l'opérateur "AND" si le where existe déja
  26.     Else: ClausE = ClausE & " AND "
  27.     End If
  28.     Select Case astype
  29.       Case 0  'Ajoute le critère si le type est texte
  30.         ClausE = ClausE & ChamP & " like " & Chr(34) & Chaine & "*" & Chr(34)
  31.       Case 1  'Ajoute le critère si le type est Numerique
  32.         ClausE = ClausE & ChamP & "=" & Chaine
  33.       Case 2  'Ajoute le critère si le type est date
  34.         ClausE = ClausE & ChamP & "=#" & Format(Chaine, "mm/dd/yyyy" ) & "#"
  35.     End Select
  36.     ArGument = ArGument + 1
  37. End If
  38. End Sub


 
 

Code :
  1. Private Sub BRechercher_Click()
  2. Dim SQL As String
  3. Dim NomTable As String
  4. Dim Compteur As Integer
  5. NomTable = "Table1"
  6. 'Appel de la procedure de creation de requête
  7. 'pour le numero de série de type texte
  8. Restriction Nz(TLTA, "" ), "LTA", NomTable, Compteur, SQL, 1
  9. 'pour la date achat de type date (2)
  10. Restriction Nz(Date, "" ), "Date", NomTable, Compteur, SQL, 2
  11. 'Pour la marque de type texte
  12. Restriction Nz(Exploit, "" ), "Exploitant", NomTable, Compteur, SQL, 0
  13. 'Affecte la requête au sous formulaire
  14. Me.SousFormulaire.Form.RecordSource = SQL


 
se que je veux faire est simple, j'ai une requete fait en mode création.
j'ai donc créée un bouton sur le formulaire existant avec le code suivant.
 

Code :
  1. Private Sub LTA_Libre_Click()
  2. Dim stDocName As String
  3. stDocName = "Recherche par LTA Libre"
  4. DoCmd.OpenQuery stDocName, acNormal, acEdit
  5. End Sub


 
forcément ce code permet d'executer simplement la requête et biensur me donne le résultat dans une nouvelle fenêtre.
 
comment faire pour que le résultat soit dans le sous formulaire car je n'arrive pas à conprendre le SQL dans Me.SousFormulaire.Form.RecordSource = SQL.
 
si quelqu'un à une idée.
 
merci bien !
 
cordialement,
Zorh.

Reply

Marsh Posté le 31-10-2006 à 09:28:09   

Reply

Marsh Posté le 31-10-2006 à 15:16:41    

up

Reply

Marsh Posté le 31-10-2006 à 16:29:11    

Bonjour zorh,
 
Si tu regardes dans le code du second cadre, tu vois cette ligne d'instruction :  
"3. Dim SQL As String"
 
Elle t'indique que SQL est une variable déclarée dans ce module, qu'elle est de type "string".
 
Elle doit donc contenir du "texte".
En réalité, elle doit contenir une instruction écrite au format SQL. Dans ton code, tu dois introduire l'instruction dans la variable SQL :
SQL = "WHERE ABCD LIKE DEF"
 
L'instruction doit être placée entre guillements "" puisque c'est du textes, un string. Les mots WHERE et LIKE, dans mon exemple, sont des mots réservés SQL.
 
A+

Reply

Marsh Posté le 31-10-2006 à 16:55:33    

bonjour papy merci de ta réponse.
 
ce que je veux c'est que ma requête donne sont résultat dans un champs texte de sousformulaire.
 
mais je ne c'est pas faire :/
 
cordialement,
Zorh.

Reply

Marsh Posté le 02-11-2006 à 08:37:44    

up :(

Reply

Marsh Posté le 02-11-2006 à 09:53:14    

Bonjour,
 
lorsque tu éxécutes   Me.SousFormulaire.Form.RecordSource = SQL
tu places dans la propriété source du  sous-formulaire, nommé "SousFormulaire", une requête sql de type "string" comme te l'as dit Papy Octet .
En général il est bon de rajouter un refresh après cette instruction pour que la nouvelle requête soit prise en compte.
 
Dans ton code, la requête SQL est générée par le Sub  "restriction"
 
 
Maintenant, si tu veux placer une requête SQL de ton cru créée à partir d'une requête faite en mode création:
 
tu ouvres ta requête en modif, puis: affichage-> mode SQL  
copies le texte et, dans ton code, tu écris  
SQL=  et tu colles ici ce que tu as copié.
 
l'instruction  que tu placeras après:   Me.SousFormulaire.Form.RecordSource = SQL
demandera au ss formulaire d'afficher les éléments  
sélectionnés par la requête.
Cordialement


Message édité par seniorpapou le 02-11-2006 à 09:54:51
Reply

Marsh Posté le 02-11-2006 à 10:43:41    

merci papou :)

Reply

Marsh Posté le 02-11-2006 à 16:56:56    

d'après ce que j'ai compris normallement ça devrai donner quelque chose comme sa:
 

Code :
  1. Private Sub Commande27_Click()
  2. Dim SQL As String
  3. SQL = "SELECT * FROM Table1 WHERE not isnull(DSSR_JFH) AND ( Nz(Exploitant,"" ) = "" OR isnull(Colis)  OR isnull(Poids) OR Nz(Destination,"" ) = "" );"
  4. Me.SousFormulaire.Form.RecordSource = SQL
  5. End Sub


 
mais sa marche pas et me renvoie une erreur sur la derniere ligne.
 
une idée ?
 
merci!

Reply

Marsh Posté le 02-11-2006 à 18:15:21    

Bonsoir,
tu dois avoir déjà un pb avec tes "" à l'intérieur.
 
remplace les "" à l'intérieur par """"  (4 " )
 
Quelle est l'erreur?
Cordialement


Message édité par seniorpapou le 02-11-2006 à 18:38:18
Reply

Marsh Posté le 03-11-2006 à 08:44:21    

sa marche nikel !!!!
 
t'es vraimment le meilleur papou !
 
merci

Reply

Sujets relatifs:

Leave a Replay

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