Page d'Accueil

Commande d'une base de données

 
 

Procédures stockées

 

Introduction

Dans la Leçon 5, nous avons vu qu'un procédé était une tâche employée pour prendre soin d'un charger. Jusqu'ici, quand nous avons créé un procédé, nous l'avons confiné à un module: le module en lequel il a été créé. Normalement, une telle tâche a été prévue pour être employée seulement par l'objet (tel qu'une forme) qui a possédé ce module, à moins que nous ayons décidé d'appeler ce procédé quelque part autrement dans la base de données. Une des limitations principales d'un tel procédé est que ce n'est pas un objet et il ne peut pas être sauvé en tant que tels. L'AGITATION fournit une alternative.

 

Vous pouvez créer un procédé et le sauver comme objet. Bien que vous puissiez employer l'événement d'un bouton, d'une forme, ou d'une commande différente pour créer le procédé, l'objet ou la commande ne possède pas le procédé. En fait, après avoir créé le procédé, ce devient un objet et vous pouvez lui accéder n'importe où dedans de la base de données. En outre, le procédé est sauvé comme objet (comme fait pour une table, une question, ou une forme) et il est stocké dans la base de données. Puisque le procédé est stocké comme objet, il désigné sous le nom d'un procédé stocké.

Comme une vue, un procédé stocké n'est pas représenté dans la fenêtre de base de données. Ceci signifie que, après avoir créé, vous devriez se rendre compte de son existence ou vous devriez trouver une manière de savoir que ce qui a stocké les procédures sont disponibles dans votre base de données.

Créer un procédé stocké

Pour créer un procédé stocké, début avec l'expression de PROCÉDÉ de CRÉER. Vous pouvez également employer CRÉEZ PROC. Les deux expressions produisent le même résultat. Comme tout dans votre base de données, vous devez appeler votre procédé stocké. Le nom d'un procédé stocké peut être n'importe quelle corde qui suit les règles que nous avons passées en revue pour appeler des objets.

Après le nom du procédé, dactylographier COMME mot-clé. La section, le groupe de mots, ou le groupe de lignes après COMME mot-clé s'appelle le corps du procédé. Il énonce ce que vous voulez le procédé fasse ou ce que vous voulez qu'il produise. Basé sur ceci, la syntaxe la plus simple de définir un procédé est :

CREATE PROCEDURE ProcedureName
AS
Body of the Procedure

Il est important de maintenir dans l'esprit qu'il y a beaucoup d'autres questions rapportées à créer un procédé mais pour maintenant, considérons cette syntaxe.

Probablement le procédé le plus simple que vous pouvez écrire se composerait choisir des colonnes à partir d'une table. Ceci est fait avec le mot-clé CHOISI et appliquer les techniques que nous avons passées en revue pour le choix de données. Un procédé stocké peut également être employé pour écrire de nouveaux disques dans une table ou pour mettre une ou quelque valeurs d'une ou certains à jour des disques. Par exemple, imaginer qu'une compagnie loue quelques entrepreneurs et tous seraient payées au même salaire. Vous pouvez créer un procédé stocké qui écrirait ce salaire dans chaque disque existant en les mettant à jour simplement. Le procédé stocké peut être créé comme suit:

Private Sub cmdPrepareNewMinSalary_Click()
    Dim conEmployees As ADODB.Connection
    Dim strProcedure As String
    
    Set conEmployees = Application.CurrentProject.Connection
    strProcedure = "CREATE PROCEDURE SetNewMinSalary " & _
                   "AS " & _
                   "Update Employees " & _
                   "SET HourlySalary = 12.50;"
    
    conEmployees.Execute strProcedure
    conEmployees.Close
End Sub

Ce procédé serait employé pour visiter chaque disque et pour assigner ou changer le salaire horaire de l'employé en 12.50.

Exécution d'un procédé stocké

