Problème requêtes SQL via VBA [Résolu]

Signaler
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
-
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
-
Bonjour, je suis actuellement en train de manipuler une BDD SQL Server en VBA et je me heurte à plusieurs problèmes. Tout d'abord voici une partie de mon code :

Public Sub DTPicker1_CallbackKeyDown(ByVal KeyCode As Integer, ByVal Shift As Integer, ByVal CallbackField As String, CallbackDate As Date)

End Sub 'Macro calendar'

Sub Action_Bouton()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Dim Date_Debut, Date_Fin As String

Dim Jour, Jour1, Jour2 As Date

Dim i As Integer

Dim champ0 As String

Dim champ1 As String

Dim champ2 As String




Set cn = New ADODB.Connection 'Connexion à la DB'
With cn
.ConnectionString "Provider SQLOLEDB;Data Source=Masource;Initial Catalog=MaBDD;Uid=Login;Trusted_Connection=yes" 'Chaîne de connexion Sql Server'
.Open
End With


Set rs = New ADODB.Recordset 'Lecture de la DB'
With rs
.ActiveConnection = cn
.Open "SELECT * FROM Actions_OPE"
'Sélection de la table Actions_OPE'

End With

i = 1
rs.MoveFirst 'placement du curseur au premier enregistrement'

Do Until rs.EOF 'Actions à effectuer jusqu'au dernier enregistrement'

champ0 = rs!TimeStmp
champ1 = rs!MessageText
champ2 = rs!UserID







rs.MoveNext

'Copie dans les cellules Excel'
Range("A" & i).Value = Format(champ0, "dd:mm:yyyy:hh:mm")
Range("B" & i).Value = champ1
Range ("C" & i)/value= champ2




i = i + 1

Loop



End Sub

Voici mes problèmes :
[list]
[*] Ma chaine "champ2" retourne quelques fois une valeur nulle. Du coup, j'ai le message d'erreur "Utilisation incorrecte de Null". Comment pourrais je en VBA, faire en sorte que lorsque ma chaine contient la valeur NULL de mettre un blanc dans la cellule?

[*] J'aimerais extraire de ma BDD seulement les champ à une date donnée. Le problème est que je ne connais pas la syntaxe pour y arriver car lorsque que j'ajoute "WHERE TIMEstmp=DateVoulue" j'ai une erreur de syntaxe

[*] Une fois le filtre par date ajouté, j'aimerai choisir la date via un calendar excel. Puis utiliser la date "CallbackDate" déclarée tout en haut du code dans ma requête SQL?

/list

35 réponses

Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Tu as déjà pus ramener des valeur de tables ? N'importe les qu'elle (autre que NULL)?
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
La valeur du DTPickers doit également être une date


Méfie-toi des assertions de ce style. Vérifie avant d'en être sur même si ça parait logique.


Calade
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015

Enfaite j'ai trouvé la syntaxe c'est :

WHERE TimeStmp = " & TriDate & ""


Maintenant, il me dis qu'il n'y a aucun résultat, surement une erreur de format de date
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
Non ce n'est surement pas la syntaxe.
Tridate à des propriétés et c'est l'une d'entre elles qu'il faut utiliser. Regardes ton aide pour ça.


Calade
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015

Eh bien étant donné que je suis sur un portable au boulot j'utilise une version portable de MS Office 2007 donc dénuée de l'aide offline.
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Dis moi ton champs TimeStmp est un string ?
Fait la requête suivante "SELECT TimeStmp FROM Actions_OPE" et regarde les valeurs que tu as
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015

Le champ TimeStmp contient des dateTime en mm/jj/aaaa hh:mm:ss
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Tu dis "Le champ TimeStmp contient des dateTime en mm/jj/aaaa hh:mm:ss". Oui ok! Mais il a était créer en qu'elle format? Es-t-il vraiment un champs date ou est-il un champ string. Il faut que tu regarde la création de la table pour répondre à cette question.
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015

J'ai regardé dans ma BDD et c'est bien un DateTime =).
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Ok tu as dis "
Maintenant, il me dis qu'il n'y a aucun résultat, surement une erreur de format de date"

je te conseil de faire Fait la requête suivante "SELECT TimeStmp FROM Actions_OPE" et regarde les valeurs que tu as. Comme tu as mis = si le champs à la moindre diff avec TriDate l'enregistrement sera exclut. Là je t'invite à prendre tout les valeur pour réfléchir à une requête plus "ouverte"
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015

Eh bien les TimeStmp que je reçois sont par exemples : 03/05/2011 10:02


Moi je voudrais pouvoir trier ça par date grâce à mon DTPickers. Donc grâce à celui ci je sélectionne une date genre 03/05/2011 mais il ne me trouve rien alors qu'il y'a des enregistrements liés à cette date. J'ai donc pensé que c'était l'heure qui manquait dans ma requête; j'ai donc utilisé un Like pour trier juste par JJ/MM/AAAA mais même résultat.

Donc soit ma valeur TriDate est en string ce que je ne pense pas sinon ma syntaxe de requête ne serait pas bonne (Where TimeStmp = " & TriDate & "")


Ou alors un problème de format JJ/MM - MM/JJ

Mais je ne sait pas comment le savoir.
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Supprime le like, je pense que le problème est que ta requête tu mets = remplace le = par > ou < ou >= ou <= regarde si tu as de meilleurs résultat.

Puis renseigne toi sur la requête BETTEWEN.

Tien nous au courant
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Bien calade !!! Je ne savais pas que l'on pouvais faire ainsi!!!
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
Regarde dans l'aide SQL, il y a pas mal de fonctions relativement identiques à celles de VB que tu peux utiliser dans tes requêtes.


Calade
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015

Merci beaucoup à vous deux la requête marche impeccable. Merci encore