Warum liefern zwei SQL-Suchen unterschiedliche Ergebnisse, obwohl das gleiche rauskommen sollte? [Workaround gefunden]

  • SQL

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Also, jetzt wird's affig.

    VB.NET-Quellcode

    1. Dim SQL = $"SELECT * FROM Tabelle WHERE ArtNr2>'0' AND ArtNr2<'9999999999'"
    2. Dim Counter = 0
    3. Using Reader = DbCache.ExecuteReader(SQL)
    4. While Reader.Read()
    5. Counter += 1
    6. End While
    7. End Using
    8. SQL = $"SELECT * FROM Tabelle"
    9. Dim Counter1 = 0
    10. Using Reader = DbCache.ExecuteReader(SQL)
    11. While Reader.Read()
    12. Counter1 += 1
    13. End While
    14. End Using
    15. MessageBox.Show(Counter.ToString & "<->" & Counter1.ToString)




    Mit Einschränkung MEHR Ergebnisse also ohne ?(
    Ok, damit ist mein praktisches Problem beseitigt, da ich nun die mehrfachen Ergebnisse bekomme, die ich wollte, aber trotzdem blick ich's nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Ohne genaues über die Datenbank zu wissen, vllt gibt er immer nur ein Ergebniss zurück für jede Bedingung. Das würde auch zu deinem Phänomen passen. du gibst nur eine Bedingung an = ein Ergebnis. Du gibst zwei Bedingungen an = Zwei Ergebnisse, usw.


    Ich hab hier auch von Intersystem was gefunden. Dort wird es, so wie es aus sieht bei einer Größeren Abfrage auch per Schleife gemacht:
    docs.intersystems.com/latest/c…SQL_esql#GSQL_esql_cursor
    Naja, aber wenn ich SELECT * schreibe, bekomm ich ja 376000 Ergebnisse … und nicht nur 1.
    Und bei SELECT * FROM Tabelle WHERE ArtNr2>'0' das gleiche.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Selbes Ergebnis wie in Post#21. Welche Schlussfolgerung ergibt sich daraus?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ob der Reader bei "

    SQL-Abfrage

    1. Select *
    " die gleiche anzahl an Datensätzen liefert
    wie bei der "

    SQL-Abfrage

    1. Count
    " abfrage.

    Da die Count Abfrage ja direkt die Anzahl zurück gibt.
    Wenn das gleich ist liegt das schonmal nicht an den Reader.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Amro“ ()

    Damit kann ich schonmal zumindest n bisken was anfangen. Ich hatte auch schon überlegt, dass es ggf. so ist, dass eine ArtNr1 in einer Zeile zwei ArtNr2-Einträge hat, also
    111222333
    123

    123456789
    456
    666
    999999999
    789


    Aber dem ist leider auch nicht so.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    docs.intersystems.com/latest/c…c.View.cls?KEY=GETIRIS_ch
    Auf der Seite wird empfohlen auf InterSystems IRIS zu migrieren.
    IRIS ist der Nachfolger von CACHE.
    Der IRIS ODBC Treiber ist nicht Kompatible mit CACHE.

    Hast du eine möglichkeit zu ermittlen ob du den richtigen ODBC Treiber hast?
    Anscheinend gibt es zwei davon.
    Hier gab es vor kurzem eine Frage dazu:
    community.intersystems.com/post/odbc-cache-drivers-windows
    Man schreibt die Query ja um aus dem Wust an Daten zu bekommen, was man möchte, also eine Logik muss ja dahinter stecken, sonst könnte wahrscheinlich auch nicht euer WaWiSy-Anbieter damit umgehen.
    Aber wenn die solche Dlls zur Verfügung stellen, dann kannst du den doch sicherlich fragen, welche Logik die da benutzen, wenn sie eine bestimmte Datenmenge sammeln wollen.
    @Amro & @GerhardW: Ich verweise auf meinen Post#16. Daher kurz zusammengefasst: Unser Betrieb nutzt Fremdsoftware, welche die Caché-DB verwendet. Die DB ist nicht dafür vorgesehen, von uns direkt genutzt zu werden. Daher: Änderungen an Treibern oder gar ein DB-Anbieterwechsel sind keine Optionen.

    Haudruferzappeltnoch schrieb:

    wenn die solche Dlls zur Verfügung stellen
    Naja, von zur Verfügung stellen würd ich nicht reden. Die DLLs sind da, damit die WaWiSoftware läuft, nicht, damit ich damit rumspielen kann. Es wird keinen Support diesbezüglich geben - weder von InterSystems noch von unserem WaWi-Anbieter.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    OK,
    sind die Spalten ArtNr1 und ArtNr2 von Datetytp String?
    Versuch einmal noch die (' ' ) Hochkommas weg zulassen.
    Aber ich denke das hast du auch schon probiert.


    VaporiZed schrieb:

    Änderungen an Treibern oder gar ein DB-Anbieterwechsel sind keine Optionen

    Dachte eher an die möglichkeit eine kleinen Anwendung zu schreiben und zu testen.
    Der ODBC ist ja Clientseitig. Vielleicht kann man dann die Dll umgehen.
    Nur zum testen. Aber da müsstest du den Server , Benutzer und Passwort kennen.
    @Amro: Die Datentypen sind je String. SELECT COUNT(*) ergibt auch nur 376000. Also Bahnhof. Aber vielen Dank für Deinen Input. Ich werde das Thema schließen, da ich mich trotz dieses Rätsels mich weder zu lange damit aufhalten noch mich da jetzt reinbuddeln will. Ich habe meinen Workaround, der gute Dienste leistet. Vielleicht gehe ich der Sache in meiner nächsten Entwicklungsstufe auf den Grund.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.