[VB/VBA] Comment exécuter des procédures stockées SQL Server

Comment exécuter des procédures stockées SQL Server [VB/VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 21-10-2003 à 14:07:07    

Salut!
 
Je souhaite migrer d'une appli Accessn sur Base de Données Access en la même appli Access, mais attaquant une base de données SQL Server!
 
Au début, je me suis contenté d'utiliser des tables liées Access->SQL Server(via ODBC). Ca marche, mais c'est vraiment lent!
 
Je veux donc utiliser une vraie techno Client/Server
 
Pour exécuter des requetes (genre Update) sur le server, j'ai constaté que de les envoyer via ODBCDirect reste le plus rapide :
 

Code :
  1. Dim wrkODBC As Workspace
  2. Dim myDb As Database
  3.  
  4. Set wrkODBC = CreateWorkspace("ODBCWorkspace", "sa", "", dbUseODBC)
  5. Workspaces.Append wrkODBC
  6. Set myDb = wrkODBC.OpenDatabase("", False, False, "ODBC;Driver={SQL Server};Server=(local);Database=TestDB" )
  7.   myDb.Execute "UPDATE ..."


 
Par contre, j'aimerais aussi pouvoir exécuter des Procédures Stokées SQLServer, avec des paramètres en sortie et une valeur de retour... Comment je pourrais faire?
 
Je suis un peu perdu dans toutes les technos disponibles (ADO? DAO? OLE DB, etc...), j'en ai essayé quelques unes pour exécuter des requêtes envoyées au serveur, mais j'aimerais en trouver une qui marche pour tous mes besoins et qui soit rapide! Est ce que la solution est ADO? Ou alors, j'ai intéret à mixer Les technologies?
 
Merci pour votre aide

Reply

Marsh Posté le 21-10-2003 à 14:07:07   

Reply

Marsh Posté le 21-10-2003 à 17:13:26    

ADO. Jette un oeil sur l'objet Command, je pense que c'est ce que tu cherches.

Reply

Marsh Posté le 21-10-2003 à 17:57:54    

   Dim lcmd             As New ADODB.Command
   Dim lrs              As New ADODB.Recordset
 
    ' Récupération des informations :
    With lcmd
        Set .ActiveConnection = mTechnique.U.bddConnection
        .CommandType = adCmdStoredProc
        .CommandText = "MA_PROCEDURE_STOCKEE"
        .Parameters.Append .CreateParameter("@PARAMETRE1", _
                                                adInteger, _
                                                adParamInput, _
                                                , _
                                                VALEURPARAMETRE1)
        .Parameters.Append .CreateParameter("@PARAMETRE2", _
                                                adInteger, _
                                                adParamInput, _
                                                , _
                                                VALEURPARAMETRE2)
        ' ...
        .Parameters.Append .CreateParameter("@PARAMETREN", _
                                                adInteger, _
                                                adParamInput, _
                                                , _
                                                VALEURPARAMETREN)
       ' Executer simplement :
       .Execute
 
       ' ou
       ' Mettre dans un recordset :
       Set lrs = .Execute
 
    End With
    Set lcmd = Nothing

Reply

Marsh Posté le 22-10-2003 à 09:22:36    

De mémoire tu dois pouvoir créer une requete Access de type SQL Direct.
La syntaxe de cette requete contient juste le nom de la procédure stockée SQL Serveur et ses paramètres.
Une propriété de cette requete permet de dire si celle ci est sensée renvoyer des enregistrements.
 
J'avais fait ça avec Access 97, je ne sais pas quelles modifications/améliorations ont pu être apportées depuis
 
a+

Reply

Marsh Posté le 24-10-2003 à 17:50:28    

Merci!
 
J4ai pas mal fait le tour de ADO, et c'est ce qu'il me faut : très rapide (meme plus rapide que ODBCDirect) et très flexible (possibilité de passer des paramètres In et Out, possibilité de récupérer la aleur de retour d'un procédure stockée)
 
Voilà!
 
Pour continuer de convertir mon appli en utilisant SQLServer comme source donnée (avec ADO donc), j'ai besoin de remplir des ListBox à partir de requêtes sur mes tables SQLServer!
 
Comment est ce que je pourrais m'y prendre? Je n'ai pas réussi à trouver de réponse sur le Web, et toutes les syntaxes que j'ai pu essayer ne marchent pas.
 
Merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed