Page d'Accueil

Introduction aux ensembles record

 

Un objet d'ensemble record

 

Introduction

Après avoir créé une table, vous pouvez la remplir de disques comme nous avons fait dans les leçons précédentes. Voici un exemple :

Nous avons également vu dans les leçons précédentes que vous pourriez créer une question qui choisit quelques disques à partir d'une table. Les disques qu'une table ou une question tient désigné sous le nom d'un ensemble de disques ou d'un ensemble record. Pour considérer tous comme entité, le Microsoft Access fournit un objet appelé un Recordset. La majeure partie du temps, vous employez un objet de Recordset sans se rendre compte parce que le moteur de base de données manipule toutes les ou la plupart routines nécessaires dans les coulisses. Dans quelques autres cas, vous devez créer ou lancer un objet de Recordset afin de l'employer. Pour faire ceci, vous avez de diverses solutions de rechange. En fait, la manière que vous créez un objet de Recordset peut dépendre de la bibliothèque vous employez lorsque vous devez « saisir » l'ensemble de disques.

Le type d'objets de Recordset

En créant un ensemble record car nous verrons dans les sections à venir, vous pouvez indiquer si employer une ou plusieurs tables et quels disques seraient inclus. Comment l'ensemble record est créé, le nombre de tables, le nombre de disques, et les types d'opérations qui peuvent être effectuées sur les disques mènent à de divers types d'ensembles record:

  • Si votre objet de Recordset inclut seulement une table, il est mentionné un ensemble record de Tableau
  • Si un ensemble record inclut une ou plusieurs tables, ce s'appelle un Dynaset. Ce type laisse ajouter, éditer, mettre à jour, ou supprimer les disques qui font partie de l'objet de Recordset
  • Un ensemble record s'appelle un instantané s'il te permet de regarder les disques d'une ou plusieurs tables, dirigeant dans les deux sens dans l'ensemble, mais vous ne pouvez pas faire des changements sur les disques
  • Un objet de Recordset est mentionné comme Vers l'avant-Seulement si vous pouvez regarder ses disques sans les changer mais vous pouvez seulement avancer. Ceci signifie qui, si vous obtenez à un disque, l'examinez, et se déplace au prochain disque, vous ne peut pas vous renvoyer à un disque à gauche derrière
  • Si vous créez une question basée sur des données d'une ou plusieurs tables et permettez aux utilisateurs de diriger dans les deux sens avec la capacité de faire des changements aux disques, ce type d'ensemble record désigné sous le nom dynamique.
 

Créer un objet de Recordset

Normalement, vous créez premièrement un ensemble record en peuplant une table avec les valeurs désirées. Sans compter que cette technique, nous avons mentionné dans la première leçon qu'il y avait de diverses bibliothèques que vous pouvez employer pour créer votre base de données. Chacune de ces bibliothèques fournit des moyens de créer un ensemble record. Pour être un lotisseur efficace de base de données, vous devriez savoir comment et quand créer un Recordset objectez.

Dans le sens strict, vous ne pouvez pas visuellement créer un Recordset dans le Microsoft Access, c'est-à-dire, de la fenêtre de base de données. Au lieu de cela vous devez écrire le code. Pour créer programmatically un objet de Recordset en utilisant la bibliothèque des programmes résultants de Microsoft Access, vous pouvez commencer par déclarer une variable de type Recordset. Voici un exemple :

Private Sub cmdRecordset_Click()
    ' Create a recordset
    Dim rstVideos As Recordset
End Sub

C'est essentiellement la même technique que vous employez dans DAO sauf que vous devez déclarer la variable en tant qu'étant du type DAO.Recordset.

Pour créer un ensemble record en utilisant l'AGITATION, commencer par déclarer une variable du type ADODB.Recordset. Voici un exemple :

Private Sub cmdSetOfRecords_Click()
    Dim rstVideos As ADODB.Recordset
    
End Sub

Avant d'employer l'ensemble record, employer le nouvel opérateur pour assigner la mémoire pour elle. Voici un exemple:

Private Sub cmdSetOfRecords_Click()
    Dim rstVideos As ADODB.Recordset
    
    Set rstVideos = New ADODB.Recordset
End Sub

Après la déclaration de la variable, vous devez définir la source de ses disques. Naturellement, vous avez de diverses solutions de rechange.

L'objet de Recordset d'un objet

Dans des leçons précédentes, nous avons vu que quelques commandes, telles que la boîte combo ou la boîte de liste, ont été censées pour tenir une liste de valeurs. Nous savons également qu'une forme ou un rapport est principalement créée pour montrer un ou plusieurs disques. De telles commandes tiennent leur propre ensemble record. Si vous créez un objet de Recordset et voulez l'initialiser avec les valeurs tenues sous la forme où il s'appelle, vous pouvez simplement lui assigner Me.Recordset. Voici un exemple :

Private Sub cmdRecordset_Click()
    ' Create a recordset
    Dim rstVideos As Recordset
    
    ' Specify that the record set points to the records of this form
    Set rstVideos = Me.Recordset
End Sub

Quand une forme est équipée pour montrer les valeurs d'une liste, cette forme a un objet de Recordset qui représente ses disques. De nouveau, se rappeler qu'il y a de diverses autres manières que vous pouvez initialiser un objet de Recordset. Par exemple, si vous employez l'AGITATION, pour employer les disques de la forme qui l'appelle, vous pouvez assigner Me.Recordset à votre objet de Recordset. Voici un exemple :

