Announcement

Collapse
No announcement yet.

ADO, SQL-Server 7: angehängte Spaces in CHAR-Feldern

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

  • ADO, SQL-Server 7: angehängte Spaces in CHAR-Feldern

    Trotz Updates von ADOexpress un D5Update Pack 1 habe ich noch immer angehängte SPACES in meinen TDBEdit-Feldern. Woran kann das liegen bzw. wie ist das zu beheben?

    Danke
    Sebastian

  • #2
    Hallo Sebastian,<br><br>
    der Datentyp CHAR hat im SQL Server eine feste Länge. Versuche mal die entsprechenden CHAR-Felder in VARCHAR umzuwandeln. Die VARCHAR-Typen werden nicht um Leerzeichen ergänzt.

    Christia

    Comment


    • #3
      Das hat irgendwie keine Auswirkungen gehabt. Ich habe das mal eben so getestet... Woran kanns noch liegen??? Ich verwende
      - MSSQL 7
      - D5 ent
      - ADO-Komponenten daraus
      - und habe D5upd1 und ADOexpr Upd gefahren

      Ich hatte mal gelesen, das man selbst in ADODB was machen kann, Code war auch in dieser Gruppe (habe ich auch hineingenommen), wie kann ich ADODB aber neu erstellen/compilieren, damit meine veränderte DCU verwendet wird?

      Comment


      • #4
        Hallo,

        ich habe das Ganze einmal in meiner Umgebung (Delphi 5.01; ADO-Patch#3 vom 24.08.2000; SQL Server 7 SP2; ADO 2.5) getestet. Dazu wurde eine Tabelle angelegt, die sowohl ein CHAR als auch ein VARCHAR-Feld verwendet:
        <pre>
        CREATE TABLE [dbo].[Zeichen] (
        [id] [int] IDENTITY (1, 1) NOT NULL ,
        [CharZeichen] [char] (10) NULL ,
        [VarCharZeichen] [varchar] (50) NULL
        </pre>
        Wenn ich nun mit TADODataSet auf diese Tabelle zugreife, so zeigt das DBEdit nur für die Spalte CharZeichen (CHAR) die Leerzeichen mit an. Dies ist auch völlig korrekt, da der SQL Server 7 ein CHAR-Feld beim Auslesen mit Leerzeichen auffüllt. Das DBEdit für VarCharZeichen (VARCHAR) zeigt jedoch die Leerzeichen nicht mit an.

        Wenn die Tabellenstruktur nicht geändert werden soll und auch das Setzen von SET_ANSI_PADDINGS nicht in Frage kommt, kann man im Client die Leerzeichen unmittelbar vor der Anzeige im DBEdit über das Ereigbnis <b>OnGetText</b> entfernen, wie das folgende Beispiel demonstriert:
        <pre>
        procedure TForm1.ADODataSet1CharZeichenGetText(Sender: TField;
        var Text: String; DisplayText: Boolean);
        begin
        Text := Trim(ADODataSet1CharZeichen.Value);
        DisplayText := True;
        end;
        </pre&gt

        Comment

        Working...
        X