Autor Beitrag
holgerbremen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120



BeitragVerfasst: Mi 03.11.10 15:06 
Ich habe eine Datenbankfeld varchar(1100). Wenn ich die Daten über die TQuery auslese, bekomme ich nur 255 Zeichen zurück. Ich habe es schon mit Ansistring probiert, aber es kommen immer nur 255 Zeichen zurück.

Was mache ich falsch?
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 03.11.10 15:33 
'Falsch' ist, das Datenbankfeld als varchar statt als blob zu definieren.

Für längere Texte würde ich immer ein
BLOB SUB_TYPE TEXT SEGMENT SIZE 80
nehmen (wobei die Segment size auch z.B. 100 sein kann)

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 166
Erhaltene Danke: 6

MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
BeitragVerfasst: Mi 03.11.10 15:41 
Moin,


also grundsätzlich zu sagen das die Nutzung eines VarChar(1100) falsch ist,
ist schlicht weg nicht richtig !

Zum einen kommt es darauf an was ich in diesem Feld speichern möchte, zum anderen kommt es ganz
maßgeblich darauf an welche Datenbank genutzt wird !

Um Dir weiter helfen zu können benötigen wir erst einmal Infos darüber welche Datenbank,
welches Delphi, Zugriff über BDE, ODBC oder Direkt genutzt wird.

Dann kann man Dir auch wirklich weiter helfen.


Beste Grüße
Michael

_________________
Wissen ist Macht, nichts wissen macht auch nichts...

Für diesen Beitrag haben gedankt: Martok
holgerbremen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120



BeitragVerfasst: Mi 03.11.10 15:59 
Die Datenbank ist SQL-Server 2008 Express, soll aber auch auf SQL-Server 2000 Standard laufen. Der Feldinhalt ist reiner Text.
Umgebung: Delphi 2010
Ich benutze die SQL-Direct-Komponenten, die aber auf dem TQuery-Objekt basieren. Der Zugriff auf die Datenbank erfoglt Direkt.

Ich hoffe, das reicht an Info.

Gruß
Holger
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 03.11.10 16:10 
ADO ??
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 03.11.10 16:15 
user profile iconjaevencooler hat folgendes geschrieben Zum zitierten Posting springen:

also grundsätzlich zu sagen das die Nutzung eines VarChar(1100) falsch ist,
ist schlicht weg nicht richtig !


Man beachte die Klammerung des Falsch in Hochkommta in meinem Post.
Natürlich ist das nicht grundsätzlich falsch, aber imho doch nicht unbedingt das
beste Datenbankdesign.

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 03.11.10 17:00 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
'Falsch' ist, das Datenbankfeld als varchar statt als blob zu definieren.

Das ist völlig falsch. Blob ist für Binärdaten und daher für Text eigentlich ungeeignet.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 03.11.10 17:20 
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
'Falsch' ist, das Datenbankfeld als varchar statt als blob zu definieren.

Das ist völlig falsch. Blob ist für Binärdaten und daher für Text eigentlich ungeeignet.


soso...
Darum kann man auch bei Blobs den Type als Text (SUB_TYPE TEXT SEGEMENT SIZE xx) festlegen ?
Ich nutze etliche Blobs in vielen Masken, um darin Textbausteine und andere 'lange' Texte zu speichern und hab da nie Probleme mit diesem "ungeeigneten" Datentyp gehabt.
Aber ich spreche nur aus Erfahrung, theoretisches Wissen hab ich da nicht ...

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 03.11.10 20:12 
Und was bringt das, außer dass man nur noch einen Fulltext-Index drauflegen kann und es geringfügig langsamer ist?

Wenn ich VarChar habe und die Chance besteht, dass die 1100 tatsächlich oft ausgenutzt werden, ist sowas einem BLOB immer vorzuziehen. Wenn die durchschnittliche Textlänge aber 5 Zeichen ist, und die 1100 da nur zum Spaß stehen, ists natürlich Quatsch.

ABER:

Danach hat der OP nicht gefragt... also bitte zurück zu seiner Frage. Sollte das jemand ausdiskutieren wollen, darf er gerne ein neues Thema dafür aufmachen.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mi 03.11.10 20:42 
Hi,

zurück zu Frage: Hast Du in der QUery Felder angelegt? Dann schau mal bitte in die Eigenschaften des entsprechenden Feldes ob du bei SIze und DisplayWidth auch die 1100 eingetragen hast.

cu
holgerbremen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120



BeitragVerfasst: Mi 03.11.10 22:21 
Ich habe nun ein bißchen selber geforscht, da die Diskussion hier ein bißchen in die Falsche Richtung ging.

Ich habe alle Felder in der Query angelegt. Die Size bei dem entsprechenden Feld war auf 255, was mein Problem erklärt. Auch ein Erhöhen auf höhere Werte brachte keinen Erfolg. Das Problem ist wohl, dass das Feld ein TStingField ist und somit bei 255 Zeichen Schluß ist. Ich hatte dann in der Datenbank aus dem varchar(1100) ein Varchar(max) gemacht. Das Feld in der Query änderte sich dann in ein TMemofeld und siehe da, alle 1100 Zeichen waren da. Trotzdem würde mich interessieren, wie ich ein varchar() > 255 Zeichen mit einer TQuery lesen kannn.

Eine Frage wäre noch. Weiss jemand, was ein varchar(max) bewirkt? Hat das evtl. noch Nebeneffekte im SQL-Server? Ich nutzte immer die volle Länge von 1100 Zeichen.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 03.11.10 22:24 
Nicht indizierbar und im manchen Grids nicht darstellbar.
Warum verwendest Du nicht TADODataset?
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 03.11.10 23:25 
Okay, ich hab jetzt von einer Oracle Datenbank gesprochen. Dort gibt es CLOB für Character Large Object und BLOB für Binary Large Object.
holgerbremen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120



BeitragVerfasst: Do 04.11.10 08:52 
Zitat:
Nicht indizierbar und im manchen Grids nicht darstellbar.
Warum verwendest Du nicht TADODataset?


Ein Darstellung im Grid muss nicht sein und indiziert wird die Spalte auch nicht.

Was ist der Vorteil vom TADODataset?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 04.11.10 09:08 
Nun die Probleme die Du hast hättest Du nicht mehr.
Smart, universell einsetzbar, Exportfunktionen, RecNo, Cloning, disconnected Datasets, bergeweise brauchbare Events...
Ich will hier keine Reklame machen, probier es einfach mal aus ;-)