Private Sub cmdSetOfRecords_Click()
    Dim rstVideos As ADODB.Recordset
    
    Set rstVideos = Me.Recordset
End Sub

Le clone de Recordset d'une forme

Nous avons vu que les commandes de Windows sur une forme pourraient être employées pour montrer des données d'une table. Ceci est fait en indiquant une liste de valeurs dans la propriété de RecordSource de la forme. Pour obtenir l'ensemble de disques que la propriété de RecordSource d'une forme tient, vous pouvez accéder à sa propriété de RecordsetClone.

Caractéristiques d'un ensemble record

 

La source

Pour travailler sur un ensemble record, vous devez communiquer au moteur de base de données quelles règles votre ensemble suivra pour être considéré en tant que tels. Dans les Leçons 8 et 9, nous scie comment créer une table et ses colonnes. Dans la Leçon 12, nous avons vu comment peupler une table avec des données. Nous avons vu qu'une table dans la Leçon 10 ou une question dans la Leçon 15 pourrait être employée comme source record de forme (ou en tant que cela d'un rapport). Une fois que la table a été créée, on le considère un ensemble record. Vous pouvez l'employer pendant que le contenu d'un Recordset objecte.

Le nombre de disques d'un ensemble record

Après avoir créé un ensemble record, vous pouvez vouloir savoir le nombre réel de disques qu'il contient. Cette information est stockée dans une propriété appelée RecordCount. Sur une forme, obtenir le nombre de disques qu'il contient, vous peut accéder à la propriété de RecordCount de son objet de RecordsetClone. Ceci pourrait être fait comme suit :

RecordsetClone.RecordCount

Ceci produirait tout le nombre de disques qu'une forme tient. De la même manière, l'objet de Recordset de la bibliothèque d'ADO fournit la propriété de RecordCount.

Un curseur

Jusqu'ici, c'est-à-dire, dans les leçons précédentes, nous avons été concernés par une base de données accédée par un utilisateur. Dans beaucoup d'environnements, une base de données devra être accédée par plus d'un ordinateur. Ceci signifie que, en créant un objet de Recordset, vous devez maintenir différents facteurs dans l'esprit. Par exemple, vous (réellement votre utilisateur) pouvez accéder à un disque ou à des séries de disques en même temps avec quelqu'un d'autre à partir d'un autre ordinateur. Dans certains cas, il peut habituellement y avoir seulement une personne employant une base de données et il pourrait de temps en temps y avoir quelqu'un d'autre mais de peu probable, bien que possible. Dans quelques autres cas, comme sur l'Internet ou à une grande entreprise, il pourrait y a beaucoup de personnes accédant, ou essayant d'accéder, une base de données, ou un ensemble spécifique de disques, en même temps.

Imaginer que vous travaillez sur une grande base de données telle qu'une application de banque qui a des milliers ou des millions de disques (tels que des milliers ou des millions de clients). Si vous voulez effectuer une opération sur les clients, vous pouvez devoir traiter beaucoup ou tous des disques. Vous pouvez également devoir traiter le fait que d'autres accèdent aux mêmes disques comme toi, en même temps.

Normalement, quelques opérations n'exigent pas de toi d'avoir accès à tous les disques, au moins non toute heure. En travaillant aux disques, ainsi en créant un objet de Recordset, vous pouvez indiquer une manière d'isoler une gamme des disques et de traiter seulement cette gamme. La gamme des disques que vous choisi s'appelle un curseur.

