Abfragen von Währungswerten aus Access DB

  • VB6

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von guenni.

    Abfragen von Währungswerten aus Access DB

    Hallo Forum

    Ich programmiere in VB 6.0 und stehe jetzt vor einem Problem. Da ich einsteiger bin habe ich das netzt schon länger durchforstet.Nur keine Ergebnis gefunden. hoffe mal ihr könnt mir helfen.

    ich möchte per VB code in einer Access DB nach einem Euro Betrag suchen.

    Wie muss die Syntax für die Selectabfrage aussehen?

    Mein Versuch:

    Visual Basic-Quellcode

    1. strDSQ = "SELECT * FROM Unkosten WHERE " & Spalte & " = " & Format(Begriff, "0.00 €") & ""
    2. Set rsTemp = DB.OpenRecordset(strDSQ, dbOpenDynaset)


    Bekomme aber einer Fehlermeldung. Vermutlich weil in Access der "PUNKT" als Tausenderstelle und das "KOMMA" als Dezimalstelle genutzt wird.

    Hat jemand einen Vorschlag?

    Vielen Dank im Voraus
    guenni

    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [✱ Neues Thema] klickt. ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Wie lautet die Fehlermeldung?

    Dein String ergibt sowas

    SQL-Abfrage

    1. SELECT * FROM Unkosten WHERE colX = "1.25 €"
    Das & "" kannste dir sparen
    Access ist mir unbekannt, allerdings solltest du mal händisch den SQL abfahren und auch gewährleisten, dass der denn läuft. Ich würde mich wundern.
    Müsste eher so aussehen SELECT * FROM Unkosten WHERE colX = '1.25 €'
    oder so SELECT * FROM Unkosten WHERE colX = 1.25 Geldspalten sind normalerweise keine Strings.

    Wenns der Punkt ist, dann ersetz doch den Punkt durch ein Komma..
    Hallo Ihr zwei
    Vielen Dank für eure Vorschläge.

    Bitte entschuldigt meine späte Rückmeldung. aber ich musste kurzfristig ins Krankenhaus.
    Ich stelle euch mal meine Suchroutine ein die zum Teil funktioniert.

    Visual Basic-Quellcode

    1. Public Function DBTabLesen(DBname As String, Tabname As String, Spalte As String, Begriff As Variant) As DAO.Recordset
    2. strPath = App.Path & "\" & DBname & ".mdb"
    3. Set DB = OpenDatabase(strPath)
    4. Select Case Spalte
    5. Case "Unternehmen", "IBAN", "Vertragsnummer", "Zahlungsart", "Zyklus", "Zweck"
    6. strDSQ = "SELECT * FROM " & Tabname & " WHERE " & Spalte & "= '" & Begriff & "'ORDER BY ID" ' (geht)
    7. Case "Buchungsdatum"
    8. strDSQ = "SELECT * FROM " & Tabname & " WHERE " & Spalte & "=" & Format(Begriff, "\#yyyy\-mm\-dd\#") & "ORDER BY ID" '(geht)
    9. Case "Betrag"
    10. strDSQ = "SELECT * FROM Unkosten WHERE Betrag=" & Format(Begriff, "#,##0.00 €;-#,##0.00 €")
    11. End Select
    12. Set DBTabLesen = DB.OpenRecordset(strDSQ, dbOpenDynaset)
    13. end function


    Wie Ihr seht muss ich bei der Suche nach einem Datum in der Access DB ein Format zur Suche vorgeben. Hat mit der Formatierung in Access zutun.
    Das funktioniert auch soweit. Ein eingegebenes Datum wird gesucht und gefunden.
    Ähnliches wird auch bei der Suche nach einem Geldbetrag der Fall sein. Nur hier bekomme ich es nicht hin.
    die Fehlermeldung ist immer" Laufzeitfehler 3075...Syntaxfehler (Komma) in Abfrageausdruck 'Betrag=(Betrag den ich suche...z.B 63,90 €)"
    Die 63,90 € stehen auch genauso in der DB..
    gebe ich 63.90 als Suchbegriff ein wird daraus 6.390,00 € mit dem gleichen Syntaxfehler.

    Ich hoffe ich konnte das ein wenig genauer erläutern und Ihr könnt mir helfen.

    Ich bedanke mich recht herzlich im Voraus.
    LG Günni

    PS: Bei
    strDSQ = "SELECT * FROM Unkosten WHERE " & Spalte & " = " & Begriff
    Kommt die Fehlermeldung "Datentyp in Kriterienausdruck unverträglich"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „guenni“ ()

    guenni schrieb:

    "Datentyp in Kriterienausdruck unverträglich"
    Welchen Datentyp hat denn die Spalte in der Datenbank?
    kann char sein oder money - evtl. sogar noch was anderes.
    Entsprechend muss man formatieren.


    char wäre übrigens ein Datenbank-Design-Fehler, da würd ich gleich empfehlen, wenn möglich die Datenbank-Struktur zu korrigieren.
    Hallo Erfinder
    Vielen Dank für deine Antwort.

    Der Datentyp in der Datenbank ist natürlich "Währung".
    deshalb formatiere ich ja den Betrag mit Format(Begriff,"0.00 €") um.
    Beim abspeichern neuer Einträge funzt es auch alles. Nur jetzt bei der Suche nach einem bestimmten Betrag nicht. ?(
    Es scheint aber an der internen Verarbeitung, wie beim Datum - da wird das amerikanische Format jjjj.mm.tt benutzt - zu liegen.
    es ist ja so das ich einen Währungsbetrag mit einem Dezimalpunkt eingeben muss, er aber mit Komma gespeichert wird.
    LG Günni
    Das mit Punkt und Komma ist mit Access immer so ein Problemchen. Und wenn dann noch deutsches Zahlenformat mit englischem Datenbankformat kollidiert ...

    In Deinem Fall ist das Tausendertrennzeichen das Problem. Und warum gibst Du bei der Abfrage auch das Eurozeichen mit an?
    Behandle es einfach wie ein Double.

    Mach einfach aus ​strDSQ = "SELECT * FROM Unkosten WHERE Betrag=" & Format(Begriff, "#,##0.00 €;-#,##0.00 €")
    ​strDSQ = "SELECT * FROM Unkosten WHERE Betrag=" + Replace(Begriff.ToString, ",", ".")

    Funktioniert bei mir seit Jahren einwandfrei.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Hallo Roland

    Vielen Dank für deinen Vorschlag.
    Leider denke ich mal bist du da bei VB.net. Ich hinke noch mit VB 6.0 hinterher :)
    ich habe deine select abfrage in meine Suchroutine eingebunden. Leider ohne Erfolg. Fehlermeldung "Objekt erforderlich"
    Solche Begriffe wie Replace und .ToString kenne ich aus VB 6 auch nicht. Vielleicht noch nicht, denn ich sehe mich noch als Einsteiger.
    Das Format, #,##0.00 €, für den Wert (in Begriff) hab ich mir auch aus einem Forumstipp ausgeliehen.

    Liege ich richtig in der Annahme mit VB.net oder kann ich jetzt neues dazu lernen?

    LG
    Günni
    @guenni

    Ja, ist VB.NET. Aber in VB6 gibts auch ein Replace
    vbarchiv.net/commands/cmd_replace.html
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Hallo Roland
    Dein Tipp mit "Replace" war Gold wert.
    Ich hab´s tatsächlich hinbekommen :)
    Hier mal das Ergbnis.

    Visual Basic-Quellcode

    1. Public Function DBTabLesen(DBname As String, Tabname As String, Spalte As String, Begriff As Variant) As DAO.Recordset
    2. strPath = App.Path & "\" & DBname & ".mdb"
    3. Set DB = OpenDatabase(strPath)
    4. Select Case Spalte 'Suche nach Text
    5. Case "Unternehmen", "IBAN", "Vertragsnummer", "Zahlungsart", "Zyklus", "Zweck"
    6. strDSQ = "SELECT * FROM " & Tabname & " WHERE " & Spalte & "= '" & Begriff & "'ORDER BY ID" ' (geht)
    7. Case "Buchungsdatum" 'Suche nach Datum
    8. strDSQ = "SELECT * FROM " & Tabname & " WHERE " & Spalte & "=" & Format(Begriff, "\#yyyy\-mm\-dd\#") & "ORDER BY ID" '(geht)
    9. Case "Betrag" 'Suche nach Geldbetrag
    10. Dim test
    11. test = Replace(Begriff, ",", ".")
    12. strDSQ = " SELECT * From " & Tabname & " WHERE " & Spalte & "=" & test '(geht)
    13. End Select
    14. Set DBTabLesen = DB.OpenRecordset(strDSQ, dbOpenDynaset)
    15. End Function


    Also Vielen Dank für den guten Tipp.
    LG
    Günni
    Allen die es lesen einen guten Rutsch, ein frohes, gesundes, und erfolgreiches neues Jahr.