Problème requêtes SQL via VBA

Résolu
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 - 9 mai 2011 à 11:38
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 - 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

35 réponses

4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
10 mai 2011 à 10:50
Tu as déjà pus ramener des valeur de tables ? N'importe les qu'elle (autre que NULL)?
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
10 mai 2011 à 11:01
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
0
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 1
10 mai 2011 à 11:14
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
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
10 mai 2011 à 11:17
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 1
10 mai 2011 à 11:26
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.
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
10 mai 2011 à 11:39
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
0
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 1
10 mai 2011 à 11:57
Le champ TimeStmp contient des dateTime en mm/jj/aaaa hh:mm:ss
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
10 mai 2011 à 12:02
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.
0
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 1
10 mai 2011 à 12:04
J'ai regardé dans ma BDD et c'est bien un DateTime =).
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
10 mai 2011 à 12:09
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"
0
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 1
10 mai 2011 à 12:22
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.
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
10 mai 2011 à 12:59
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
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
10 mai 2011 à 15:34
Bien calade !!! Je ne savais pas que l'on pouvais faire ainsi!!!
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
10 mai 2011 à 15:38
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
0
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 1
10 mai 2011 à 15:41
Merci beaucoup à vous deux la requête marche impeccable. Merci encore
0
Rejoignez-nous