none
Probleme mit Datentyp "Ja/nein" RRS feed

  • Frage

  • Hallo,

    ich habe bis jetzt in meinem in VB2008 geschriebenen Programm die Daten in einer Access2003-Datenbank gespeichert. Nun will ich auf eine SQL-Server-Datenbank umsteigen. Die Datenmigration klappt soweit gut, nun habe ich aber ein Problem mit Feldern vom Access-Typ "Ja/Nein", den es offensichtlich unter SQL-Server nicht mehr gibt. In der alten Version habe ich den Wert "True" oder "False" an die Datenbank übergeben und das klappt mit SQL-Server nicht mehr: die übergebenen Werte werden einfach nicht gespeichert, ohne dass ein Fehler ausgelöst wird.

    Wüsste vielleicht jemand einen Tipp für mich? Ich würde nur sehr ungern Änderungen im Programm-Code vornehmen, da müsste ich Hunderte von SQL-Abfragen anpassen!

    Gruß

    Christoph

     

    Freitag, 3. September 2010 08:51

Antworten

  • Hallo Christoph,

    im SQL Server gibt des den Datentypen bit, um Ja/Nein Werte zu speichern.

    Welchen Datentypen hast Du verwendet und welche genauen Werte übergibst Du (und wie)?


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 3. September 2010 09:16
  • Feld = TRUE ging in MS Access und meines Wissens auch auschließlich dort. In allen anderen DBMS wie eben auch dem MS SQL Server musst Du einen numerischen Wert angeben; 0 für FALSE und 1 für TRUE. Wenn Du als Wert z.B. FALSE angibst, wird das als Objekt-Bezeichner interpretiert und nach einen Feld mit dem Namen gesucht; und das wirst Du auch als Fehlermeldung erhalten "Ungültiger Spaltenname 'FALSE'".


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 3. September 2010 10:06
  • Hallo Christoph

    die boolschen Variablen sind kein Problem, denn der BIT Datentyp wird entsprechend konvertiert.
    Das gilt zumindest, solange Du die Bit-Felder als NOT NULL definierst am besten zusammen mit DEFAULT(0)).

    Beim SQL kommst Du nicht um eine Überarbeitung rum,
    denn es gibt keine True/False Konstanten beim SQL Server.
    Zeichenkonstanten wie 'TRUE' und 'FALSE' sind ineffizient,
    da (implizit) konvertiert werden muß, entspräche CAST('TRUE' as bit).

    Um das SQL kompatibel zur Jet zu halten sollte man die Abfragen auf 0 trimmen:
         WHERE TestFeld <> 0
    anstatt TestFeld = 1, was andere Probleme vermeidet,
    da Access/VBA -1 als True definiert, aber alles <> 0 als True ansieht.

    Gruß Elmar

    Freitag, 3. September 2010 10:17

Alle Antworten

  • Hallo Christoph,

    im SQL Server gibt des den Datentypen bit, um Ja/Nein Werte zu speichern.

    Welchen Datentypen hast Du verwendet und welche genauen Werte übergibst Du (und wie)?


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 3. September 2010 09:16
  • Hallo,

    - Feldtyp in der Datenbanktabelle war : Ja/Nein

    - im Programmcode: Varaibelnen von Datentyp Boolean

    - bei SQL-Agfragen:

      .... TestFeld = True ... etc

    Gruß

    Christoph

     

    Freitag, 3. September 2010 09:49
  • Feld = TRUE ging in MS Access und meines Wissens auch auschließlich dort. In allen anderen DBMS wie eben auch dem MS SQL Server musst Du einen numerischen Wert angeben; 0 für FALSE und 1 für TRUE. Wenn Du als Wert z.B. FALSE angibst, wird das als Objekt-Bezeichner interpretiert und nach einen Feld mit dem Namen gesucht; und das wirst Du auch als Fehlermeldung erhalten "Ungültiger Spaltenname 'FALSE'".


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 3. September 2010 10:06
  • Hallo Christoph

    die boolschen Variablen sind kein Problem, denn der BIT Datentyp wird entsprechend konvertiert.
    Das gilt zumindest, solange Du die Bit-Felder als NOT NULL definierst am besten zusammen mit DEFAULT(0)).

    Beim SQL kommst Du nicht um eine Überarbeitung rum,
    denn es gibt keine True/False Konstanten beim SQL Server.
    Zeichenkonstanten wie 'TRUE' und 'FALSE' sind ineffizient,
    da (implizit) konvertiert werden muß, entspräche CAST('TRUE' as bit).

    Um das SQL kompatibel zur Jet zu halten sollte man die Abfragen auf 0 trimmen:
         WHERE TestFeld <> 0
    anstatt TestFeld = 1, was andere Probleme vermeidet,
    da Access/VBA -1 als True definiert, aber alles <> 0 als True ansieht.

    Gruß Elmar

    Freitag, 3. September 2010 10:17