Requêtes vb [Résolu]

edwinzap - 19 févr. 2013 à 21:58 - Dernière réponse :  edwinzap
- 26 févr. 2013 à 21:51
Bonjour
J'ai une base de données "time.mdb" possédant une table "temps" ayant comme champs: date1 (avec la date de début), date2 (avec la date de fin), veille (avec la durée de mise en veille). Je souhaiterais afficher dans un datagridview la requête suivante dont voici le code SQL d'access:

SELECT Temps.Date1 AS Date_J, Temps.Date1 AS Heure_debut, Temps.Date2 AS Heure_fin, nz([Veille]) AS temps_veille, [date2]-[date1] AS Temps_total, [date2]-[date1]-nz([veille]) AS Temps_travail
FROM Temps;

J'ai donc recréé la requête SQL dans VB 2010 comme ceci:
R_enregistrement = "SELECT date1 as [Date], date1 as [Heure début], date2 as [Heure fin], Veille, DATEDIFF([date2],[date1]) as [Temps travail], DATEDIFF([date2],[date1]) as [Temps total]  FROM temps"

Je dois donc faire la soustraction des deux dates mais la fonction DATEDIFF ou TIMEDIFF ne fonctionne pas.
Je me demandais donc comment il fallait s'y prendre pour créer une requête SQL basée sur une base de données access dans VB 2010 (faut-il importer des références, quel langage est utilisé au juste ).
Je me demandais également s'il était possible de créer directement cette table dans VB 2010 (sans passer par access, importation,...)? Est-ce conseillé.

Étant autodidacte, j'ai donc cherché des tutoriels qui pourrait m'aider dans la construction de requêtes SQL dans VB 2010, sans succès.

Merci d'avance.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscriptionModérateurStatut 28 août 2015 Dernière intervention - 20 févr. 2013 à 01:07
3
Merci
Salut

Avec le SQL de Access ou SQL Server, certaines fonctions VB peuvent être incluses dans les syntaxes SQL.
Par contre, il faut respecter les syntaxes de ces fonctions.
Ta requète remise en forme, sans modif, pour être lisible et compréhensible :
R_enregistrement = _
    "SELECT date1 as [Date], " & _
    "       date1 as [Heure début], " & _
    "       date2 as [Heure fin], " & _
    "       Veille, " & _
    "       DATEDIFF([date2],[date1]) as [Temps travail], " & _
    "       DATEDIFF([date2],[date1]) as [Temps total] " & _
    "  FROM temps"

Les fonctions DateAdd et DateDiff :
DateAdd("Intervale", Nombre, Date)
DateDiff("Intervale", Date1, Date2)
où Intervale (String) peut prendre les valeurs "s" pour secondes, "n" pour minutes (oui n, pas m), "h" heures, "d" jours, "ww" semaines, "m" mois, "q" trimestre et "yyyy" années.
La différence entre deux dates devra obligatoirement s'exprimer dans une seule unité (secondes à année).

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_Jack
0
Merci
Je bloque !!!
Merci pour l'information, mais cela ne m'as pas fait avancer beaucoup.
En effet, j'ai toujours un problème lors de l'exécution de la ligne "da.Fill(ds, "temps")" (data adaptater): "Aucune valeur donnée pour un ou plusieurs des paramètres requis."
Voici mon code:
Public Sub DGV()
        ds.Clear()
        Dim R_enregistrement As String
        R_enregistrement = _
            "SELECT date1 as [Date], " & _
            "date1 as [Heure début]," & _
            "date2 as [Heure fin]," & _
            "Veille," & _
            "DATEDIFF(s,[date2],[date1]) as [Temps travail]," & _
            "DATEDIFF(s,[date2],[date1]) as [Temps total]  " & _
            "FROM temps"
        cmd = New OleDbCommand(R_enregistrement)
        da = New OleDbDataAdapter(cmd)
        cmd.Connection = con
        da.Fill(ds, "temps")
        dt = ds.Tables("temps")
        Form_Historique.DGV_E.DataSource = dt

    End Sub