Puisqu'un curseur joue un rôle énorme dans un ensemble record, il y a différentes options en utilisant le. Pour soutenir ces options, il y a de divers types de curseurs:

  • Un curseur statique tient un ensemble constant de disques. Supposer que vous créez un ensemble record et l'ouvrez. Supposer en outre que toi seulement ou d'autres sans compter que toi travaille sur le même ensemble record. Vous obtenez à un disque et commencez à le regarder (ou même à travailler à lui). Après avoir employé ce disque, vous vous déplacez à un autre disque, et vous pouvez faire ceci dans les deux sens comme vous souhaitez. Supposer que, tout en faisant cette navigation de va-et-vient (nous apprendrons plus tard comment diriger programmatically par un ensemble record), une autre personne a accédé à un disque qui fait partie de votre ensemble record et a fait à un changement. Si à l'aide d'un curseur statique, chaque fois que vous visitez l'ensemble record, il montre aux mêmes disques la manière ils étaient quand vous avez ouvert l'ensemble record. Il ne montrerait pas les changements qui sont intervenus. C'est pourquoi ce s'appelle un curseur statique. Un curseur statique est approprié si vous n'êtes pas intéressés de connaître que quels changements sont intervenus depuis toi a ouvert l'ensemble record.
    Dans l'ADO, un curseur statique est représenté avec la constante adOpenStatic.
  • Un curseur est mentionné pendant que vers l'avant-seulement s'il te permet d'avancer par les disques. Voici comment cela fonctionne. Supposer que vous créez un objet de Recordset et indiquez son curseur. Supposer que, tout en en utilisant l'ensemble record, vous obtenez à un disque qui a été placé comme point de début de votre curseur. En outre, supposer que toi seulement ou d'autres sans compter que toi travaille au même disque. Si vous faites un changement sur le disque courant, on annoncera l'autre peuple. Si d'autres font un changement sur le disque courant, vous également sauriez. Après avoir employé ce disque, vous vous déplacez au prochain. Avec le curseur vers l'avant-seulement, vous ne pouvez pas vous déplacer de nouveau à un disque à gauche déjà. Ceci signifie que, même si vous travaillez toujours sur l'ensemble record, s'il y a des changements exécutés sur un disque vous à gauche derrière (par exemple, si une autre personne qui travaille aux mêmes changements record quelque chose sur un disque que vous avez passé déjà), vous ne pouvez pas savoir et vous ne pouvez pas découvrir parce que vous ne pouvez pas aller de nouveau à un disque à gauche derrière. Si ceci devient une nécessité, vous pouvez fermer le curseur et le rouvrir. Un curseur vers l'avant-seulement est approprié si vous n'avez pas besoin de diriger dans les deux sens parmi les disques d'un ensemble record. En raison de la manière cela fonctionne, si vous accédez à la propriété de RecordCount d'un curseur vers l'avant-seulement, qu'il produirait -1.
    Dans l'AGITATION, ce type ou curseur est représenté par adOpenForwardOnly la constante.
  • Un curseur s'appelle dynamique s'il détecte et montre tous les changements qui se produisent dans un ensemble record, si les changements sont provoqués par toi ou par d'autres qui accèdent à l'ensemble record en même temps. Ce type de curseur est approprié si vous voulez savoir, de phase, ce qui est dessus assorti à l'ensemble record que vous travaillez avec.
    Dans une base de données d'AGITATION, pour indiquer un curseur dynamique, employer la constante adOpenDynamic.
  • Un curseur réglé de clef crée et sauve une clef pour chaque disque qui a été modifié depuis que l'ensemble record a été ouvert. Si vous accédez au disque, la clef est employée pour vérifier les données de l'ensemble record.
    Un curseur réglé de clef est créé en utilisant la constante d'adOpenKeyset.
  • Si vous ne voulez pas indiquer un curseur en créant un ensemble record, vous pouvez employer adOpenUnspecified la constante.

Le raccordement

Dans la Leçon 4, nous avons présenté des raccordements de base de données et avons montré différentes manières de créer dessus. Nous avons employé ces techniques depuis la leçon 4. En créant un ensemble record, dans certains cas, particulièrement en utilisant l'AGITATION, vous pouvez devoir indiquer quel raccordement l'objet de Recordset emploierait.

Le type de serrure

