Comment passer un horodateur vers/à partir d'un SQL Stored Procedure avec ADO

Traductions disponibles Traductions disponibles
Numéro d'article: 196590 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Une colonne timestamp de SQL Server met automatiquement à jour chaque fois qu'une ligne est insérée ou mise à jour. Malgré son nom, une colonne timestamp de SQL Server n'est pas basée sur l'heure système et ne contient pas une valeur de date ou heure. Au lieu de cela, la colonne timestamp est un tableau de valeurs binaires. Le type de données adDBTimeStamp ActiveX Data Objects (ADO) est utilisé pour les dates. Dans la mesure où un horodatage SQL Server est une date ni une heure, n'utilisez pas adDBTimeStamp pour récupérer ou de passer des valeurs timestamp de SQL Server. Utilisez adVarBinary avec une taille de huit (8).

Plus d'informations

Vous pouvez extraire une ligne à l'aide d'un cachet de date comme critère. L'estampille doit être stockée dans une variable de type Variant. Utiliser un objet ADO Command. Ensuite, vous pouvez transmettre explicitement l'horodatage comme paramètre de ADO d'adVarBinary type et taille de huit (8).

Bien que vous pouvez récupérer des enregistrements basés sur une valeur d'horodatage, ne jamais modifier la valeur d'un cachet de date SQL Server. Permettent à SQL Server mettre à jour automatiquement des horodatages.

L'exemple de code suivant crée une table de test. La table de test possède une colonne datetime et une colonne timestamp.

Le code Visual Basic dans Command1 récupère un enregistrement en fonction d'une valeur datetime. L'horodatage est ensuite stocké dans une variable de type Variant.

Dans Command2, l'estampille obtenue par Command1 est utilisée pour extraire le même enregistrement. Le type de données ADO pour un horodatage est adVarBinary avec une taille de huit (8).

Étapes pour effectuer des tâches

Créer le tableau et insérer les enregistrements

  1. Ouvrez ISQL / puis sélectionnez la base de données pubs.
  2. Exécutez le code suivant pour créer la table et y insérer les enregistrements :
             CREATE TABLE whatime
      (
           id integer identity constraint p1 primary key nonclustered,
           aname char(10),
           tdate datetime,
           tstamp timestamp
       )
       Insert into  whatime(aname,tdate) values('Happy','10/31/98')
       Insert into  whatime(aname,tdate) values('Go','11/01/98')
       Insert into  whatime(aname,tdate) values('Lucky','11/02/98')
    
       select * from whatime  /* Just checking to see if it worked. */ 
    					

Création de l'application Visual Basic

  1. Ouvrez un nouveau projet .exe standard. Form1 est créé par défaut.
  2. Dans le menu projet, choisissez références, puis sélectionnez la bibliothèque Microsoft ActiveX Data Objects.
  3. Placez trois boutons de commande sur Form1.
  4. Collez le code suivant dans la fenêtre de code de formulaire :
          Option Explicit
    
          Private con As New ADODB.Connection
    
          'A SQL Server timestamp column is a binary array.
          ' We can store a timestamp in a Visual Basic Variant variable.
          Private varTStamp As Variant
    
          Private Sub Form_Load()
    
            Command1.Caption = "Retrieve by Date"
            Command2.Caption = "Retrieve by TimeStamp"
            Command2.Enabled = False
            Command3.Caption = "Quit"
    
           'This example uses the ODBC Provider with a Pubs DSN.
           'Modify your connect string as needed.
            con.CursorLocation = adUseClient
            con.Open ("DSN=Pubs;UID=sa;PWD=;")
    
          End Sub
    
          Private Sub Command1_Click()
    
            'Retrieve a row based on date
            'then store the retrieved timestamp column in a Variant.
    
            Dim rs As New ADODB.Recordset
    
            rs.ActiveConnection = con
            rs.Open "select * from whatime where tdate = '10/31/1998'"
    
            Debug.Print rs("id"), rs("aname"), rs("tdate"), rs("tstamp")
            Debug.Print rs("tstamp").Type   '128: timestamp is type adBinary
    
            ' Store the timestamp value, to retrieve the record in Command2.
            ' The timestamp must be stored in a Variant.
            varTStamp = rs("tstamp")
    
            Command2.Enabled = True
    
            rs.Close
            Set rs = Nothing
    
          End Sub
    
          Private Sub Command2_Click()
    
            'Retrieve a row using the timestamp value from Command1.
            'Use a Command object and a Parameter object to explicitly pass
            'the timestamp as adVarBinary, size 8.
    
            Dim cmd As New ADODB.Command
            Dim param As New ADODB.Parameter
            Dim rs As New ADODB.Recordset
    
            cmd.ActiveConnection = con
            cmd.CommandType = adCmdText
            cmd.CommandText = "select * from whatime where tstamp = ?"
    
           'The parameter must be type adVarBinary, size 8 to pass a timestamp.
    
            Set param = cmd.CreateParameter(, adVarBinary, adParamInput)
            param.Size = 8
    
            cmd.Parameters.Append param
    
            'Retrieve based on the Variant from Command1.
            param.Value = varTStamp
    
            Set rs = cmd.Execute()
    
            Debug.Print rs("id"), rs("aname"), rs("tdate"), rs("tstamp")
            Debug.Print rs("tstamp").Type     'Type 128: adBinary
    
            rs.Close
            Set rs = Nothing
            Set cmd = Nothing
    
          End Sub
    
          Private Sub Command3_Click()
    
             Unload Me
             End
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
    
             con.Close
             Set con = Nothing
    
          End Sub
    					

Références

Pour plus d'informations, consultez l'article suivant dans la base de connaissances Microsoft, qui traite des valeurs timestamp et RDO (Remote Data Objects) :
170380Comment à la valeur de TimeStamp affichage/accès à partir de/à SQL Server
Pour plus d'informations, consultez l'article suivant dans la base de connaissances Microsoft, qui énumère les constantes de type de données utilisées lors du passage de paramètres et leurs équivalents de chaîne :
181199Comment faire pour déterminer comment ADO will BIND Parameters
(c) 1998 Microsoft Corporation, tous droits réservés. Contribution Margery Simms, Microsoft Corporation.

Propriétés

Numéro d'article: 196590 - Dernière mise à jour: mercredi 2 mars 2005 - Version: 1.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.01
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
Mots-clés : 
kbmt kbdatabase kbhowto KB196590 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 196590
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com