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

Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
- - Dernière réponse : pitipilot
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
- 10 mai 2011 à 15:41
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
Afficher la suite 

15/35 réponses

Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Tu as déjà pus ramener des valeur de tables ? N'importe les qu'elle (autre que NULL)?
Commenter la réponse de 4u4me4us
Messages postés
1212
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
8
0
Merci
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
Commenter la réponse de Calade
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
0
Merci
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
Commenter la réponse de pitipilot
Messages postés
1212
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
8
0
Merci
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
Commenter la réponse de Calade
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
0
Merci
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.
Commenter la réponse de pitipilot
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
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
Commenter la réponse de 4u4me4us
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
0
Merci
Le champ TimeStmp contient des dateTime en mm/jj/aaaa hh:mm:ss
Commenter la réponse de pitipilot
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
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.
Commenter la réponse de 4u4me4us
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
0
Merci
J'ai regardé dans ma BDD et c'est bien un DateTime =).
Commenter la réponse de pitipilot
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
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"
Commenter la réponse de 4u4me4us
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
0
Merci
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.
Commenter la réponse de pitipilot
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
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
Commenter la réponse de 4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Bien calade !!! Je ne savais pas que l'on pouvais faire ainsi!!!
Commenter la réponse de 4u4me4us
Messages postés
1212
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
8
0
Merci
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
Commenter la réponse de Calade
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
0
Merci
Merci beaucoup à vous deux la requête marche impeccable. Merci encore
Commenter la réponse de pitipilot