Imaginer que, après avoir créé un ensemble record et avoir travaillé à lui, vous voulez commander qui autrement peut avoir accès aux disques de l'ensemble que vous employez. Pour exercer cette commande, vous pouvez créer une « serrure ». Ceci te permet, par exemple, d'empêcher d'autres de changer les disques jusqu'à ce que vous ayez fini avec eux. Pour soutenir fermant à clef, la bibliothèque d'AGITATION fournit de diverses options :

  • Quand un ordinateur se relie à une base de données, son utilisateur peut devoir faire des changements à de divers disques en même temps, comme supprimer une gamme des disques ou changer beaucoup de disques en même temps (comme donner un augmenter à beaucoup d'employés), au lieu de faire un changement, puis un autre, puis des autres. Pour ce type de scénario, quand les accès d'utilisateur les disques, au lieu de les monopoliser et d'attendre l'utilisateur pour finir une opération qui pourrait prendre longtemps, vous peuvent télécharger les disques sur l'ordinateur de l'utilisateur, et démonter l'utilisateur de la base de données. L'utilisateur ferait alors les changements nécessaires. Quand l'utilisateur est prêt à commettre les changements, vous pouvez alors rebrancher au point d'émission de données et soumettre les changements. Ce type de serrure désigné sous le nom du groupe optimiste. L'AGITATION soutient ceci par une valeur constante appelée adLockBatchOptimistic
  • Vous pouvez avoir une base de données cet accès différent de peu de gens en même temps. Si la base de données est assez petite, qui est la caisse pour l'environnement restreint, la probabilité de deux personnes éditant ou mettant le même disque (en même temps) peut être basse. Dans ce cas-ci, vous pouvez indiquer que vous voulez fermer le disque seulement si nécessaire. Dans ce cas-ci, vous employez ce qui désigné sous le nom de la fermeture optimiste. Ceci est mis en application en utilisant la valeur adLockOptimistic
  • Les deux options ci-dessus supposent que vous fermeriez beaucoup de disques pour appliquer les scénarios indiqués. Si vous préférez fermer un disque à la fois, vous pouvez employer ce qui désigné sous le nom de la fermeture pessimiste. Ceci est fait en utilisant la constante adLockPessimistic
  • Les trois scénarios ci-dessus permettent à un utilisateur d'éditer et/ou mettre les disques qui sont inclus dans l'ensemble. Dans certains cas, vous pouvez vouloir empêcher n'importe quelle édition ou mise à jour sur les disques tandis que l'ensemble est accédé. Dans ce cas-ci, vous pouvez placer les disques à inaltérable. Pour faire ceci, vous pouvez fermer l'ensemble à l'aide adLockReadOnly de la serrure
  • Si vous ne voulez pas indiquer le type de système de serrure pour employer sur un ensemble record, employer adLockUnspecified la valeur

Ouverture d'un ensemble record

 

Employer la bibliothèque des programmes résultants de Microsoft Access ou le DAO

Avec la bibliothèque des programmes résultants de Microsoft Access ou le DAO, pour créer un objet de Recordset en utilisant une table ou une question qui est associée à une base de données, vous pouvez appeler la méthode d'OpenRecordset () de cette base de données. La syntaxe de cette méthode est :

Set Variable = Database.OpenRecordset(Source[, Type [, Options [, Lockedits ]]])

Le facteur variable peut être une variable d'objet que vous auriez déclarée comme placeholder pour un objet de Recordset. Le facteur de base de données doit représenter une base de données valide. Il peut être la base de données courante ou encore. le seul argument exigé de cette méthode est la source, qui est passée comme corde. Ceci peut être le nom d'une table ou d'une question. Voici un exemple :

Private Sub cmdGetVideos_Click()
   Dim dbVideoCollection As Object
   Dim rstVideos As Object

   Set dbVideoCollection = CurrentDb
   Set rstVideos = dbVideoCollection.OpenRecordset("Videos")

End Sub

Quand cette méthode s'exécute, elle recherche les disques stockés dans une table ou une question appelée Videos et crée un ensemble record de elle.

Au lieu d'une table ou d'une question entière, c'est-à-dire, au lieu d'inclure toutes les colonnes d'une table ou d'une question, vous pouvez vouloir choisir seulement une ou quelque colonnes pour mémoire réglées. Pour faire ceci, créer un rapport CHOISI de SQL et le passer à la méthode d'OpenRecordset (). Voici un exemple :

Private Sub cmdGetVideos_Click()
   Dim dbVideoCollection As Object
   Dim rstVideos As Object

   Set dbVideoCollection = CurrentDb
   Set rstVideos = dbVideoCollection.OpenRecordset("SELECT Title, " & _
                            "CopyrightYear, Rating FROM Videos")
End Sub

Cette fois, seulement quelques colonnes seraient considérées dans l'objet de Recordset.

Employer un Tableau ou une question

Le code ci-dessus suppose que vous passeriez par une base de données pour créer un ensemble record. Il peut être employé pour créer un ensemble record de la base de données courante ou d'une base de données fermée. Si vous travaillez dans une base de données qui fait vouloir ses propres objets et toi créer un ensemble record en utilisant un de ces objets, vous ne devez pas passer par l'objet de base de données. Chaque objet de base de données qui peut agir en tant qu'un point d'émission de données, y compris des tables et des questions, est équipé d'une méthode d'OpenRecordset (). Sa syntaxe est :

Set Variable = object.OpenRecordset([Type [, Options [, Lockedits ]]])

Noter que, cette fois, vous n'indiquent ni la base de données ni le nom de l'objet. Voici curDatabase

Private Sub cmdRstNames_Click()
    Dim curDatabase As Object
    Dim rstCustomers As Object
    Dim tblCustomers As Object

    ' Get a reference to the current database
    Set curDatabase = CurrentDb
    ' Get a reference to a table named Customers
    Set tblCustomers = curDatabase.TableDefs("Customers")
    ' Create a Recordset object from the specified table
    Set rstCustomers = tblCustomers.OpenRecordset
End Sub

Quand ce code fonctionne, il recherche les disques d'une table appelée Customers et crée un ensemble record de lui.

Employer l'AGITATION

Considérer la table suivante:

Plus tôt, nous avons vu que, en créant un ensemble record, vous pouvez devoir prendre en compte de divers facteurs. Pour considérer ces facteurs, l'objet de Recordset de la bibliothèque d'AGITATION est équipé () de la méthode ouverte. Sa syntaxe est :

recordset.Open Source, ActiveConnection, CursorType, LockType, Options

Tous les arguments sont facultatifs. Au lieu de l'appeler et fournir l'argument, vous peut d'abord indiquer chaque facteur en utilisant la propriété appropriée car nous verrons sous peu. Puis, après l'indication des propriétés, vous pouvez appeler la méthode sans n'importe quel argument en utilisant la syntaxe suivante :

recordset.Open

Le facteur de recordset peut être une variable de Recordset que vous avez précédemment déclarée. Le premier argument, source, peut être un rapport de SQL qui sera employé pour choisir les disques. Voici un exemple :

Private Sub cmdAnalyzeVideos_Click()
    Dim rstVideos As ADODB.Recordset
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "SELECT Title, Director, CopyrightYear, Rating FROM Videos"
End Sub

La source peut également inclure un facultatif OÙ la condition qui indique quels disques seraient considérés.

Au lieu d'appeler () la version ouverte de méthode qui s'attend à l'argument, vous pouvez d'abord indiquer la source de données. Pour soutenir ceci, l'objet de Recordset est équipé d'une propriété appelée Source qui est de type corde et qui peut recevoir la corde du point d'émission de données. Voici un exemple de l'employer :

Private Sub cmdVideoAnalyze_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Source = "SELECT Title, Director, CopyrightYear, Rating FROM Videos"
    
    rstVideos.Open
End Sub

Le deuxième argument de la méthode de Recordset.Open (), ActiveConnection, indique le raccordement par lequel l'ensemble record sera accédé. Ce peut être un raccordement comme ceux que nous avons vus dans les leçons précédentes. Voici un exemple qui emploie le raccordement à la base de données courante :

Private Sub cmdAnalyzeVideos_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "SELECT Title, Director, CopyrightYear, Rating FROM Videos", _
                   Application.CodeProject.Connection
End Sub

Au lieu de passer le raccordement à l'objet de Recordset, vous pouvez l'indiquer en tant que son propre objet. Pour soutenir ceci, l'objet de Recordset est équipé d'une propriété appelée ActiveConnection et c'est de type raccordement. Ce peut également être un raccordement valide comme ceux que nous avons employés jusqu'ici. Voici un exemple :

Private Sub cmdVideoAnalyze_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Source = "SELECT Title, Director, CopyrightYear, Rating FROM Videos"
    rstVideos.ActiveConnection = Application.CodeProject.Connection
    . . .
    rstVideos.Open
End Sub

Le troisième argument indique le type de curseur qui contrôlera l'accès à l'ensemble record. Les curseurs disponibles que nous avons passés en revue plus tôt sont des membres d'un agent recenseur (une liste de valeurs constantes) CursorTypeEnum appelé. L'argument de curseur peut juger une des valeurs des curseurs nous scie plus tôt. Voici un exemple :

Private Sub cmdAnalyzeVideos_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "SELECT Title, Director, CopyrightYear, Rating FROM Videos", _
                   Application.CodeProject.Connection, _
                   adOpenStatic
End Sub

Si vous voulez, vous pouvez indiquer le curseur séparément. C'est possible parce que l'objet de Recordset fournit une propriété appelée CursorType qui est de type CursorTypeEnum. Voici un exemple de l'employer :

Private Sub cmdVideoAnalyze_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Source = "SELECT Title, Director, CopyrightYear, Rating FROM Videos"
    rstVideos.ActiveConnection = Application.CodeProject.Connection
    rstVideos.CursorType = adOpenStatic
    
    rstVideos.Open
End Sub

Le quatrième argument, LockType, représente le type de fermer le système à clef qui sera appliqué sur l'ensemble record. Les types disponibles sont stockés dans un agent recenseur appelé LockTypeEnum. Les membres de cet agent recenseur sont ceux que nous avons passés en revue plus tôt. Voici un exemple de passer le quatrième argument :

Private Sub cmdAnalyzeVideos_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "SELECT Title, Director, CopyrightYear, Rating FROM Videos", _
                   Application.CodeProject.Connection, _
                   adOpenStatic, adLockOptimistic
    
    For Each fldEach In rstVideos.Fields
        MsgBox fldEach.Name
    Next
End Sub

Le dernier argument est employé pour identifier le type de l'argument de source. Les valeurs de cet argument sont des membres d'un agent recenseur appelé CommandTypeEnum.

Si la source est un rapport de SQL comme nous l'avons employé jusqu'ici, cet argument peut être passage comme adCmdText. Voici un exemple :

Private Sub cmdAnalyzeVideos_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "SELECT Title, Director, CopyrightYear, Rating FROM Videos", _
                   Application.CodeProject.Connection, _
                   adOpenStatic, adLockOptimistic, adCmdText
End Sub

Jusqu'ici, nous avons indiqué le facteur de source comme rapport de SQL. L'AGITATION te permet d'employer le nom d'une table comme source. Si vous faites ceci, le moteur de base de données accomplirait la source avec un rapport CHOISI. Par exemple, si vous passez la source comme table appelée Videos, le moteur de base de données le convertirait en

SELECT * FROM Videos;

Si vous passez le facteur de source comme nom d'une table, alors le dernier argument () de la méthode ouverte peut être passé comme adCmdTable. Voici un exemple :

Private Sub cmdVideoData_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "Videos", _
                   Application.CodeProject.Connection, _
                   adOpenStatic, adLockOptimistic, adCmdTable
    
    For Each fldEach In rstVideos.Fields
        MsgBox fldEach.Name
    Next
End Sub

Fermeture un ensemble record

Après avoir employé un objet de Recordset, vous devriez (fortement) le fermer. Pour fermer un ensemble record, vous pouvez appeler sa méthode Close(). Voici un exemple :

Private Sub cmdVideoData_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "Videos", _
                   Application.CodeProject.Connection, _
                   adOpenStatic, adLockOptimistic, adCmdTable
    
    For Each fldEach In rstVideos.Fields
        MsgBox fldEach.Name
    Next
    
    rstVideos.Close
End Sub

Après fermeture l'ensemble record, vous devriez libérer les ressources qu'il employait et les rendre disponibles à d'autres applications qui auraient besoin de elles. Pour faire ceci, assigner au rien la valeur à l'objet de Recordset. Voici un exemple :

Private Sub cmdVideoData_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "Videos", _
                   Application.CodeProject.Connection, _
                   adOpenStatic, adLockOptimistic, adCmdTable
    
    For Each fldEach In rstVideos.Fields
        MsgBox fldEach.Name
    Next
    
    rstVideos.Close
    Set rstVideos = Nothing
End Sub

Dans la leçon 4, nous avons vu que, après avoir employé un raccordement, vous devriez également le fermer en appelant sa () méthode étroite et vous devrions libérer ses ressources. Si vous aviez l'habitude la propriété d'ActiveConnection pour se relier à la base de données courante, pour la fermer, l'objet de Recordset est équipé d'une propriété appelée ActiveConnection. Avant fermeture l'objet de Recordset, vous devriez d'abord n'assigner rien à sa propriété d'ActiveConnection.

Les champs d'un Recordset

 

La collection de champs

Des techniques l'unes des nous avons employé ci-dessus, si en utilisant la méthode d'OpenRecordset () d'objet, un rapport de SQL ou le nom d'une table passée () à la méthode ouverte d'objet de Recordset, est employé pour choisir les disques. Les disques sont principalement identifiés par les colonnes qui les organisent., pour identifier les colonnes d'un ensemble record, chaque objet de Recordset des bibliothèques que nous avons jusqu'ici est équipés des zones identification d'une propriété, qui est une collection des colonnes de l'ensemble record.

Pour visiter des champs collection, vous pouvez employer a pour chacun… dans… le rapport Suivant conditionnel.

Un champ de la collection de champs

Chaque colonne de la collection de champs est un objet du type champ, qui est le nom commun d'une colonne dans des systèmes de base de données. En notre introduction aux colonnes dans la leçon 9, nous avons vu qu'un nom était sa caractéristique plus fondamentale. Pour identifier le nom d'une colonne, l'objet de champ est équipé de Name appelé par propriété. Voici un exemple de lui accéder :

Private Sub cmdVideoData_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Open "Videos", _
                   Application.CodeProject.Connection, _
                   adOpenStatic, adLockOptimistic, adCmdTable
    
    For Each fldEach In rstVideos.Fields
        MsgBox fldEach.Name
    Next
    
    rstVideos.Close
    Set rstVideos = Nothing
End Sub

Quand ce code s'exécute, il montrera le nom de chaque colonne dans une boîte de message, un par un.

La valeur d'un disque

Dans la leçon 12, nous avons vu qu'un disque a été créé en écrivant une valeur sous une colonne dans une table ou dans une commande de Windows d'une forme. Pour identifier la valeur tenue par une colonne, l'objet de champ est équipé d'une propriété appelée Value. Voici un exemple de l'employer :

Private Sub cmdVideoAnalyze_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Source = "SELECT Title, Director, CopyrightYear, Rating FROM Videos"
    rstVideos.ActiveConnection = Application.CodeProject.Connection
    rstVideos.CursorType = adOpenStatic
    rstVideos.LockType = adLockOptimistic
    rstVideos.Open
    
    For Each fldEach In rstVideos.Fields
        MsgBox fldEach.Value
    Next
    
    rstVideos.Close
    Set rstVideos = Nothing
End Sub

Quand ce code s'exécute, il visite chaque colonne, recherche sa valeur, et la montre dans une boîte de message.

Navigation record dans un ensemble record

 

Introduction

La navigation par un ensemble record se compose visiter ses disques. C'est semblable à utiliser les boutons de navigation au fond d'une table, d'une question, d'une forme ou d'un rapport. Nous scie comment à faire ceci manuellement. Nous avons également vu comment à faire ceci employant programmatically l'objet de DoCmd. L'objet de Recordset des appuis de bibliothèque d'AGITATION enregistrent la navigation par de diverses méthodes.

Se déplacer parmi des disques

Toutes les fois qu'effectuant une opération sur un disque, vous devriez savoir votre position dans l'ensemble. Toutes les fois que dans le doute, vous pouvez remettre à zéro votre position en se déplaçant au premier disque. Pour soutenir ceci, l'objet de Recordset est équipé d'une méthode appelée MoveFirst. Cette méthode ne prend aucun argument. Voici un exemple de l'appeler :

Private Sub cmdVideoAnalyze_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Source = "SELECT Title, Director, CopyrightYear, Rating FROM Videos"
    rstVideos.ActiveConnection = Application.CodeProject.Connection
    rstVideos.CursorType = adOpenStatic
    rstVideos.LockType = adLockOptimistic
    rstVideos.Open
    
    rstVideos.MoveFirst
    
    For Each fldEach In rstVideos.Fields
        MsgBox fldEach.Value
    Next
    
    rstVideos.Close
    Set rstVideos = Nothing
End Sub

Sans compter que le premier disque, une autre position extrême que vous pouvez se déplacer à est le dernier disque. Pour faire ceci, vous pouvez appeler la méthode de MoveLast () d'objet de Recordset.

Pour se déplacer d'un disque au prochain, vous pouvez appeler la méthode de MoveNext () d'objet de Recordset. Voici un exemple de l'appeler :

Private Sub cmdVideoAnalyze_Click()
    Dim rstVideos As ADODB.Recordset
    Dim fldEach As ADODB.Field
    
    Set rstVideos = New ADODB.Recordset
    rstVideos.Source = "SELECT Title, Director, CopyrightYear, Rating FROM Videos"
    rstVideos.ActiveConnection = Application.CodeProject.Connection
    rstVideos.CursorType = adOpenStatic
    rstVideos.LockType = adLockOptimistic
    rstVideos.Open
    
    rstVideos.MoveFirst
    rstVideos.MoveNext
    For Each fldEach In rstVideos.Fields
        MsgBox fldEach.Value
    Next
    
    rstVideos.Close
    Set rstVideos = Nothing
End Sub

Quand ce code s'exécute, la position record est d'abord déplacée à la première. Alors elle se déplace immédiatement au deuxième disque. Alors elle visite chaque colonne, recherche sa valeur correspondant au deuxième disque et la montre dans une boîte de message.

Pour se déplacer au disque précédent dans l'ensemble, appeler la méthode de MovePrevious () d'objet de Recordset.

Les méthodes de MoveFirst () et de MoveLast () te permettent de diriger un disque à la fois jusqu'à ce que vous obteniez à un certain disque. Si vous êtes placés à un certain disque et vous voulez sauter un certain nombre de disques en avant ou vous voulez s'écarter par un certain nombre de disques, vous pouvez appeler la méthode de mouvement (). Sa syntaxe est :

recordset.Move NumRecords, Start

Le premier argument est exigé. Son indique le nombre de disques pour sauter à. Si vous passez une valeur positive, la position serait déplacée en avant par ce nombre. Voici un exemple :

Private Sub cmdEditRecord_Click()
   Dim dbCustomers As Object
   Dim rstCustomers As Object

   Set dbCustomers = CurrentDb
   Set rstCustomers = dbCustomers.OpenRecordset("Customers")

   rstCustomers.Move 4
End Sub

Quand ce code s'exécute, il sauterait 4 disques en avant du disque courant d'une table appelée Customers. Vous pouvez également passer une valeur négative. Dans ce cas-ci la position serait déplacée derrière le disque courant par la valeur passée. Si l'ensemble record ne contient aucun disque quand vous appelez la méthode de Move(), vous obtiendriez une erreur 3021 :

Ne pas se déplacer au delà des extrémités

Certains, sinon la plupart des opérations exigent que vous restez dans la marge des valeurs de l'ensemble record. Si vous vous déplacez au-dessous du premier disque de disque, vous (réellement l'utilisateur) pouvez recevoir une erreur. De la même manière, si vous vous déplacez au delà du dernier disque, vous recevriez une erreur. Pour vous aider avec vérifier si vous êtes dans le premier disque, l'objet de Recordset fournit la méthode de BOF (). Cette méthode renvoie une valeur booléenne comme suit :

  • Si elle renvoie VRAI, alors vous êtes actuellement placés avant que le premier disque
  • Si elle renvoie FAUX, alors vous êtes ou au-dessus derrière le premier disque

