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 Réponses :
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
Merci, je vais essayer
Pourrait être un peu plus que ce que vous recherchez, mais cela fonctionne.
Vous pouvez utiliser ceci:
dim rst as DAO.RecordSet set rst = CurrentDB.OpenRecordset("MyPTQuery")
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
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: strong> p> alors dans l'accès, j'ai une interroge avec la requête qui est: strong> p> 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. P> J'ai essayé ce qui suit p> alors dans l'accès, j'ai une interroge dans la requête qui est: strong> p> J'espère que c'est quelque chose de simple que je fais mal p> p> p> p> P>
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.