Accueil > Forum > > > > Vider une requête
Vider une requête
mercredi 13 mai 2009 à 09:07:11 |
Vider une requête

giancomo
|
Bonjour à tous, Je travaille actuellement sur la création d'une interface de contrôle de procédé qui consiste à la création de formulaire intégrant les mesures du procédé sur lequel je travaille. Je bloque sur un problème d'affichage de graphique. Je rempli une requête via VBA, et celle ci est la source d'un graphique dans mon formulaire. Mais je voudrai qu'à l'ouverture de mon formulaire, le graphique n'affiche rien. Or il affiche les résultats de ma précédente requête sans que j'actualise les paramètres à rentrer dans le formulaire. Je cherche un moyen de vider ma requête à l'ouverture ou à la fermeture du formulaire,de sorte qu'il n'y aura rien à afficher, et les personnes utilisant ce formulaire devront obligatoirement rentrer les données nécessaire pour que mon graph s'affiche. Voici le code que j'ai crée pour actualiser mon graph : Private Sub Commande13_Click() Dim SQLCmd As DAO.QueryDef Set SQLCmd = CurrentDb.QueryDefs!QUERY_GRAPH_SECONDE_CNG1 SQLCmd.SQL = "SELECT PROTOS_TAB_SEC_ACCESS_CNG1.DAT, PROTOS_TAB_SEC_ACCESS_CNG1.II, PROTOS_TAB_SEC_ACCESS_CNG1.RI, PROTOS_TAB_SEC_ACCESS_CNG1.HCADRI, PROTOS_TAB_SEC_ACCESS_CNG1.CDOMD, PROTOS_TAB_SEC_ACCESS_CNG1.UI" SQLCmd.SQL = SQLCmd.SQL + " FROM PROTOS_TAB_SEC_ACCESS_CNG1" SQLCmd.SQL = SQLCmd.SQL + " WHERE (PROTOS_TAB_SEC_ACCESS_CNG1.DAT between (#" & Me.date_deb & "#) AND (#" & Me.date_fin & "#))" Set SQLCmd = Nothing If Me.date_fin.Value - Me.date_deb.Value > 1 / 24 Then MsgBox ("Intervalle trop grand Demander moins d'une heure") ElseIf Me.date_fin.Value And Me.date_deb.Value < Date - 30 Then MsgBox ("Données trop anciennes demander moins d'un mois") Else: Me.Graphique10.Requery End If End Sub La ligne "Set SQLCmd = Nothing" devrait régler mon problème (d'aprés ce que j'en avais compris), mais il n'en est rien, j'ai toujours un graphique qui s'affichent avant que je l'ai actualisé avec les paramètres à mettre dans mon formulaire. J'ai essayé de programmer une commande pour vider le requête à la sortie, mais j'y arrive pas (je suis un super débutant dans la matière), je n'arrive qu'à programmer la supression de la requête, je n'ai pas trouvé la commande qui me permet de simplement la vider (car si cette requete est supprimer le code bug). Voilà; j'espère m'être bien fait comprendre. Si quelqu'un a la solution de mon problème, je le remercie d'avance pour l'aide qu'il pourra me procurer. A bientot.
|
|
mercredi 13 mai 2009 à 09:51:43 |
Re : Vider une requête

