collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 70
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 4
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13810
  • stats Beiträge insgesamt: 64279
  • stats Themen insgesamt: 8691
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: gespeicherte Prozedur mit Parametern aus Formular ausführen  (Gelesen 402 mal)

Offline daniel.truniger

  • Newbie
  • Beiträge: 5
Hallo,

Ich möchte über eine Pass-Through Abfrage eine gespeicherte Prozedur auf dem SQL-Server ausführen und das Resultat zurückerhalten. Dies funktioniert, solange ich keine Parameter in der gespeicherten Prozedur verwenden.

Nun möchte ich eine Abfrage mit Parameterwerten aus einem Formular an den Server übermitteln.

Die Pass-Through sieht folgendermassen aus:
EXEC dbo.abfrage_ueber_garantienummer @Garantie='100155582E446200 0001                          '

den Parameter @Garantie möchte ich aus dem Formular auslesen.

Gemäss meinen Internetrecherchen ist dies nur per VBA möglich.
Leider sind meine VBA Kenntnisse gleich null.

Kann mir Jemand bei diesem Problem weiterhelfen?

Dani
 

Online PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 275
    • Tipps zu Access, VBA, SQL und Co.
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #1 am: Oktober 16, 2017, 10:50:56 »
Um den Parameterwert zu ändern, musst du den SQL-Text der Pass-Through-Abfrage, neu setzen.

Aus dem Gedächtnis und ungetestet, sieht das dann etwa so aus:
With CurrentDb.QueryDefs("deinePassThroughAbfrage")
   .SQL = "EXEC dbo.abfrage_ueber_garantienummer @Garantie='" & wertAusFormularfeld & "'"
   .Execute
End With
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1637
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #2 am: Oktober 16, 2017, 10:53:33 »
Hallo,
Geht das nicht auch direkt in der Abfrage? EXEC dbo.abfrage_ueber_garantienummer @Garantie=Forms!DeinForm!DeinFeld
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 178
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #3 am: Oktober 16, 2017, 11:00:12 »
Hier findest du eine Anleitung + Erklärung.
10 Jahre Access
 

Online PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 275
    • Tipps zu Access, VBA, SQL und Co.
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #4 am: Oktober 16, 2017, 11:18:38 »
Geht das nicht auch direkt in der Abfrage?
Nein, nicht bei einer Pass-Through-Abfrage.
Deren SQL-Statement wird komplett und unverändert an das jeweilige Backend-System durchgereicht (->Pass-Through). - Das Backend hat keine Zugriffsmöglichkeit auf Formulare im Frontend.
 

Offline daniel.truniger

  • Newbie
  • Beiträge: 5
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #5 am: Oktober 16, 2017, 12:22:01 »
Um den Parameterwert zu ändern, musst du den SQL-Text der Pass-Through-Abfrage, neu setzen.

Aus dem Gedächtnis und ungetestet, sieht das dann etwa so aus:
With CurrentDb.QueryDefs("deinePassThroughAbfrage")
   .SQL = "EXEC dbo.abfrage_ueber_garantienummer @Garantie='" & wertAusFormularfeld & "'"
   .Execute
End With

Hallo PhilS

Habe den Code folgendermassen ausprobiert:

Option Compare Database
Private Sub Befehl21_Click()

With CurrentDb.QueryDefs("Abfrage_stored_procedure")
   .SQL = "EXEC dbo.abfrage_ueber_garantienummer @Garantie='" & Text17 & "'"
   .Execute
End With

End Sub

Dieser Code ist "Beim Klicken" auf einem Button Hinterlegt.
"Text17" ist das Textfeld in diesem Formular wo ich den Wert eintrage.

Leider kommt folgende Fehlermeldung:

Laufzeitfehler '3065':
Eine Auswahlabfrage kann nicht ausgeführt werden.

was mache ich noch falsch ????

Dani




 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 953
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #6 am: Oktober 16, 2017, 12:36:29 »
Du musst den Abfragetyp der Abfrage auf Pass-Through festlegen.
Grüße von der (⌒▽⌒)
 

Offline daniel.truniger

  • Newbie
  • Beiträge: 5
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #7 am: Oktober 16, 2017, 12:38:01 »
Hier findest du eine Anleitung + Erklärung.

Hallo markus888,

So wie ich das sehe, wird mit diesem Code die Stored Procedure auf dem Server angepasst.
Dies ist ja nicht ziel meiner Abfragen.

Dani
 

Online PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 275
    • Tipps zu Access, VBA, SQL und Co.
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #8 am: Oktober 16, 2017, 12:54:06 »
With CurrentDb.QueryDefs("Abfrage_stored_procedure")
   .SQL = "EXEC dbo.abfrage_ueber_garantienummer @Garantie='" & Text17 & "'"
   .Execute
End With

End Sub
[...]
Leider kommt folgende Fehlermeldung:

Laufzeitfehler '3065':
Eine Auswahlabfrage kann nicht ausgeführt werden.
Das ist korrekt. - Ich hatte den Teil "...und das Resultat zurückerhalten." in deiner Frage überlesen.

Das Resultat kommt vermutlich als Datensatzgruppe (Recordset) zurück. Dann nimmst du folgende Änderung vor, um das Recordset im Code einer Variablen zuzuweisen.

Dim rs As Dao.Recordset
With CurrentDb.QueryDefs("Abfrage_stored_procedure")
   .SQL = "EXEC dbo.abfrage_ueber_garantienummer @Garantie='" & Text17 & "'"
   Set rs = .OpenRecordset
