2016-07-27 28 views
0

Im Moment habe ich eine Datenbank mit einem SQL Server-Back-End und ein MS Access-Front-End. In einem Formular werden die Ladezeiten meiner Benutzer langsam angezeigt. Das Formular sieht im Wesentlichen nach, wer der Benutzer ist (basierend auf seiner Login-ID, dieser Teil funktioniert), sieht ihre Zugriffsrechte (readonly, v. Update, etc; das funktioniert auch) und zieht dann die Projekte, die ihnen erlaubt sind zu sehen, basierend auf ihren Zugriffsrechten (das ist der Teil, glaube ich, läuft langsam).Verwenden einer gespeicherten Prozedur als ein MS-Access-Formular Recordsource

Um dieses Formular schneller laden zu können, habe ich das Gefühl, dass das Verschieben des letzten Teils, des Teils, der die Projekte anzieht, zu einer SSMS Stored Procedure führt.

Ich habe die gespeicherte Prozedur geschrieben, in SSMS, und ich habe den Code auf das 'Form Load' Ereignis, das die gespeicherte Prozedur aufruft. Das Problem, mit dem ich konfrontiert bin, ist, dass die Ergebnisse der gespeicherten Prozedur zur Datenquelle des Formulars werden. Ich habe Me.RecordSource ausprobiert, aber das scheint nicht zu funktionieren. Unten ist eine Kopie des Codes, der die gespeicherte Prozedur aufruft:

Das ist anders als mit Code zum Aufruf eines SP, weil ich bereits den Code, um es aufzurufen, aber ich brauche die Ergebnisse des SP zu sein die Recordsource eines MS Access Formulars.

Jede Hilfe oder Ideen werden geschätzt! (ZB ich dachte, zu versuchen, eine temporäre Tabelle zu verwenden, da die Datenherkunft zu dienen ...)

Dim rs1 As ADODB.Recordset 

Dim cmd As ADODB.Command 
Dim prm As ADODB.Parameter 

cn.ConnectionString = "DRIVER=SQL Server;SERVER=SERVERNAME;APP=Microsoft  Office XP;WSID=MYCOMPUTER;DATABASE=dbname;Trusted_Connection=Yes;" 

cn.Open 


Set cmd = New ADODB.Command 
Set rs1 = New ADODB.Recordset 
With cmd 
    .ActiveConnection = cn 
    .CommandType = adCmdStoredProc 
    .CommandText = "dbo.ProcProjectSelection" 
    Set prm = .CreateParameter("@xID", adVarChar, adParamInput, 10, Me.txtNetworkID) 
    .Parameters.Append prm 
     End With 

Wenn ich gesagt: Sets Me.RecordSource = RS1 Vor dem „enden mit“ ich einen Fehler SMS-Nachricht: „Ungültige Verwendung von Eigentum“

+1

Mögliches Duplikat von [MS Access-Aufruf gespeicherte SQL Server-Prozedur] (http: // stackoverflow.com/questions/18800727/ms-access-call-sql-server-stored-procedure) –

+0

Das ist anders als mit Code zum Aufruf eines SP, weil ich bereits den Code, um es aufzurufen, aber ich brauche die Ergebnisse der SP ist die Recordsource eines MS Access-Formulars. – revelations

+0

Möglicherweise ist der Parameter nicht gültig. Sie können die gespeicherte Prozedur mit denselben Parametern testen wie die Abfrage. –

Antwort

0

Lösung 1:

das Re-Cord Weisen zurück von Stored Procedure Objekt

fügen Sie diese Zeile auf dem Form.Recordset Ende des Codes

Set Me.Recordset = cmd.Execute 

Lösung 2:

Sie können Pass-Through-Abfrage basierend auf ODBC-Datenquelle erstellen, und verwenden Sie es als Datenquelle

Dann wird in dem Eigenschaftenfenster die Form, stellen Sie die Eigenschaften:

record source = your_pass_through_query 
recordset type = dynamic 

Edit:

Mein Rat Verwendung Lösung 2 viele Einstellung für Lärm und Laufzeitfehler

Beispiel zu vermeiden

: Fahren Sie durch Nordwind verwenden, und die gespeicherte Prozedur

Binden Sie Ihre Kontrollen in Form mit dem Feldnamen der Ergebnismenge die Abfrage

Private Sub Form_Open(Cancel As Integer) 
test 
End Sub 

Sub test() 
Dim qdf As DAO.QueryDef, rst As DAO.Recordset 
Set qdf = CurrentDb.CreateQueryDef("") 
qdf.Connect = "ODBC;Driver=SQL Server;Server=xxxx;database=northwind;Trusted_Connection=Yes;" 

' stored procedure with paramete 
qdf.SQL = "exec [CustOrderHist] 'ALFKI'" 

qdf.ReturnsRecords = True 
Set rst = qdf.OpenRecordset 

Set Me.Recordset = rst 

End Sub 
+0

Danke für die Hilfe ... Ich weiß es zu schätzen. Wenn ich es ausführe, bekomme ich in meiner Form keine Ergebnisse (und wenn ich zu Design View/Properties gehe, ist recordsource leer). Ich erwarte Ergebnisse zu erzielen, wenn ich es betreibe. (Dies ist mit Lösung 1). – revelations

+0

Ich rate Verwendung Lösung 2, für Sie können Recordsource-Eigenschaft verwenden. Ich bearbeite meine Antwort zum Beispiel. –

Verwandte Themen