Après avoir créé un procédé, pour obtenir son résultat, vous devriez l'exécuter. Pour exécuter un procédé, vous employez le mot-clé d'EXÉCUTION suivi du nom du procédé. Bien qu'il y ait quelques autres questions liées à exécuter un procédé, pour maintenant, nous considérerons que la syntaxe la plus simple pour appeler un procédé est:

EXECUTE ProcedureName

Alternativement, au lieu de EXÉCUTER, vous peut employer le mot-clé d'EXEC :

EXEC ProcedureName

Par exemple, pour exécuter le procédé ci-dessus, vous aviez l'habitude le code comme suit :

Private Sub cmdNewMinSalary_Click()
    Dim conEmployees As ADODB.Connection
    Dim strProcedure As String
    
    Set conEmployees = Application.CurrentProject.Connection
    strProcedure = "EXECUTE SetNewMinSalary;"
    
    conEmployees.Execute strProcedure
    conEmployees.Close
End Sub

Arguments et paramètres

Comme une fonction régulière, un procédé stocké peut prendre un ou plusieurs arguments. Pour créer un procédé qui prend un argument, dactylographier la formule CRÉENT LE PROCÉDÉ ou CRÉENT PROC suivi du nom du procédé, puis dactylographient le nom de l'argument. Le paramètre est créé comme une colonne d'une table. C'est-à-dire, un paramètre doit avoir un nom, un type de données et une longueur facultative. Voici la syntaxe que vous emploieriez :

CREATE PROCEDURE ProcedureName
(ParameterName DataType)
AS
Body of the Procedure

En mettant en application le procédé, vous pouvez définir ce que vous voulez faire avec les paramètres, dans le corps du procédé. Considérer la liste suivante d'employés ;

Imaginer que vous voulez augmenter le salaire des employés qui gagnent toujours le salaire minimum. Au lieu de placer simplement tout le monde minimum, vous pouvez créer un procédé stocké qui visiterait chaque disque et, toutes les fois qu'il trouvaille un salaire au-dessous de votre minimum, il le soulèverait. Vous pouvez créer comme le procédé comme suit :

CREATE PROCEDURE SetNewMinSalary 
(NewMinSalary Currency)
AS
	UPDATE Employees
        SET Salary = NewMinSalary
	WHERE HourlySalary < NewMinSalary

Ceci peut être fait en code comme suit:

Private Sub cmdPrepareNewMinSalary_Click()
    Dim conEmployees As ADODB.Connection
    Dim strProcedure As String
    
    Set conEmployees = Application.CurrentProject.Connection
    strProcedure = "CREATE PROCEDURE SetNewMinSalary " & _
                   "(NewMinSalary Currency) " & _
                   "AS " & _
                   "Update Employees " & _
                   "Set HourlySalary = NewMinSalary " & _
                   "WHERE HourlySalary < NewMinSalary;"

    conEmployees.Execute strProcedure
    conEmployees.Close
End Sub

En exécutant un procédé qui prend un paramètre, s'assurer vous fournir une valeur pour le paramètre. La syntaxe utilisée est :

EXEC ProcedureName ParameterValue

Si le paramètre est booléen ou numérique, vous assurez vous fournir une valeur appropriée. Si le paramètre est un caractère ou une corde, dactylographier sa valeur dans simple-cite. Si c'est un nombre, fournir une valeur valide. Voici un exemple :

Private Sub cmdSetNewMinSalary_Click()
    Dim conEmployees As ADODB.Connection
    Dim strProcedure As String
    
    Set conEmployees = Application.CurrentProject.Connection
    strProcedure = "EXECUTE SetNewMinSalary 10.15;"
    
    conEmployees.Execute strProcedure
    conEmployees.Close
End Sub

Quand ce code s'exécute, chaque employé dont le salaire est moins de 10.15 serait élevé à 10.15. L'autre serait gardé comme est. Le code ci-dessus produirait :

Un autre type de procédé peut être fait pour prendre plus d'un paramètre. Dans ce cas-ci, créer les paramètres dans la section avant COMME mot-clé, séparé par une virgule. La syntaxe que vous emploieriez est :