D'une part, si vous voulez vérifier si vous êtes à la position la plus élevée des disques, vous pouvez appeler la méthode d'EOF () d'objet de Recordset. Il renvoie également une valeur booléenne comme suit :

  • S'il renvoie VRAI, alors vous êtes actuellement placés après le dernier disque
  • S'il renvoie FAUX, alors vous êtes ou au-dessous derrière le dernier disque

Étude pratiqueÉtude pratique : Navigation parmi des disques

 

  1. Ouvrir la base de données de ROSH
  2. Ouvrir les étudiants forment que vous travailliez dessus dans la leçon 15 et commutent à la vue de conception
  3. Intensifier la section de titre de bas de page de forme pour créer un certain espace au-dessous des commandes existantes.
    Vous le concevrez comme suit :
     
  4. Sur la boîte à outils, cliquer la boîte Combo et cliquer vers la gauche sous la boîte combo de SortBy. Si les débuts de magicien de boîte Combo, cliquent l'annulation
  5. Placer la légende de l'étiquette de accompagnement aux disques d'exposition où :
  6. Changer les propriétés suivantes pour la boîte combo :
    Nom : cboColumnNames2
    Type de source de rangée : Liste de valeur
  7. S'assurer que le bouton de magicien de commande de la boîte à outils est vers le bas. Sur la boîte à outils, cliquer la boîte Combo et cliquer du bon côté de la boîte combo précédemment supplémentaire dans la section de titre de bas de page de forme
  8. Dans la première page du magicien de boîte Combo, cliquer le deuxième bouton par radio (je saisirai les valeurs que je veux) et cliquer après
  9. Cliquer sous Col1 et type =
  10. Appuyer la touche de déplacement du curseur et le type <>
  11. Appuyer la touche de déplacement du curseur et le type <
  12. Appuyer la touche de déplacement du curseur et le type <=
  13. Appuyer la touche de déplacement du curseur et le type >
  14. Appuyer la touche de déplacement du curseur et le type >=
     
  15. Click après
  16. Accepter le premier bouton par radio et cliquer après
  17. Cliquer la finition
  18. Dans la fenêtre de propriétés, changer le nom de la nouvelle boîte combo en cboOperators
  19. Changer les largeurs de colonne et les valeurs de largeur de liste en 0.35
  20. Cliquer le champ et le type de valeur par défaut « = »
  21. Supprimer l'étiquette de accompagnement de la nouvelle boîte combo
  22. Sur la boîte à outils, cliquer la boîte Combo et cliquer du bon côté de la boîte combo nouvellement supplémentaire. If/When les débuts de magicien de boîte Combo, annulation de clic
  23. Dans la fenêtre de propriétés, changer le nom de la nouvelle boîte combo en cboValues
  24. Placer son type de source de rangée pour évaluer la liste et pour supprimer son étiquette de accompagnement
  25. Sur la boîte à outils, cliquer le bouton de commande et cliquer du bon côté de la boîte combo précédemment supplémentaire
  26. Changer ses propriétés comme suit :
    Nom : cmdSubmitFilter
    Légende : Soumettre le filtre
     
  27. Sur la boîte à outils, cliquer la boîte des textes et cliquer juste sur la boîte combo précédemment supplémentaire
  28. Supprimer son étiquette de accompagnement et changer ses propriétés comme suit :
    Nom : txtRegularString
    Évident : Faux
     
  29. Économiser la forme
  30. Sur la forme, cliquer la boîte combo gauche inférieure
  31. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer après mise à jour et cliquer son bouton de points de suspension
  32. Le mettre en application comme suit :
     
    Private Sub cboColumnNames2_AfterUpdate()
        On Error GoTo cboColumnNames2_Err
        
        Dim strValues As String
        Dim rstStudents As ADODB.Recordset
        Dim conStudents As ADODB.Connection
        Dim iCounter As Integer
        
        Set rstStudents = New ADODB.Recordset
        Set conStudents = CurrentProject.Connection
        
        rstStudents.Open "SELECT " & [cboColumnNames2] & " FROM Students", conStudents, adOpenKeyset, adLockOptimistic
        
        ' If the user selects a MI, display each letter of the alphabet
        ' in the Values combo box
        If cboColumnNames2.Text = "MI" Then
            For iCounter = 65 To 90 Step 1
                strValues = strValues & Chr(iCounter) & ";"
                Me.cboValues.Visible = True
                Me.cboValues.Enabled = True
                Me.cboOperators.Enabled = True
                Me.txtRegularString.Visible = False
            Next
            
        ' If the user selects DOB, then hide the Values combo box
        ' and display the text box so the user can enter a date
        ElseIf cboColumnNames2.Text = "DOB" Then
            Me.cboValues.Visible = False
            Me.cboOperators.Enabled = True
            Me.txtRegularString.Visible = True
            Me.txtRegularString.Enabled = True
        
        ' If the user selects Gender, then
        ' enter only the available options
        ElseIf cboColumnNames2.Text = "Gender" Then
            strValues = "Female;Male;Unknown;"
            Me.cboValues.Visible = True
            Me.cboValues.Enabled = True
            Me.cboOperators.Enabled = True
            Me.txtRegularString.Visible = False
        
        ' Addresses are too long
        ElseIf cboColumnNames2.Text = "Address" Then
            Me.cboOperators.Enabled = False
            Me.cboValues.Enabled = False
            Me.txtRegularString.Enabled = False
    
        ' If the user selects State, then
        ' enter only the state close to Washington, DC
        ElseIf cboColumnNames2.Text = "State" Then
            strValues = "DC;MD;VA;WV;"
            Me.cboValues.Visible = True
            Me.cboValues.Enabled = True
            Me.cboOperators.Enabled = True
            Me.txtRegularString.Visible = False
            
        ' If the user selects ZIPCode, then hide the Values combo box
        ' and display the text box so the user can enter a ZIP Code
        ElseIf cboColumnNames2.Text = "ZIPCode" Then
            Me.cboValues.Visible = False
            Me.cboOperators.Enabled = True
            Me.txtRegularString.Visible = True
        
        ' For all the other text-based options
        Else
            Do
                strValues = strValues & rstStudents.Fields(cboColumnNames2.Text) & ";"
                rstStudents.MoveNext
            Loop While Not rstStudents.EOF
            
            Me.cboValues.Visible = True
            Me.cboValues.Enabled = True
            Me.cboOperators.Enabled = True
            Me.txtRegularString.Visible = False
        End If
        
        cboValues.RowSource = strValues
        
        Exit Sub
    
    cboColumnNames2_Err:
        MsgBox "There was an error when filtering the records." & vbCrLf & _
               "Error #: " & Err.Number & vbCrLf & _
               "Description: " & Err.Description & vbCrLf & _
               "Please contact the program vendor if " & _
           "he is not sleeping at this time."
        Resume Next
    End Sub
  33. Revenir à la forme et cliquer le bouton droit inférieur
  34. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le clic et cliquer son bouton de points de suspension
  35. Le mettre en application comme suit :
     
    Private Sub cmdSumbmitFilter_Click()
    On Error GoTo cmdSumbmitFilter_Error
    
        Dim strFilter As String
        
        ' If the user selected DOB, then the filter should use # symbols
        If cboColumnNames2 = "DOB" Then
            strFilter = "" & cboColumnNames2 & " " & cboOperators & "#" & Me.txtRegularString & "#"
    
        Else
            strFilter = "" & cboColumnNames2 & " " & cboOperators & "'" & cboValues & "'"
        End If
        
        Me.Filter = strFilter
        Me.FilterOn = True
        
        Exit Sub
        
    cmdSumbmitFilter_Error:
        MsgBox "There was an error when filtering the records." & vbCrLf & _
               "Error #: " & Err.Number & vbCrLf & _
               "Description: " & Err.Description & vbCrLf & _
               "Please contact the program vendor."
        Resume Next
    End Sub
  36. Revenir au Microsoft Access et commuter la forme à la vue de forme
  37. Économiser la forme
  38. Essai filtrant les disques
  39. Fermer la forme

 


Précédent Copyright © Yevol, 2007 Suivant