Announcement

Collapse
No announcement yet.

SQL 2000 und Char-Felder

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL 2000 und Char-Felder

    Ich habe ein Problem mit dem SQL Server 2000 (SP2).
    Wenn ich ein Tabellenfeld mit einem Editfeld vergleiche, dann funktioniert der Vergleich nicht. Etwa so :
    <PRE>
    if ADODataset1.FieldByName('Wert').AsString = Edit1.Text Then
    showmessage('Gleich');
    </PRE>

    Wenn die Grundlage eine Access Datenbank ist, dann klappt alles.
    Mal angenommen, der Inhalt des DBFeldes ist "Test", dann gibt mir eine Abfrage der Längedes Wertes(in Delphi) bei Access Länge 4 zurück. Bei SQL 2000 begkomme ich eine Länge von 16. Das entspricht der definierten Feldlänge in der Datenbank (Char /16). Füllt der SQL Server etwa die restlichen Stellen auf ?
    Wer weis etwas dazu ?

  • #2
    Hi,
    <br>
    <br>benutze VarChar(16) anstatt (Char /16).
    <br>
    <br>mfg
    <br>P

    Comment


    • #3
      Hallo Patrick,

      erst einaml danke ! Es funktioniert. Die Frage ist nur, woran liegt es denn. Eigentlich sind char und varchar nicht so verschieden.

      mfg
      Michae

      Comment


      • #4
        Da war mein o.k wohl etwas zu früh. Ich hatte die Verbindung noch zur Access DB. Mit der SQL DB ist es noch der alte Stand :-

        Comment


        • #5
          Also die Lösung ist doch richtig. Es reicht nur nicht, das Format von char zu varchar zu ändern. Die Daten müssen neu eingegeben werden

          Comment


          • #6
            Hi,
            <br>"Eigentlich sind char und varchar nicht so verschieden" sind sie schon:
            <br>(Auszug aus der MS Hilfe)
            <br>"Der char-Datentyp ist ein Datentyp fester Länge, wenn die NOT NULL-Klausel angegeben wird. Wird ein Wert, der kürzer als die Länge der Spalte ist, in eine char NOT NULL-Spalte eingefügt, so wird der Wert rechts bis zum Erreichen der Spaltengröße mit Leerzeichen aufgefüllt. Wenn z. B. eine Spalte als char(10) definiert wurde und „music“ die zu speichernden Daten darstellt, speichert SQL Server diese Daten als „music_____“, wobei „_“ für ein Leerzeichen steht.
            <br>
            <br>Der varchar-Datentyp ist ein Datentyp variabler Länge. Werte, die kürzer als die Größe der Spalte sind, werden nicht rechts mit Leerzeichen bis zum Erreichen der Spaltengröße aufgefüllt. Falls die ANSI_PADDING-Option beim Erstellen der Spalte auf OFF eingestellt wurde, werden alle nachgestellten Leerzeichen von den in der Spalte gespeicherten Werten abgeschnitten. Wenn ANSI_PADDING beim Erstellen der Spalte auf ON eingestellt wurde, werden nachgestellte Leerzeichen nicht abgeschnitten."
            <br>
            <br>Ich denke mal du bist hingegangen und hast im Entwurf der Tabelle aus Char VarChar gemacht. Dann macht der sql server eben genau das. Er Behält den Inhalt der Felder bei. Die Werte stehen ja mit "Test___" in der Char Spalte und der Server weiß nicht das er die Leerzeichen löschen soll/darf beim Typ wechsel.
            <br>Mach einfach ein update ...rtrim()...
            <br>
            <br>mfg
            <br>P

            Comment

            Working...
            X