none
Abfrage auf ODBC verbundene Tabellen (immer Ärger mit Bit)

    Allgemeine Diskussion

  • Hallo,

    habe eine recht einfache Abfrage:

    SELECT GD.* FROM dbo_tbl_Gehaeuse_Daten As GD
    WHERE (GD.archiv=0 AND GD.Gehaeusenr=4711)

    archiv ist im SQL Server ein Feld mit Datentyp Bit,  Null, Default 0

    Diese Abfrage funktioniert bei mir lokal einwandfrei. Beim Kunden funktioniert nichts, zurück wird eine leere Menge gegeben.

    Getestet auf 0, Falsch, False => keinerlei Ergebnisse. Getestet auf 1, -1, True, Wahr erhalte ich alle entsprechenden DS.

    Ohne Kriterium auf archiv habe ich in der Ergebnismenge sowohl DS mit 0 und mit 1 (-1)

    Ich kann es mir beim besten Willen nicht erklären. Ich teste unter Access 2003, beim Kunden unter Access 2010.

    SQL Server 2008 (bei mir Express Edition).

    Ich habs jetzt so gelöst dass ich über Top 1 sortiert nach ID den aktuellsten DS hole und archiv noch überprüfe. Funktioniert auch wie gewünscht. Aber ich würde doch zu gerne wissen warum das oben nicht funktioniert.

     

    Gruß Andreas


    http://www.AccessBlog.de
    Mittwoch, 9. November 2011 09:27

Alle Antworten

  • Hast du auch mit

    SELECT *
    FROM     dbo_tbl_Gehaeuse_Daten
    WHERE    archiv = 0 ;

    und

    SELECT *
    FROM     dbo_tbl_Gehaeuse_Daten
    WHERE    archiv = 1 ;

    sowie

    SELECT *
    FROM     dbo_tbl_Gehaeuse_Daten
    WHERE    archiv <> 0 ;

    getested?

    Welches Service Pack setzten du und dein Kunde ein?

    Imho die einfachste Lösung: Benutze eine server-seitige VIEW.

    CREATE VIEW vw_GehaeuseDatenPatchBit
    AS
    SELECT * ,
                 CAST(Archiv AS INT) AS ArchivInt
    FROM     GehaeuseDaten ;
    Mittwoch, 9. November 2011 09:55
    Moderator
  • Hallo Stefan,

    ja hab ich alle probiert, auch mit <1, <>1, <> -1 etc.

    <> 0 liefert mir alle DS mit archiv = 1(-1)

    Meinst du das ServicePack von Access? Da muss ich nächste Woche mal nachsehen wenn ich wieder beim Kunde bin.

    Ja eine serverseitige View würde das Problem auch lösen, danke.

     

    Gruß Andreas


    http://www.AccessBlog.de
    Mittwoch, 9. November 2011 10:10
  • Am 09.11.2011 10:27, schrieb Andreas Vogt:
    > Ich kann es mir beim besten Willen nicht erklären. Ich teste unter
    > Access 2003, beim Kunden unter Access 2010.
    >
    > SQL Server 2008 (bei mir Express Edition).
     
    Sehe ich das richtig? Du hast 2003 und der Kunde 2010 als Access-Version?
    Vielleicht werden bei den beiden Versionen die Bit-Spalten
    unterschiedlich eingebunden?
     
    Ich habe mir bei meinen Access-Projekten angewöhnt anstatt Bit einen
    modifizierten Smallint-Typ zu verwenden der nur Null, 0 und -1 zulässt.
    Somit kann ich die Spalten Access-typisch verwenden.
     
    Mittwoch, 9. November 2011 10:29
  • Hallo,

    nein nicht ganz.

    ist ein historisches Projekt unter Access 2002/2003.

    lokal auf 2k3 entwickelt, getestet und per VM auf Access 2010 getestet.

    Beim Kunden soll das dann unter 2010 laufen.

    Meine Tests sind identisch unter 2010, lokal funktioniert alles.

    Gruß Andreas


    http://www.AccessBlog.de
    Mittwoch, 9. November 2011 11:23
  • Hast du mal geprüft wie die Tabelle in der Entwurfsansicht ausschaut?
    Beim Kunde und bei dir?
     
    Mittwoch, 9. November 2011 12:59
  • Hallo Andreas!

    Bei Accessabfragen auf verknüpften MSSQL-Server-Tabellen kann es sein, dass "-1" per ODBC als Zahl und nicht als True an den Server weitergereicht wird (ist im Profiler gut sichtbar).
    Wenn du statt -1 einfach True schreibst, sollte es kein Problem geben.

    Anm.: 1 statt -1 könnte auch zu einem Problem führen, falls der Filter von Jet ausgewertet wird.

    Tipp: Bei Bit-Feldern verbiete ich gerne NULL, damit ich nicht auf False or NULL prüfen muss, falls ich die "Nicht True" haben will.
    (Die NULL-Werte werden unter Access/Jet nämlich als 0/False angezeigt - sie sind aber nicht 0/False!)

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen


    Donnerstag, 10. November 2011 16:41
  • hallo Andreas,

    hast du dein Problem lösen können?

    Mittwoch, 30. November 2011 22:51
    Moderator
  • Hallo,

    bin beim letzten Kundenbesuch leider nicht dazu gekommen das nochmals auszutesten. Aber die momentane alternative Lösung bleibt erst mal bestehen. Insofern kann man den Thread jetzt mal als gelöst betrachten.

    Gruß Andreas


    http://www.AccessBlog.de
    Donnerstag, 1. Dezember 2011 07:46
  • Du meinst deine Lösung? Dann ändere doch bitte den Typen des Threads auf Diskussion. Danke.
    Donnerstag, 1. Dezember 2011 07:56
    Moderator
  • Hallo Stefan,

    was macht es für einen Unterschied ob Diskussion oder Frage?

    Gruß Andreas


    http://www.AccessBlog.de
    Mittwoch, 7. Dezember 2011 09:01
  • Im Grunde war es mehr eine Diskussion als ein Frage mit einer sauberen Antwort. Danke.

    Mittwoch, 7. Dezember 2011 09:31
    Moderator
  • Hallo Andreas,

    Andreas Vogt wrote:

    was macht es für einen Unterschied ob Diskussion oder Frage?

    Es gehoert zur Forumspolicy, Fragen und allgemeine Diskussionen zu
    unterscheiden, wobei Grenzen naturgemaess nicht klar gezogen werden
    koennen. In diesem Fall schliesse ich mich Stefans Meinung an.
    Die Unterscheidung erleichtert spaeter die Suche, durch Einbeziehung oder
    Ausklammern von Diskussionen.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 7. Dezember 2011 14:20
    Moderator