0
votes

Utilisez une valeur d'une zone de texte dans l'accès à une procédure stockée dans SQL Server.

J'espère que quelqu'un pouvait plaire à ce problème avec ce problème.

J'utilise l'accès comme système frontal avec des tables liées au studio SQL Server Management Studio, en utilisant ODBC. Cela a rendu la base de données lente, alors j'essaie de convertir les requêtes d'accès aux procédures stockées dans SSMS, puis de les exécuter comme passez à travers les requêtes dans l'accès. Cela a bien fonctionné jusqu'à présent, et les requêtes que j'ai converties fonctionnent très vite. P>

Cependant, je n'ai convertit que les requêtes qui ne nécessitent pas de variables choisies par l'utilisateur dans l'accès. Ce sont ceux que j'ai maintenant des difficultés avec. P>

Par exemple, disons que j'ai une table simple dans SSMS appelée [noms] composée de [Prénom], [Nom de famille] P> Je peux exécuter la procédure stockée suivante, nommée [Recherche], pour renvoyer tous les noms: P>

With CurrentDb.QueryDefs("qPass") .SQL = "exec SalesGeneralSearch " & strSearch Set Me.MyListBox.RowSource = .OpenRecordset End If


3 commentaires

Avez-vous examiné à l'aide d'Adodb.Recordsets pour exécuter vos SPS?


Merci pour votre réponse. Serait-il possible si vous pouviez fournir un peu plus de conseils, et cette façon, je peux, espérons-le, mon Google à travers le reste de cela? Merci


J'ai ajouté un exemple de ce que je fais lors de l'accès à SQL SPS de MS Access VBA. J'ai une configuration très similaire sur la vôtre, une entrée d'accès avant et un backend SQL Server. Cela a été une méthode fiable pour moi.


3 Réponses :


0
votes

Voici comment j'exécutez des procédures stockées SQL dans l'accès MS (VBA):

'ADODB connection (to SQL Server).
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
With cnn
    .ConnectionString = {your ODBC connection to SQL Server}
    .CommandTimeout = 30 '<-- optional, but speeds up connection problems.
    .Open
End With

'ADODB command (reference to SQL stored procedure)
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
    .ActiveConnection = cnn
    .CommandText = {your_stored_procedure_name}
    .CommandType = adCmdStoredProc
    .CommandTimeout = 0
    .Parameters.Refresh
End With

'Add your SP parameter(s)...
cmd.Parameters("@param_name").value = {your_value}

'ADODB recordset to capture your SP results.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
With RetVal
    .CursorLocation = adUseClient
    .CursorType = adOpenForwardOnly
    .CacheSize = 1
    .LockType = adLockReadOnly
    .Open cmd
End With

'Loop through the resultset...
Do While Not rs.EOF

    'Work with your resultset here...

rs.MoveNext '<-- don't forget this!
Loop

'Cleanup.
rs.Close
Set rs = Nothing


2 commentaires

Merci, je vais essayer


Pourrait être un peu plus que ce que vous recherchez, mais cela fonctionne.



0
votes

Vous pouvez utiliser ceci:

dim rst    as DAO.RecordSet
set rst = CurrentDB.OpenRecordset("MyPTQuery")


1 commentaires

Salut, merci beaucoup de me revenir à moi. J'ai eu quelques jours maintenant pour travailler sur la solution que vous avez fournie et j'ai également examiné des solutions similaires que vous avez fournies ailleurs. Je ne peux pas vous remercier assez, comme je l'ai presque trié mon problème. J'ai mis le nouveau code comme une réponse et je me demandais si vous avez eu des suggestions sur la manière dont je pourrais ajouter plus d'une variable



0
votes

Un peu d'une mise à jour de ma question initiale. En utilisant l'aide d'ici, j'ai réussi à faire fonctionner la requête pour une variable. Cela fonctionne comme suit:

SQL Procédure stockée: xxx

alors dans l'accès, j'ai une interroge avec la requête qui est: xxx

enfin, sur mon formulaire, j'ai un bouton qui exécute le VB suivant en cliquant sur: < Pré> xxx

comme je dis que cela fonctionne vraiment bien. Cela reçoit les résultats que je le veux aussi. Cependant, je voudrais également ajouter des variables de recherche supplémentaires, par exemple le nom de famille. J'en aurais également besoin pour fonctionner, si l'une des zones de texte d'accès était nulle ou une valeur d'une manière ou d'une autre définit leur valeur par défaut à une carte générique.

J'ai essayé ce qui suit

Procédure stockée SQL xxx

alors dans l'accès, j'ai une interroge dans la requête qui est: Xxx

puis enfin, sur ma forme, j'ai un bouton qui exécute le VB suivant click: xxx , lorsque j'essaie d'ajouter la deuxième variable, il ne fonctionne pas et le débogueur VBA dit «Compiler une erreur»

J'espère que c'est quelque chose de simple que je fais mal


0 commentaires