svenac2010
Goto Top

Access 2010 SQL Abfrage ergebnis Abfragen VBA

Hallo,
ich komme an einer Stelle nicht weiter.

ich habe eine SQL Abfrage, welche über ein Kriteriumswert() mir eine Anzahl von Werten zurückliefert


SELECT [CROSS Betriebe].Betriebsnummer, Count([CROSS Betriebe].Hauptbetrieb) AS AnzahlvonHauptbetrieb
FROM [CROSS Betriebe]
GROUP BY [CROSS Betriebe].Betriebsnummer
HAVING ((([CROSS Betriebe].Betriebsnummer)=varWert()));

Weiter habe ich ein Formular in welches ich den in der SQL Abfrage vorhanden Wert (varWert() ) eingebe.

Nun möchte ich, sobald ich in dem Formular ein Wert eingebe, dieser geprüft wird, ist der wert mehr als 1 mal vorhanden, dann führe X aus ansonsten Y

der Code funktioniert leider so nicht

Private Sub Text190_AfterUpdate()
 Dim strSQL As String
 Dim db As DAO.Database
 'Dim db1 As Database, Liste As Recordset  
 

   varWert = Text190
    DoCmd.Close acForm, "Betriebsübersicht"  
               
        
        strSQL = "SELECT [CROSS Betriebe].Betriebsnummer, Count([CROSS Betriebe].Hauptbetrieb) AS AnzahlvonHauptbetrieb FROM [CROSS Betriebe] GROUP BY [CROSS Betriebe].Betriebsnummer HAVING ((([CROSS Betriebe].Betriebsnummer)=varWert));"  
        Set db = CurrentDb
        Set Liste = db.OpenRecordset(strSQL, dbOpenSnapshot)
    MsgBox Liste.RecordCount
        If Liste.RecordCount > 1 Then
        ' Führe X aus  
		MsgBox "mehr als 1"  
       
        Else
		' Führe Y aus  
        MsgBox "nur 1 wert vorhanden"  

        End If

End Sub

Es erscheint der Hinweis:
Laufzeitfehler '3061'
1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben


Vielleicht kann mir hier jemand helfen

Content-ID: 206347

Url: https://administrator.de/contentid/206347

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

SlainteMhath
SlainteMhath 13.05.2013 um 09:35:52 Uhr
Goto Top
Moin,

magst Du uns auch noch verraten in welcher Zeile der Fehler passiert?`

lg,
Slainte
vossbaer
vossbaer 13.05.2013 um 11:22:23 Uhr
Goto Top
Moin,

1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben

der Fehler deutet immer auf ein fehlerbehaftetes SQL Statement hin hast Du die Abfrage so schonmal getestet?

LG
SlainteMhath
SlainteMhath 13.05.2013 aktualisiert um 11:28:41 Uhr
Goto Top
"SELECT ... HAVING ((([CROSS Betriebe].Betriebsnummer)=varWert));"  
Was genau soll den "varWert" sein? Wenn das eine Variable sein soll die aus dem Code an das SQL Statement übergeben werden soll, dann muss das so aussehen:

"SELECT ... HAVING ((([CROSS Betriebe].Betriebsnummer)=" & varWert & "));"  
svenac2010
svenac2010 13.05.2013 aktualisiert um 20:12:07 Uhr
Goto Top
Hallo,
danke für die Rückmeldungen

der VarWert ist ein Textfeld innerhalb eines Formulars.

Der Code soll eigentlich per SQL Abfrage prüfen ob ein Wert innerhalb einer Tabelle wie oft vorhanden ist und sollte dieses der Fall sein entweder oder als Aktion durchführen.

der jetzige code

varWert = Text190
        strSQL = "SELECT Betriebsnummer FROM [CROSS Betriebe] WHERE Betriebsnummer=" & varWert & ";"  
        Set db = CurrentDb
        Set Liste = db.OpenRecordset(strSQL, dbOpenSnapshot)
        MsgBox Liste.RecordCount
        If Liste.RecordCount > 1 Then
 '      MsgBox "mehr als 1"  
       'Me!cmdWeiter.Enabled = False  
        Else
        MsgBox "nur 1 wert vorhanden"  
        'Me!cmdWeiter.Enabled = True  
      Exit Sub
        End If

end Sub

Funktioniert hier leider nicht.
Es wird immer nur der wert 1 Ausgegeben, obwohl mehrfach vorhanden.
Bei einer manuellen Abfrage wird der Richtige Wert zurück gegeben.

Vielleicht kann hier nochmal jemand drüber schauen

Selbst im Bereich

MsgBox Liste.RecordCount
wird nur der Wert 1 anstatt z.b. 4 zurück geliefert
Biber
Biber 13.05.2013 aktualisiert um 19:08:32 Uhr
Goto Top
Moin svenac2010,

die Query macht schon das Richtige (vermutlich), aber was du abfragst, ist doch mitnichten der "AnzahlVonHauptbetrieb"-Wert, der dich vielleicht interessiert.
Du fragst doch immer nur die Anzahl der zurückgegebenen Zeilen (=.RecordCount) ab.
Und die ist immer =1, egal ob nun für den Betrieb varwert=4 nun zurückkommt, dass er 0 oder 1 oder 27 Hauptbetriebe hat.

Works as designed - ich würde mir da gar keine Sorgen machen.

Grüße
Biber
svenac2010
svenac2010 13.05.2013 aktualisiert um 20:12:53 Uhr
Goto Top
Hallo Biber,

wie frage ich den die Summe in meinem Fall ab, wenn .RecordCount falsch ist.
In der jetzigen SQL Abfrage, wird nur nach Betriebsnummer gesucht, nicht ,mehr nach Hauptbetrieb

Lt. Microsoft wird die Funktion RecordCount wie folgt angegeben

"...
Die RecordCount -Eigenschaft ist eine DAO-Eigenschaft, die die Anzahl der Datensätze in einer Tabelle in Ihrer Access-Datenbank angibt.
..."
svenac2010
svenac2010 13.05.2013 aktualisiert um 20:37:47 Uhr
Goto Top
Danke, Problem selber behoben.

Er muss auch wissen, wann der letzte Datensatz vorhanden ist


....
Set db = CurrentDb
        Set Liste = db.OpenRecordset(strSQL, dbOpenSnapshot)
        Liste.MoveLast
        If Liste.RecordCount > 1 Then
....
Biber
Biber 13.05.2013 aktualisiert um 20:44:53 Uhr
Goto Top
Moin svenac2010,

upps, sorry, ich hatte immer noch Bezug genommen auf die (korrigierte) Version der "SELECT Count(*)"-Abfrage aller Hauptbetriebsstätten eines Betriebes.

Okay, dann muss die Ursache noch banaler sein - ist denn die vielleicht die "Betriebsnummer" ein numerischer Wert und "varwert" ein Text?

Wäre im moment das Einzige, was mir noch einfiele.

Grüße
Biber

[Edit]
Viiiel langsamer getippselt als svenac2010 --- und ist jetzt gegenstandslos.
{/Edit]