CREATE ProcedureName
(ParameterName1 DataType, ParameterName2 DataType, ParameterName_n DataType_n)
AS
Body of the Procedure

En appelant un procédé qui prend plus d'un paramètre, vous devez immobile fournir une valeur pour chaque paramètre mais vous avez deux solutions de rechange. La technique la plus simple se compose fournir une valeur pour chaque paramètre dans l'ordre exact qu'elles apparaissent du procédé.

Alternativement, vous pouvez fournir la valeur pour chaque paramètre dans l'ordre de votre choix. Dans ce cas-ci, vous devez dactylographier le nom de chaque paramètre et lui assigner la valeur correspondante.

Étude pratiqueÉtude pratique : Créant et en utilisant un procédé stocké avec des arguments

  1. Commencer le Microsoft Access et ouvrir la base de données de substance de loyer d'I que vous avez commencée dans la leçon 23
  2. Dans la section de formes de la fenêtre de base de données, droit-cliquer les produits et cliquer la vue de conception
  3. L'Access les propriétés de la forme et cliquent l'étiquette d'événement
  4. Double-cliquer sur la charge et cliquer son bouton de points de suspension
  5. Mettre en application l'événement comme suit :
     
    Private Sub Form_Load()
        Dim conEmployees As ADODB.Connection
        Dim strProcedure As String
        
        Set conEmployees = Application.CurrentProject.Connection
        
        strProcedure = "CREATE PROCEDURE SelectProductToRent " & _
                       "(ProdNbr Text) " & _
                       "AS " & _
                       "SELECT Make, Model, SerialNumber, "ProductCondition " & _
    		   "FROM Products " & _
                       "WHERE ProductNumber = ProdNbr;"
        conEmployees.Execute strProcedure
        
        strProcedure = "CREATE PROCEDURE SelectCustomer " & _
                       "(DriversLicenseNumber Text) " & _
                       "AS " & _
                       "SELECT FullName, Address, City, State, " & _
                       "PostalZIPCode, Country FROM Customers " & _
                       "WHERE DrvLicNbr = DriversLicenseNumber;"
        conEmployees.Execute strProcedure
        
        conEmployees.Close
    End Sub
  6. Revenir au Microsoft Access et commuter la forme à la vue de forme
  7. Fermer la forme de produits
  8. Une fois demandé si vous voulez sauver les changements, cliquer le non
  9. Dans la section de formes de la fenêtre de base de données, droit-cliquer RentalOrders et cliquer la vue de conception
  10. Sur la forme, cliquer la boîte des textes de SelectedProduct pour la choisir
  11. En cas l'étiquette de la fenêtre de propriétés, double-cliquent sur le foyer perdu et cliquent son bouton de points de suspension
  12. Mettre en application l'événement comme suit :
     
    Private Sub ProductSelected_LostFocus()
    On Error GoTo ProductSelected_Error
    
        Dim conIRentStuff As ADODB.Connection
        Dim rstIRentStuff As ADODB.Recordset
        Dim strSelectProduct As String
        
        Set rstIRentStuff = New ADODB.Recordset
        Set conIRentStuff = CurrentProject.Connection
        
        If IsNull([ProductSelected]) Then Exit Sub
        
        strSelectProduct = "EXECUTE SelectProductToRent '" & ProductSelected & "'"
        rstIRentStuff.Open strSelectProduct, conIRentStuff, adOpenDynamic, _
    			adLockOptimistic, adCmdText
        
        [Make] = rstIRentStuff("Make")
        [Model] = rstIRentStuff("Model")
        [SerialNumber] = rstIRentStuff("SerialNumber")
        [ProductCondition] = rstIRentStuff("ProductCondition")
        
        rstIRentStuff.Close
        conIRentStuff.Close
        
        Set rstIRentStuff = Nothing
        Set conIRentStuff = Nothing
        
    TheEnd:
        Exit Sub
        
    ProductSelected_Error:
        If Err.Number = -2147352567 Then
            MsgBox "The product number you entered is not valid." & vbCrLf & _
                   "Please try again!"
            
            [Make] = ""
            [Model] = ""
            [CarYear] = ""
           
            Resume TheEnd
        Else
            MsgBox "An error occurred when retrieving the product information" & _
               vbCrLf & _
                   "Please call the program vendor and report the error as follows:" & _
               vbCrLf & _
                   "Error #: " & Err.Number & vbCrLf & _
                   "Reason:  " & Err.Description
            Resume TheEnd
        End If
    End Sub
  13. Revenir au Microsoft Access et cliquer la boîte des textes de client pour la choisir
  14. En cas l'étiquette de la fenêtre de base de données, double-cliquent sur le foyer perdu et cliquent son bouton de points de suspension
  15. Mettre en application l'événement comme suit :
     
    Private Sub Customer_LostFocus()
    On Error GoTo Customer_Error
    
        Dim conIRentStuff As ADODB.Connection
        Dim rstIRentStuff As ADODB.Recordset
        Dim strSelectCustomer As String
        
        Set rstIRentStuff = New ADODB.Recordset
        Set conIRentStuff = CurrentProject.Connection
        
        If IsNull([Customer]) Then Exit Sub
        
        strSelectCustomer = "EXECUTE SelectCustomer  '" & Customer & "'"
        rstIRentStuff.Open strSelectCustomer, conIRentStuff, 
    			adOpenDynamic, adLockOptimistic, adCmdText
    
        [CustName] = rstIRentStuff("FullName")
        [CustAddress] = rstIRentStuff("Address")
        [CustCity] = rstIRentStuff("City")
        [CustState] = rstIRentStuff("State")
        [CustPostalCode] = rstIRentStuff("PostalZIPCode")
        [CustCountry] = rstIRentStuff("Country")
        
        rstIRentStuff.Close
        conIRentStuff.Close
        
        Set rstIRentStuff = Nothing
        Set conIRentStuff = Nothing
    
    TheEnd:
        Exit Sub
        
    Customer_Error:
        If Err.Number = -2147352567 Then
            MsgBox "The driver's license number you entered is not valid." & vbCrLf & _
                   "Please try again!"
                   
            [CustName] = ""
            [CustAddress] = ""
            [CustCity] = ""
            [CustState] = ""
            [CustPostalCode] = ""
            [CustCountry] = ""
            
            Resume TheEnd
        Else
            MsgBox "An error occurred when retrieving the car information" & _
               vbCrLf & _
                   "Please call the program vendor and report the error as follows:" & _
               vbCrLf & _
                   "Error #: " & Err.Number & vbCrLf & _
                   "Reason:  " & Err.Description
            Resume TheEnd
        End If
    End Sub
  16. Revenir au Microsoft Access
  17. Économiser et fermer la forme