Renfield
|
tu fais un lien (reference) entre une requete de ta base, et un objet QueryDef.
Set SQLCmd = Nothing rompt ce lien. Pourtant... ta requête existe toujours dans ta base.
a noter que tes dates devraient être formatées yyyy-mm-dd ...
sans pouvoir tester, je dirai de repartir sur d'autres bases:
Private Sub Commande13_Click()
Dim SQLCmd As DAO.QueryDef
If Me.date_fin.Value - Me.date_deb.Value > 1 / 24 Then
MsgBox ("Intervalle trop grand Demander moins d'une heure")
ElseIf Me.date_fin.Value And Me.date_deb.Value < Date - 30 Then
MsgBox ("Données trop anciennes demander moins d'un mois")
Else
On Error Resume Next
Set SQLCmd = CurrentDb.QueryDefs!QUERY_GRAPH_SECONDE_CNG1
On Error Goto 0
If Not Nothing Is SQLCmd Then
SQLCmd.SQL = "SELECT DAT, II, RI, HCADRI, CDOMD, UI " & _
"FROM PROTOS_TAB_SEC_ACCESS_CNG1 " & _
"WHERE DAT BETWEEN #" & Format$(Me.date_deb, "yyyy-mm-dd hh:nn:ss" & "# AND #" & format$(Me.date_fin, "yyyy-mm-dd hh:nn:ss") & "#"
SQLCmd.Close
Me.Graphique10.Requery
End If
End Sub
|
|
mercredi 13 mai 2009 à 15:06:23 |
Re : Vider une requête

giancomo
|
Merci d'avoir répondu si vite Renfield. Je m'explique un peu. A la base, mon but est de m'affranchir des requêtes d'access pour alimenter la source de mon graph. J'ai fait une erreur en mettant comme source une requête existante. La méthode .rowsource. a l'air de marcher, mais j'arrive pas à faire tourner le code sans la ligne : Set SQLCmd = CurrentDb.QueryDefs!QUERY_GRAPH_SECONDE_CNG1. Alors que techniquement je n'en ai pas besoin, puisque ma requete est généré depuis mon code. Voici le code utilisé :
Dim SQLCmd As DAO.QueryDef
If Me.date_fin.Value - Me.date_deb.Value > 1 / 24 Then MsgBox ("Intervalle trop grand Demander moins d'une heure") Set SQLCmd = Nothing ElseIf Me.date_fin.Value And Me.date_deb.Value < Date - 30 Then MsgBox ("Données trop anciennes demander moins d'un mois") Set SQLCmd = Nothing Else On Error Resume Next Set SQLCmd = CurrentDb.QueryDefs!QUERY_GRAPH_SECONDE_CNG1 On Error GoTo 0 End If
If Not Nothing Is SQLCmd Then SQLCmd.SQL = "SELECT PROTOS_TAB_SEC_ACCESS_CNG1.DAT, PROTOS_TAB_SEC_ACCESS_CNG1.II, PROTOS_TAB_SEC_ACCESS_CNG1.RI, PROTOS_TAB_SEC_ACCESS_CNG1.HCADRI, PROTOS_TAB_SEC_ACCESS_CNG1.CDOMD, PROTOS_TAB_SEC_ACCESS_CNG1.UI" SQLCmd.SQL = SQLCmd.SQL + " FROM PROTOS_TAB_SEC_ACCESS_CNG1" SQLCmd.SQL = SQLCmd.SQL + " WHERE (PROTOS_TAB_SEC_ACCESS_CNG1.DAT between (#" & Me.date_deb & "#) AND (#" & Me.date_fin & "#))" SQLCmd.Close Graphique10.RowSource = SQLCmd.SQL Me.Graphique10.Requery
End If End Sub
Maintenant, je cherche à empecher la mise à jour de mon graphique lorsque j'ouvre mon formulaire car apparement ça fait ramer un peu le tout. Là je teste ça sur un formulaire ayant un seul graph, mais je veux l'appliquer à des formulaires contenant une vingtaine de graph. Car ces formulaires mettent un temps fou à s'ouvrir ou se fermer. Et on m'a expliquer que c parce que dans mes requetes d'origine (que j'avais créer sous access), il y'a un appel à des données que l'on met formulaire (les dates et un numéro de cuve le plus souvent, parce que ça va afficher selon une période et une cuve). Donc, je voulais supprimer cette étape en écrivant ma requête directement dans le code. Ca marche, mais il me reste ces soucis qui sont l'apparation de la précédente recherche lorsque j'ouvre le formulaire (sans rentrer aucun paramètre) et la ligne de code dont je veux m'affranchir. Ce que je fais a l'air trés proche de l'utilisation d'un Recordset auquel je n'ai rien compris, mais apparement ça peut m'aider.
mes messages sont un peu long, mais c pour qu'il n'y ait pas d'ambiguité.
Merci encore pour ton aide.
P.S. : je n'ai pas pigé le problème sur mes dates, ça marche trés bien lorsque je le fais à ma manière, si je fais tourner ton code avec "yyyy-mm-dd hh:nn:ss", il comprend plus rien.
|
|
jeudi 14 mai 2009 à 02:26:43 |
Re : Vider une requête

