Office: OpenRecordset mit SQL

Helfe beim Thema OpenRecordset mit SQL in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo! Ich weiß dass es Themen im Forum gibt, aber leider finde ich für mich keine Lösung. Nachdem ich in dem Forum mit einem ähnlichenThema bereits... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Anna Karl, 6. Juni 2025 um 20:26 Uhr.

  1. OpenRecordset mit SQL


    Hallo!
    Ich weiß dass es Themen im Forum gibt, aber leider finde ich für mich keine Lösung.
    Nachdem ich in dem Forum mit einem ähnlichenThema bereits Hilfe bekommen habe
    habe ich meinen Arbeitskollegen - der an einer Arbeitszeiterfassung bastelt, mit meinem bisschen Wissen über Recordset's meine "Hilfe" angeboten.
    Jetzt hänge ich wieder bei einem SQL-Str. Allerdings diesesmal mit der Meldung:
    1 Parameter wurde erwartet aber es wurden zu wenig Parameter übergeben
    Ich habe die Where-Zeile auch mit nur einem Parameter getestet, keine Chance.
    In den anderen Themen hab ich gelesen der Fehler dürfte in der Where-Zeile liegen, ich hab alles probiert.
    Den Code habe ich bis zur Zeile, die die Fehlermeldung auslöst eingefügt.

    Code:
    SQL = "SELECT tblBDs.BD_BDDatum, tblBDArt.BDArt_BD, tblBDArt.BDArt_LText, tblBDs.BD_Eingriff, tblPersonal.Pers_ID, tblPersonal.Pers_MitarbeiterName, tblBDs.BD_Beginn, tblBDs.BD_Ende " & _
      "FROM tblBDArt INNER JOIN (tblPersonal INNER JOIN tblBDs ON tblPersonal.Pers_ID = tblBDs.BD_Mitarbeiter) ON tblBDArt.BDArt_ID = tblBDs.BD_BDArt " & _
      "WHERE (((tblBDs.BD_BDDatum)=[vOldDatum]) AND ((tblPersonal.Pers_MitarbeiterName)=eval[vMitarbeiter]) and (tblBDs.BD_Ende =#00:00#))"
      Set rs = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
    
    Könnt Ihr mir den SQL-Str kontrollieren, warum es nicht funktioniert?
    Danke!
    Anna

     
  2. Hallo Anna,
    In der Annahme 'vOldDatum' ist eine Variable, die im Code befüllt wird:

    So wie Dein SQL-String gestaltet ist, wird der Wert aber in den Tabellen gesucht. Ähnliches vermute ich auch bei vMitarbeiter

    Sieh einmal unter www.donkarl.com (Pkt. 6.7): donkarls Access-Seiten

    Eine weitere Möglichkeit:

    ... where clng(DatumInDerTabelle) = " & DatumVariableAusCode & " and .....

    Falls auch die Uhrzeit berücksichtigt werden soll, dann ist anstelle clng ein cdbl zu verwenden. Access speichert Datum als Ganzzahl und Uhrzeit als Dezimalzahl.
     
    Crazy Business, 7. Juni 2025 um 06:16 Uhr
    #2
  3. kleine Korrektur:

    .. where clng(DatumInDerTabelle) = " & clng(DatumVariableAusCode) & " and .....
     
    Crazy Business, 7. Juni 2025 um 08:18 Uhr
    #3
  4. OpenRecordset mit SQL

    Hallo Crazy Business! Danke für den Hinweis. Ich habe die Zeile angepasst, aber nun bekomme ich die Meldung 2 Parameter wurde erwartet aber es wurden zu wenig Parameter übergeben.
    Code:
     "WHERE (((clng(tblBDs.BD_BDDatum))=clng([vOldDatum])) AND ((tblPersonal.Pers_MitarbeiterName)=[vMitarbeiter]) AND ((cdbl(tblBDs.BD_Ende))=cdbl(#00:00:00#)))"
    
    Ich glaube die letzte Bedingung verursacht noch den Fehler, komme aber nicht drauf wie ich die Zeit anders darstellen soll OpenRecordset mit SQL :(
    LG Anna
     
  5. Hallo Anna,

    Du mußt den Ausdruck clng(vOldDatum) als Variabke behandeln:

    falsch:
    (((clng(tblBDs.BD_BDDatum))=clng([vOldDatum])) AND ((tblPersonal ...

    korrekt:
    (((clng(tblBDs.BD_BDDatum))= " & clng([vOldDatum])) & " and ...

    Wie bereits erwähnt: Access behandelt Datumswerte als Ganzzahl, die Uhrzeit als Dezimalzahl: so zB ist 12:00 (mittags) die Zahl 0,5

    Der Vorteil bei Verwendung von cdbl bzw. clng: Du brauchst keine Formatierung!

    Du kannst das im Direktfenster ausprobieren:
    Debug.Print cdbl(45123.5)
    bzw Debug.Print clng(45123.5)

    Wenn vMitarbeiter eine Strungvariable ist, dann mußt Du noch ein Hochkomma ' vor dem doppelten Hochkomma " setzen:

    ... where Miarbeiter = ' " & vMitarbeiter & " ' and .....

    lgCB
     
    Crazy Business, 7. Juni 2025 um 20:55 Uhr
    #5
  6. Hallo Anna,

    sorry - ich hab vorhin vom Handy geantwortet (was naturgemäß ein wenig mühsam ist)
    hier nun ein Vorschlag:

    ... " WHERE clngtblBDs.BD_BDDatum=" & clng[vOldDatum] & " AND tblPersonal.Pers_MitarbeiterName= '" & vMitarbeiter & "' AND cdbl(tblBDs.BD_Ende) = 0"

    wegen der Uhrzeit:
    ein cdate(0.5) liefert die Uhrzeit 12:00:00
    cdate(0.55) = 13:12:00
    für die Abfragesyntax mußt Du aber die Uhrzeit in eine Ganzzahl oder Dezimalzahl konvertieren, daher entweder cdbl (für Datum + Uhrzeit oder nur clng (für Datum) oder cdbl(Zahl < 1) nur Uhrzeit.

    lgCB
     
    Crazy Business, 7. Juni 2025 um 21:24 Uhr
    #6
  7. Danke für die schnelle Hilfe!
    Ich habe die Feinheiten korrigiert (das muß man mal wissen). Nun kommt keine Fehlermeldung mehr aber dafür weiß ich nicht ob nun die Abfrage kein Ergebnis liefert oder der Rest der Prozedur auch fehlerhaft ist
    Code:
    SQL = "SELECT tblBDs.BD_BDDatum, tblBDArt.BDArt_BD, tblBDArt.BDArt_LText, tblBDs.BD_Eingriff, tblPersonal.Pers_ID, tblPersonal.Pers_MitarbeiterName, tblBDs.BD_Beginn, tblBDs.BD_Ende " & _
            "FROM tblBDArt INNER JOIN (tblPersonal INNER JOIN tblBDs ON tblPersonal.Pers_ID = tblBDs.BD_Mitarbeiter) ON tblBDArt.BDArt_ID = tblBDs.BD_BDArt " & _
            "WHERE (((clng(tblBDs.BD_BDDatum))=" & CLng([vOldDatum]) & " AND ((tblPersonal.Pers_MitarbeiterName)='" & [vMitarbeiter] & "' AND cdbl(tblBDs.BD_Ende)=#00:00#)))"
          
      Set rs = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
    '   Die Felder mit den abgefragen Daten füllen
       If Not rs.EOF And rs.BOF Then
    '    Anzeigen der bereits erfassten  Daten
         BD_AZArt = rs!BD_AZArt
         BD_Beginn = rs!BD_Beginn
    '    Übernahme der Systemzeit
         BD_Ende = Time
       End If
      Set rs = Nothing
    
    Zur Erklärung: In einem Formular wird in der Früh das Tagesdatum, der Mitarbeitername die Arbeitszeitart und Beginnzeit erfasst und gespeichert.
    Mit der obigen Prozedur wird am Ende der Arbeitszeit nach Aufruf des selben Formular 's das Tagesdatum und der Mitarbeitername erneut eingegeben werden und mit den btnAZEnde die oben genannte Abfrage soll der in der Früh erfasste Datensatz gefunden werden, die bereits erfdassten Daten ausgegeben werden und in das das Arbeitszeitende die aktuelle Systemzeit erfasst werden. Mit einem Speichern-Btn soll der vollständige Datensatz gesichert werden.
    Ich hoffe Du hast nicht das Gefühl, Du sollst für mich den Code schreiben, aber ich brauche einfach noch Hinweise.
    Danke!
     
  8. OpenRecordset mit SQL

    Hi,

    immerhin ein kleiner Erfolg ;-)

    Ich wollte vorher schon nachfragen, da mir die joins suspekt waren:

    falls Du die Syntax mittels Abfrage erstelltst, so empfehle ich Dir eine Unterabfrage einzuschieben, welche einen der Joins in einer Unter-Abfrage behandelt. In einer Hauptabfrage kannst Du dann den anderen join auf die Unterabfrage (alles mit der Syntax aus der Entwurfsansicht der Abfragen) erledigen:

    Falls Du dennoch Daten erwartest, so solltest Du zu Testzwecken einmal Einschränkung auf die Uhrzeit bzw. Uhrzeit und Mitarbeiter weglassen - also die Abfrage ohne WHERE-Klausel, dann hast Du zumindest die Gewissheit, daß die Abfrage grundsätzlich funktioniert. (Ich schätze, Du wirst aber auch in diesem Fall keine Daten erhalten, da die joins nicht passen dürften. Überprüfe das in der Entwurfsansicht einer Abfrage - da müsstest Du die Beziehungen zwischen den Tabellen sehen.
    lgCB

    Falls nicht so skizziere mir kurz die involvierten Tabellen (bitte keine Echtdaten)
    lgCB
     
    Crazy Business, 7. Juni 2025 um 21:45 Uhr
    #8
  9. Doming
    Doming Erfahrener User
    Hallo Anna,
    Zu einem absoluten Zeitwert gehört immer ein Datum. Wenn Du also „6:00” abspeicherst, wird daraus der Datumswert 31.12.1899 6:00 oder dezimal „0.25”.
    Ich habe mir angewöhnt, die Zeiten immer als solche zu behandeln.

    Statt aber jedes mal im SQL-String den Ausdruck ..." & Format(DatumWert, "/# mm-dd-yyyy hh:nn:ss//#) & ".... schreiben zu müssen, schreibe ich mir in ein Modul diese Prozedur:
    Code:
    Public Function fncTimeSQL(vardatum As Variant) As String
        If Not IsDate(vardatum) Then Exit Function
        fncTimeSQL = Format(CDate(vardatum), "\#mm\/dd\/yyyy hh:nn:ss\#")
    End Function
    So wird aus der obigen Phrase dann ..." & fncTimeSQL(DatumWert) & "....
    Gruß
    Doming
     
Thema:

OpenRecordset mit SQL

Die Seite wird geladen...
  1. OpenRecordset mit SQL - Similar Threads - OpenRecordset SQL

  2. Benötige Hilfe bei SQL-Befehl

    in Microsoft Access Hilfe
    Benötige Hilfe bei SQL-Befehl: Hallo zusammen und alles Gute für 2025 Es ist mal wieder Sale-Zeit und jetzt müssen bei vielen Artikel zu eine festgesetzten Zeit die VK-Preise geändert werden. Man kann das in unserem...
  3. SQL: Filtern mit mehreren Werten aus einer Excelspalte (Liste)

    in Microsoft Excel Hilfe
    SQL: Filtern mit mehreren Werten aus einer Excelspalte (Liste): Hallo zusammen, ich bräuchte Eure Hilfe, bei dem ich nicht weitere komme. Ich lasse importiere SQL-Daten über mehrere Abfragen im Editor vor filtern. Eine Spalte über einen Artikel...
  4. SQL-Abfrage mit where

    in Microsoft Access Hilfe
    SQL-Abfrage mit where: SQL-Abfrage mit where-Parameter. PNrHaupt ist eine Zahl. Ich vermute, da liegt der Fehler, aber ich weiss nicht, wie ich das darstellen soll. Bei jeder neuer PNrHaupt soll eine neue Datei erstellt...
  5. Apostroph in sql Recordset

    in Microsoft Access Hilfe
    Apostroph in sql Recordset: Hallo Gemeinde, einen hätte ich noch: sqlTitel = "SELECT * FROM tbl_Files_Edited WHERE Titel='" & strTitel & "'" Set rs1 = db.OpenRecordset(sqlTitel) Enthält strTitel einen...
  6. Access - SQL: Inhalt auf 255 Zeichen beschränkt

    in Microsoft Access Hilfe
    Access - SQL: Inhalt auf 255 Zeichen beschränkt: Hallo zusammen, in Access habe ich ein Modul mit folgender Funktion: Public Function SQLListe(Nummer As Long) As String Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT Dokument...
  7. Abfrage mit den jüngsten Einträgen erstellen

    in Microsoft Access Hilfe
    Abfrage mit den jüngsten Einträgen erstellen: Hallo liebe Experten, ich bastel gerade an einer Access-Datenbank für die Besuche meiner Klienten. Aus meiner Tabelle "KlientenT" und einer weiteren Tabelle mit "BesucheT" möchte ich eine Abfrage...
  8. Openrecordset: 1 Parameter wurde erwartet ...

    in Microsoft Access Hilfe
    Openrecordset: 1 Parameter wurde erwartet ...: Hallo, Miniproblem, denke ich, aber ich komme nicht drauf: Code: Dim DB As Database Dim RST As Recordset Dim Krit As String Set DB = CurrentDb Krit = "SELECT ID FROM qrySelectRedGroup;" Set...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden