Requêtes vb

Résolu
edwinzap - 19 févr. 2013 à 21:58
 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.

7 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 févr. 2013 à 01:07
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)
3
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!
0
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
0
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.
0

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

Posez votre question
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 févr. 2013 à 18:16
Je l'ai précisé lourdement, le premier paramètre de DateAdd ou DateDiff est une chaine, donc 's' et pas s tout seul.
0
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.
0
Rejoignez-nous