End With

Die Recordsetvariable rs enthält nun die Ergebnisse der Stored Procedure. Du kannst sie entweder per VBA weiterverarbeiten oder dem Formular als Datenherkunft zuweisen (Schreibgeschützt!).

Set Me.Recordset = rs
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 178
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #9 am: Oktober 16, 2017, 13:20:06 »

So wie ich das sehe, wird mit diesem Code die Stored Procedure auf dem Server angepasst.
Dies ist ja nicht ziel meiner Abfragen.

Das liegt wohl daran, das SP in DAO nur mangelhaft integriert sind.
Auch die Tatsache, dass man das Ergebnis einer SP nicht bearbeiten kann, macht das für mich eher zu einer Notlösung.

Ganz anders sieht die Sache bei ADO aus. Da gibt es weniger Einschränkungen. Die Einarbeitung in ADO benötigt aber Zeit und idealerweise beherrscht man die Grundlagen des Programmierens und des Selbststudiums schon.

LG Markus
10 Jahre Access
 

Online PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 275
    • Tipps zu Access, VBA, SQL und Co.
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #10 am: Oktober 16, 2017, 13:57:38 »
Hier findest du eine Anleitung + Erklärung.
So wie ich das sehe, wird mit diesem Code die Stored Procedure auf dem Server angepasst.
Das siehst du falsch. Der es wird nur die Abfragedefinition der Pass-Through-Abfrage im Access Frontend angepasst. - Genauso wie bei meinem Lösungsvorschlag.
Unterschied ist, dass ich vorschlage, dass Recordset aus der Abfrage direkt weiterzuverarbeiten, während in dem verlinkten Beispiel die geänderte Abfrage an ein Formular gebunden wird. - Etwa beides "gleich gut".

Wenn man meinen Lösungsvorschlag noch so erweitern würde, das er sich nicht auf einen bestehende PT-Abfrage bezieht, sondern eine neue, temporäre Abfrage erstellt, wäre dieser IMO vorzuziehen, da die Abhängigkeiten des Codes eliminiert wären.
 

Offline daniel.truniger

  • Newbie
  • Beiträge: 5
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #11 am: Oktober 16, 2017, 14:28:35 »
With CurrentDb.QueryDefs("Abfrage_stored_procedure")
   .SQL = "EXEC dbo.abfrage_ueber_garantienummer @Garantie='" & Text17 & "'"
   .Execute
End With

End Sub
[...]
Leider kommt folgende Fehlermeldung:

Laufzeitfehler '3065':
Eine Auswahlabfrage kann nicht ausgeführt werden.
Das ist korrekt. - Ich hatte den Teil "...und das Resultat zurückerhalten." in deiner Frage überlesen.

Das Resultat kommt vermutlich als Datensatzgruppe (Recordset) zurück. Dann nimmst du folgende Änderung vor, um das Recordset im Code einer Variablen zuzuweisen.

Dim rs As Dao.Recordset
With CurrentDb.QueryDefs("Abfrage_stored_procedure")
   .SQL = "EXEC dbo.abfrage_ueber_garantienummer @Garantie='" & Text17 & "'"
   Set rs = .OpenRecordset
End With

Die Recordsetvariable rs enthält nun die Ergebnisse der Stored Procedure. Du kannst sie entweder per VBA weiterverarbeiten oder dem Formular als Datenherkunft zuweisen (Schreibgeschützt!).

Set Me.Recordset = rs

Der Code zeigt jetzt keine Fehler mehr an.
Ich möchten das Resultat im gleichen Formular als Unterformular/-bericht anzeigen.
Leider habe ich nirgends gefunden wie ich einem solchen Unterformular die Datenherkunft auf "Set Me.Recordset = rs" setzen kann?

Dani
 

Online PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 275
    • Tipps zu Access, VBA, SQL und Co.
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #12 am: Oktober 16, 2017, 16:25:31 »
Leider habe ich nirgends gefunden wie ich einem solchen Unterformular die Datenherkunft auf "Set Me.Recordset = rs" setzen kann?
Me bezieht sich auf das Formular, das den Code enthält. Also wahrscheinlich das Hauptformular.

Wenn die Abfrageergebnisse in einem Unterformular dargestellt werden sollen, musst du einen entsprechenden Bezug auf das Unterformular schreiben.
Beispiel:
Set Me!deinUnterformularSteuerelement.Form.Recordset = rs
 
Folgende Mitglieder bedankten sich: daniel.truniger

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1637
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #13 am: Oktober 17, 2017, 14:48:49 »
Hallo Phil,
Vielen Dank für deine Aufklärung.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline daniel.truniger

  • Newbie
  • Beiträge: 5
Re: gespeicherte Prozedur mit Parametern aus Formular ausführen
« Antwort #14 am: Oktober 20, 2017, 12:30:24 »
Vielen Dank PhilS!
Habe es mittlerweile auch noch hingekriegt ;D.
Die Verknüpfung vom Unterformular zur Abfrage hat mir noch gefehlt.

Dani

Bitte keine vollständigen Beiträge zitieren. Ein Zitat macht hier ohnehin keinen Sinn, Du sprichst ja PhilS direkt an. Zitate verlängern die Beiträge und sind sparsam zu verwenden. Zitat entfernt. MzKlMu
« Letzte Änderung: Oktober 20, 2017, 12:44:19 von MzKlMu »