Supprimer un procédé

Une des caractéristiques fortes d'un procédé stocké, par rapport aux fonctions dans des langues traditionnelles, est qu'un procédé stocké est traité comme un objet à son propre chef. Par conséquent, après l'avoir créée, si vous n'avez plus besoin de elle, vous pouvez se débarasser de elle.

Pour supprimer un procédé en code de SQL, la formule pour employer est :

DROP PROCEDURE ProcedureName

Naturellement, vous devriez s'assurer que vous êtes dans la bonne base de données et aussi que le nom de procédure existe.

Commandes

 

Introduction

De ce que nous avons appris dans les sections et les leçons précédentes, un rapport de SQL est une expression qui est présentée à l'interprète de SQL qui l'interprète et renvoie un résultat. L'AGITATION propose encore une autre manière de formuler et exécuter un tel rapport. Une commande est une action qui est créée ou formulée et soumise à la base de données. L'action peut être les types l'uns des des rapports et de questions de SQL que nous avons employées jusqu'ici. C'est-à-dire, elle peut se composer créer une base de données ou une table. Elle pourrait également se composer choisir des champs ou limiter la liste de valeurs d'une table.

Création de commande

Dans l'AGITATION, une commande est un objet de type commande. Pour la créer, vous pouvez d'abord déclarer une variable du type ADODB.Command et l'initialiser employant le nouvel opérateur. Voici un exemple :

