Announcement

Collapse
No announcement yet.

Problem mit MSSQL, BDE und Datentype TMemoField

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

  • Problem mit MSSQL, BDE und Datentype TMemoField

    Hallo Zusammen,
    kann mir jemad helfen bzw. etwas zum folgenden Problem sagen und zwar ich portiere zurzeit eine Delphi-Anwendung, die momentan unter Oracle läuft, in eine Anwendung, die auch unter MSSQL 2000 laufen soll. Generell gibt es keine Große Probleme,
    allerding gibt es ein Problem, dass alle Memo-Felder in der Anwendung von type TMemoField sind und bei verbindung zu MSSQL kennt BDE den Datentype Memo nicht und liefert mir einen TSringField zurück, was natürlich auf 255 Zeichen begrenzt ist. In der MSSQL datenbank ist das Feld als varchar(2000) definiert, was auch richtig ist.
    Gibt es dazu eine Lösung?

    Vorab vielen Dank für Eure Rückmeldung.

  • #2
    1, Schmeiß die BDE weg und nimm auf jedenfall ADO(Express)/dbGo.

    2, Für Memo-Felder sollte man bei MS-SQL den Datentyp (n)text nehmen. Und dieser wird auf TStringField gemappt, welcher aber nicht auf 255-Zeichen beschränkt sein sollte (ist mir jedenfalls nichts bekannt)

    Comment


    • #3
      Danke für die Antwort.
      Ich kann allerding die BDE nicht ersetzten!!!
      Ich dachte, dass TStringField auf 255 zeichen begrenzt ist, zumindest (n)Text war mal bei MSSQL 7 so.
      Ich finde momentan keine Info. dazu

      Comment


      • #4
        Wenn Du die Datenbankzugriffe eh neu machst, warum willst Du dann unbedingt die BDE nutzen
        Schöne Grüße, Mario

        Comment


        • #5
          > Ich kann allerding die BDE nicht ersetzten!!!

          Wieso? Du machst doch eh alles (oder vieles) neu. Und da sollte man definitiv nicht mehr BDE verwenden.

          > zumindest (n)Text war mal bei MSSQL 7

          Stimmt nicht. Es gibt aber die Grenze das bei MS-SQL die Summe aller (n)varchar-Felder (und einfachen Datentypen) nicht über 8000 Byte an Größe haben dürfen, da diese in eine DB-Page passen müssen

          Comment


          • #6
            Ich habe ausprobiert mit dem Datentype TEXT, also
            Für Memo-Felder habe ich bei MS-SQL den Datentyp Text genommen und das Problem ist weg, allerdings habe ich ein neues Problem mit den MEMO-Feldern und zwar wenn die in einem UNION-Statement bzw. in SLECT DISTINCT bzw. in GROUP BY Anweisung stehen, dann läuft garnichts.
            Gibt es dazu irdend eine Lösung ohne, dass man Statements umbaut bzw. auf Funktionalitäten verzichtet?

            Vorab vieln Dank

            Comment


            • #7
              Wie werden sie genau verwendet.
              Memo-Felder (ntext) haben nur eingeschränkte Möglichkeiten im SQL.

              Dein "Memo" von Oracle mit varchar(2000) ist eigentlich "nur" ein varchar-Feld mit maximaler von Oracle unterstützter Länge. Für "richtige" Memos gibt es auch unter Oracle andere Datentypen, die zwar mehr als 2000 Zeichen können, aber auch einschränkungen bezüglich verwendung in SQL haben

              Comment


              • #8
                Unter Oracle sind die felder als varchar2(2000) definiert und unter MSSQL nach meiner Korrektur nun anstatt varchar(2000) Datentype text.
                BDE-ODBC-Schnittstelle liefert/konvertiert mir den Datentype text in MEMO (Delphi), was uach richtig ist.

                Also so wie ich verstehe darf so ein Text-feld nicht in einer Group BY, Distinct bzw. UNION Anweisung stehen, oder?
                Gibt es noch Einschränkungen

                Comment


                • #9
                  In der SQL Server-Onlinedokumentation steht unter "Verwalten von ntext-, text- und image-Daten" einige Infos

                  Comment


                  • #10
                    Originally posted by All77 View Post
                    Ich habe ausprobiert mit dem Datentype TEXT, also
                    Für Memo-Felder habe ich bei MS-SQL den Datentyp Text genommen und das Problem ist weg, allerdings habe ich ein neues Problem mit den MEMO-Feldern und zwar wenn die in einem UNION-Statement bzw. in SLECT DISTINCT bzw. in GROUP BY Anweisung stehen, dann läuft garnichts.
                    Gibt es dazu irdend eine Lösung ohne, dass man Statements umbaut bzw. auf Funktionalitäten verzichtet?

                    Vorab vieln Dank
                    Ich weiß, dass der Beitrag schon sehr alt ist. Ich bin allerdings gerade auf der Suche nach einer Lösung bezüglich dieses Problems gewesen und habe keine Antwort gefunden.

                    Nun habe ich einen Weg herausgefunden:

                    Ist die Spalte als Text angegeben und man will nach ihr beispielweise sortieren, kann man nur eine Anzahl von Zeichen definieren und nach dieser Definition sortieren, bzw. dann auch distinct verwenden:

                    SELECT DISTINCT SUBSTRING(MeineTextSpalte, 0, 200) As ZeichenMeinesTextes Order By ZeichenMeinesTextes

                    Sollte noch jemand bei der Suche nach diesem Problem auf das Forum hier stoßen, so wie ich, hilft ihm das vielleicht weiter.

                    Comment

                    Working...
                    X