LIBRE_MAX
|
Salut, Pourquoi ne pas construire ta requete à partir d' une table temporaire, identique à PROTOS_TAB_SEC_ACCESS_CNG1 que tu pourras : -vider avant le chargement du formuliare. "Delete * From Tmp" et -réemplir en temps voulu "Insert Into Tmp Select * From PROTOS_TAB_SEC_ACCESS_CNG1 WHERE (PROTOS_TAB_SEC_ACCESS_CNG1.DAT between (#" & Me.date_deb & "#) AND (#" & Me.date_fin & "#))" - Ainsi : SQLCmd.SQL = "SELECT Tmp.DAT, Tmp.II, Tmp.RI, Tmp.HCADRI, Tmp.CDOMD, Tmp.UI FROM Tmp" mettra à jour ton graph selon que ta Tmp est vide ou pas.
[] Ce qui va sans dire. va mieux en le disant.
|
|
jeudi 14 mai 2009 à 11:14:13 |
Re : Vider une requête

giancomo
|
Libre_max, t'a tout à fait compris mon problème, je vais essayer ta méthode. Je voulais savoir est ce qu'il faut que je crée cette table temporaire, parce que, la fonction delete va me la supprimer donc je devrai faire en sorte de la créer dans ma requete (j'avais tester avec une sorte de requête temporaire, et ça m'a supprimer ma requete lorsque je suis sortie du formulaire, j'avais placé la fonction delete avec la procédure de sortie du formulaire). Il n'existe pas une fonction pour simplement vider cette table temporaire? Si t'as le temps, tu peux juste me placer les lignes de suppression de table dans le code, ci dessous, je vais tester mais il se pourrait que je misère un peu.
Private Sub Commande35_Click()
Dim SQLCmd1 As New DAO.QueryDef SQLCmd1.SQL = "SELECT PROTOS_TAB_POSTES.DAT, PROTOS_TAB_POSTES.CP_SANMO, PROTOS_TAB_POSTES.CP_SURTA" SQLCmd1.SQL = SQLCmd1.SQL + " FROM PROTOS_TAB_POSTES" SQLCmd1.SQL = SQLCmd1.SQL + " WHERE (PROTOS_TAB_POSTES.DAT between (#" & Me.date_deb & "#) AND (#" & Me.date_fin & "#)) AND ((PROTOS_TAB_POSTES.COD_CUV)=(""" & Me.CUVE & """))"
Graphique10.RowSource = SQLCmd1.SQL Me.Graphique10.Requery
End Sub
Merci bien dans tous les cas pour ta réponse.
Tant qu'on y est, j'ai un autre problème un peu moins chiant je pense mais qui me rend un peu fou.
J'avais fait une procédure qui me permettait de bloquer l'affichage d'un graph lorsque les paramètres spécifiés n'étaient pas bon (le code va suivre). Mais c avant que je mette en place le système de requête inséré dans le code vba (je placai ce code de blocage sur mes paramètre aux même puisque la mise à jour du graph se faisait lorsqu'on changeait un paramètre). ET ca marchait, puisque aprés le message d'erreur le graph restait vide. Mais maintenant, il me met bien le message d'erreur par contre il essaie quand même de générer le graph. Je sais pas où est l'erreur dans ce code :
Private Sub Commande13_Click()
Dim SQLCmd As New DAO.QueryDef
If Me.date_fin.Value - Me.date_deb.Value > 1 / 24 Then MsgBox ("Intervalle trop grand Demander moins d'une heure") Set SQLCmd = Nothing ElseIf Me.date_fin.Value And Me.date_deb.Value < Date - 30 Then MsgBox ("Données trop anciennes demander moins d'un mois") Set SQLCmd = Nothing Else Me.Graphique10.Requery On Error Resume Next Exit Sub End If
SQLCmd.SQL = "SELECT PROTOS_TAB_SEC_ACCESS_CNG1.DAT, PROTOS_TAB_SEC_ACCESS_CNG1.II, PROTOS_TAB_SEC_ACCESS_CNG1.RI, PROTOS_TAB_SEC_ACCESS_CNG1.HCADRI, PROTOS_TAB_SEC_ACCESS_CNG1.CDOMD, PROTOS_TAB_SEC_ACCESS_CNG1.UI" SQLCmd.SQL = SQLCmd.SQL + " FROM PROTOS_TAB_SEC_ACCESS_CNG1" SQLCmd.SQL = SQLCmd.SQL + " WHERE (PROTOS_TAB_SEC_ACCESS_CNG1.DAT between (#" & Me.date_deb & "#) AND (#" & Me.date_fin & "#))" SQLCmd.Close Graphique10.RowSource = SQLCmd.SQL
End Sub
Voilà, si y'a quelqu'un qui peut m'aider ce serait cool. Merci.
|
|
jeudi 14 mai 2009 à 14:02:59 |
Re : Vider une requête

LIBRE_MAX
|
"..est ce qu'il faut que je crée cette table temporaire ?" Oui. la créer mais dans la base elle-même.Cette table doit exister dans la base au même titre que ta table principale ROTOS_TAB_SEC_ACCESS_CNG1 et avec la même structure que celle-ci. "..delete va me la supprimer" Non,"Delete * From Temporaire" supprime uniquement les enregistrements. Autrement dit, elle vide la table. NB:Si tu n' as pas acces à ta base et que tu ne peux pas la modifier, tu peux toujours la cloner par code: Public Sub ClonerTable(xSource, xDestination, xIndex) Dim tbl As TableDef Dim Fld As Field Dim idx As Index Dim xdata As Recordset Dim xnom As String Dim xtype As Variant Dim xtaille As Double Dim j As Integer Dim k As Integer 'Creer Table destination Set tbl = xDB.CreateTableDef(xDestination) 'creer un recordset Set xdata = xDB.OpenRecordset(xSource, dbOpenTable) 'nombre de champ de la table source k = xdata.Fields.Count 'creer autant de champ dans la table destination et 'leur attribuer les propriétés des champs de la table source For j = 1 To k xnom = xdata.Fields(j - 1).Name xtype = xdata.Fields(j - 1).Type xtaille = xdata.Fields(j - 1).Size Set Fld = tbl.CreateField(xnom, xtype, xtaille) tbl.Fields.Append Fld Set Fld = Nothing Next j 'Creer la cle primaire Set idx = tbl.CreateIndex(xIndex) idx.Fields.Append idx.CreateField(xIndex) idx.Primary = True tbl.Indexes.Append idx 'ajouter la table destination à la collection des tables 'de la base de donées en cour xDB.TableDefs.Append tbl Set tbl = Nothing Set idx = Nothing Set xdata = Nothing End Sub Ce code permet donc de cloner ta table principale et la table ainsi crééeé existera de façon permanente dans ta base dès lors que tu exécutera ce code.Arranges toi donc pour ne l' exécuter qu' une seule fois.Ou alors places un test avant de lancer la fonction pour savoir si la table éxiste déjà ou pas. Au fait sans devoir toucher à ta base, voici un exemple de requete qui ne risque pas de renvoyer quelque chose. Il suffit de faire dans le critère, une référence à une date bidon, genre 01/01/1111 SQLCmd.SQL = "SELECT PROTOS_TAB_SEC_ACCESS_CNG1.DAT, PROTOS_TAB_SEC_ACCESS_CNG1.II, PROTOS_TAB_SEC_ACCESS_CNG1.RI, PROTOS_TAB_SEC_ACCESS_CNG1.HCADRI, PROTOS_TAB_SEC_ACCESS_CNG1.CDOMD, PROTOS_TAB_SEC_ACCESS_CNG1.UI" SQLCmd.SQL = SQLCmd.SQL + " FROM PROTOS_TAB_SEC_ACCESS_CNG1" SQLCmd.SQL = SQLCmd.SQL + " WHERE (PROTOS_TAB_SEC_ACCESS_CNG1.DAT < (#" & date_bidon & "#))" [] Ce qui va sans dire. va mieux en le disant.
|
|
jeudi 14 mai 2009 à 14:19:47 |
Re : Vider une requête

LIBRE_MAX
|
Je viens de comprendre ce qui t' as induit en erreur. Ce que je veux dire par Table Temporaire non pas une table ephèmère (ou jetable :-), mais une table permanente qu' on vide et qu' on remplit.
[] Ce qui va sans dire. va mieux en le disant.
|
|
jeudi 14 mai 2009 à 15:22:09 |
Re : Vider une requête

giancomo
|
Interessant comme méthode, néanmoins, je sais pas trop par quoi remplacer xIndex lorsque je veux cloner la table. xSource ça doit être le nom de la table, xDestination ça doit être le nom de la table acceuillant les nouvelles données, tu me dis si je me trompe??? A part ces variable il n'y a rien à changer non???
|
|
jeudi 14 mai 2009 à 16:28:37 |
Re : Vider une requête

LIBRE_MAX
|
xIndex c' est le numéro ordinal de ton champ cle primaire. Si ta cle correspond au premier champ par exemple, xIndex sera egale à 0. Si c' est le 2ième, ça sera 1.... Si ta table n' est pas indexée, tu peux t' en passer. Mets juste en commentaire la partie de code correspondante Autre chose à remplacer : xDB par CurrentDB, ou alors déclares xDB As DataBase. Set xDB=DBEngine.Workspaces(0).OpenDatabase(CheminDeLaBase)
[] Ce qui va sans dire. va mieux en le disant.
|
|
Cette discussion est classée dans : access, tab, sec, sqlcmd, protos
Répondre à ce message
Sujets en rapport avec ce message
access 2002 Déplacement avec la touche TAB [ par gandalfgris ]
Bonjour, j'ai un petit soucis j'ai dans un formulaire 2 ou 3 sous formulaires. mais quand on se deplace avec la touche TAB de champs a champs, si on r
Requête access [ par 4u4me4us ]
Help, I need somebody, Help, not just anybody, Help, you know I need someone, help.Bonjour, Je voudrais créer un "recordset" avec les enregistrements
Sendkeys et options pour une combo [ par bubuchette ]
Salut tout le monde! Me voila reparti pour une nouvelle journée d'Access 2007 avec deux trois petites questions!! Bon la premiere: A propos des Sen
Access et les indexs tabulation avec la touche TAB [ par annelise ]
Bonjour, g développé une application sous Access gérée avec des formulaires.Tres simple donc pour passer d un champs a l autre avec la touche TAB, j a
Graph ne s'affichent pas [ par giancomo ]
Bonjour,J'essaie d'appliquer un code vba qui me permet de générer des graphiques sans réellement créer de requête (c'etait là tout l'objet de ce petit
Comment arrêter une MACRO [ par ivdz ]
Bonjour,Je voudrais savoir comment arrêter une macro Access, si une table TAB est vide, dans une fonction VB ou (autre solution) comment tester dans l
Synchroniser une table access avec les contact outlook. [ par jff27 ]
J'ai une table client (Nom, prenom, adresse etc...)Aprés une saisie de client, il faudrait qu'il apparaise dans les contact outlook.Peut on vraiment p
mot de passe sous access [ par kFar ]
j'ai dans ma base access une table contenant des mots de passe. j'ai appliqué le masque de saisie mot de passe sur le champ correspondant, ainsi on ne
Format de Base de Donnée ... non reconnu [ par Rmoummed ]
Salut a tous!je viens de faire un base avec access 2000, quand j utilise le controle "Data" fournit avec vb6 il me met un message d'erreur à l executi
Pb Acces et MsComm [ par Ptitlutin ]
Bonjour,je cherche à communiquer sur un port série Com1, a partir d'Access.Mais quand je souhaite utiliser le composant de communication, un message m
Livres en rapport
|
Derniers Blogs
SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|