(DGV est un Datagridview)
Je suppose que ça devrait fonctionner même s'il n'y a aucune données dans la table (puisque je les rajoute par la suite). J'ai plusieurs fonctions qui ne fonctionnent pas (c'est le cas de le dire), comme la fonction ISNULL par exemple ("fonction utilisée avec un nombre d'arguments incorrect") alors que je mets ceci: ISNULL (Veille, 0)
Help!
Commenter la réponse de edwinzap
0
Merci
Salut,
je pense que tu devrais affecté ton
da = New OleDbDataAdapter(cmd)

avec:
da = New OleDbDataAdapter(R_enregistrement)


Toute fois, dans ta chaine de connexion,je ne comprend rien


Soyons Toujours à la disposition des autres
Commenter la réponse de MINDONGO
0
Merci
A mon avis j'ai du mélanger un peu.
J'ai en fait regarder le code source "Modif_ajout_supp_BDD" du site ainsi que "LES BASES POUR SE CONNECTER UNE BASE DE DONNÉES ACCESS AVEC VB.NET" du site. Mais ce sont deux manières de procéder complètement différentes. Je vais y regarder.
Commenter la réponse de edwinzap
0
Merci
normalement ton problème peut se trouver ici:
cmd = New OleDbCommand(R_enregistrement)
        da = New OleDbDataAdapter(cmd)
        cmd.Connection = con
        da.Fill(ds, "temps")
        dt = ds.Tables("temps")
        Form_Historique.DGV_E.DataSource = dt



Soyons Toujours à la disposition des autres
Commenter la réponse de MINDONGO
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscriptionModérateurStatut 28 août 2015 Dernière intervention - 20 févr. 2013 à 18:16
0
Merci
Je l'ai précisé lourdement, le premier paramètre de DateAdd ou DateDiff est une chaine, donc 's' et pas s tout seul.
Commenter la réponse de cs_Jack
0
Merci
Bonsoir
Alors voilà j'ai donc deux problèmes.
Le premier le voici: les champs [date1] et [date2] de ma base de donnée sont formater en date. Date1 = System.DateTime.Now et Date2 de même. Il ne devrait donc y avoir aucun problème lors de l'ajout de ces valeurs dans la base de donnée. Or une erreur survient me disant ceci: "Type de données incompatible dans l'expression du critère". Lorsque je les convertis en string ça fonctionne.

Mon deuxième problème (qui en découle surement) c'est que lorsque je fais dans la requête simplement Date1- date2 as [Temps Total] le formatage de la colonne du datagrid est incorrecte (or je mets DGV.Columns("Temps total").DefaultCellStyle.Format = "t")est un message d'erreur s'affiche.
J'ai également testé avec DATEDIFF mais la fonction ne va pas (même avec 's')

Voici donc le code pour la requête affichant les données:
Public Sub DGV()
        ds.Clear()
        Dim cmd As New OleDb.OleDbCommand
        Dim R_enr As String
        R_enr =
            "SELECT date1 as [Date], " & _
            "date1 as [Heure début]," & _
            "date2 as [Heure fin]," & _
            "Veille," & _
            "date2-date1 as [Temps total] " & _
            "FROM temps"
        cmd = New OleDb.OleDbCommand(R_enr, con)
        cmd.Connection.Open()

        Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
        da.SelectCommand = cmd
        da.Fill(ds, "temps")
        dt = ds.Tables("temps")
        Form_Historique.DGV_E.DataSource = dt
        cmd.Connection.Close()

    End Sub


et celle pour enregistrer:
  Dim cmd As OleDb.OleDbCommand
        Dim sql_ajouter = "INSERT INTO Temps (Date1, Date2, Veille) VALUES(Val_Date1, Val_Date2, Val_Veille)"
        cmd = New OleDb.OleDbCommand(sql_ajouter, con)
        cmd.Parameters.AddWithValue("Val_Date1", date1.ToString)
        cmd.Parameters.AddWithValue("Val_date2", date2.ToString)
        cmd.Parameters.AddWithValue("Val_Veille", veille)

        cmd.Connection.Open()
        cmd.ExecuteReader()
        cmd.Connection.Close()

        DGV()


Merci de m'aider.
Commenter la réponse de edwinzap

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.