Private Sub cmdVideosRatedR_Click()
    Dim cmdVideos As ADODB.Command
    
    Set cmdVideos = New ADODB.Command
    
End Sub

Une des caractéristiques d'une commande est l'action on le cense qu'effectuer. Ceci est indiqué pendant qu'une corde et lui est représentée par la propriété de CommandText de l'objet de commande. Il peut être semblable aux rapports l'uns des de SQL que nous avons employés jusqu'ici. Voici un exemple :

Private Sub cmdVideosRatedR_Click()
    Dim cmdVideos As ADODB.Command
    
    Set cmdVideos = New ADODB.Command
    
    cmdVideos.CommandText = "SELECT * FROM Videos WHERE Rating='R'"
End Sub

Alternativement, vous pouvez employer le nom d'une table comme texte de la commande. Le texte d'une commande peut également être le nom d'un procédé stocké.

Après réglage de l'action, vous devriez indiquer le type de commande qui sera exécuté. Les types de commandes sont des membres de l'agent recenseur de CommandTypeEnum. Si la commande est texte basé comme un rapport de SQL, vous pouvez indiquer le type comme adCmdText. Voici un exemple :

Private Sub cmdVideosRatedR_Click()
    Dim cmdVideos As ADODB.Command
    
    Set cmdVideos = New ADODB.Command
    
    cmdVideos.CommandText = "SELECT * FROM Videos WHERE Rating='R'"
    cmdVideos.CommandType = adCmdText
    
End Sub

Si le texte de la commande est indiqué comme nom d'une table, vous pouvez placer le type de commande à adCmdTable. Si le texte de la commande est représenté par le nom d'un procédé stocké, alors vous pouvez indiquer le type de commande comme adCmdStoredProc.

Après avoir employé un objet de commande, vous devriez le fermer. Pour faire ceci, vous pouvez appeler sa () méthode étroite.

Exécution de commande

Après avoir créé un objet de commande, pour employer son action, vous devez l'exécuter. Pour commencer, vous devriez indiquer quel raccordement serait employé pour la passer. Pour soutenir ceci, l'objet de commande est équipé d'une propriété appelée ActiveConnection. Vous pouvez assigner un objet de raccordement à cette propriété. Voici un exemple :

Private Sub cmdVideosRatedR_Click()
    Dim rstVideos As ADODB.Recordset
    Dim cmdVideos As ADODB.Command
    
    Set cmdVideos = New ADODB.Command
    
    cmdVideos.CommandText = "SELECT * FROM Videos WHERE Rating='R'"
    cmdVideos.CommandType = adCmdText
    cmdVideos.ActiveConnection = CurrentProject.Connection
     
    rstVideos.Close
    Set rstVideos = Nothing
    Set cmdVideos = Nothing
End Sub

Pour exécuter une commande, vous pouvez employer les objets de la commande elle-même, d'un raccordement, ou d'un Recordset. Pour exécuter une commande en utilisant l'objet de commande, vous pouvez appeler son exécutez () la méthode et l'assignez à un objet de Recordset. Voici un exemple :

Private Sub cmdVideosRatedR_Click()
    Dim rstVideos As ADODB.Recordset
    Dim cmdVideos As ADODB.Command
    
    Set cmdVideos = New ADODB.Command
    
    cmdVideos.CommandText = "SELECT * FROM Videos WHERE Rating='R'"
    cmdVideos.CommandType = adCmdText
    cmdVideos.ActiveConnection = CurrentProject.Connection
        
    Set rstVideos = cmdVideos.Execute
    
    rstVideos.Close
    Set rstVideos = Nothing
    Set cmdVideos = Nothing
End Sub

Alternativement, vous pouvez créer une commande pendant qu'un texte basait le rapport de SQL et le passe comme argument de source () à la méthode ouverte de Recordset.

 

 

 


Précédent Copyright © 2007, Yevol