AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String-Literale

Ein Thema von handson · begonnen am 22. Mai 2007 · letzter Beitrag vom 25. Mai 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#11

Re: String-Literale

  Alt 22. Mai 2007, 17:01
Zitat von handson:
Standardmäßig wird unter Delphi ein String als Ansistring gespeichert, d.h. er kann ca. 2^31 Zeichen (bis 4 GB) speichern.

Das mit dem String-Splitting passt nicht mit dem Phänomän zusammen. Außerdem kann ich in einer anderen Unit weitaus größere
Strings erstellen ohne Meldung.
Strings können unter Delphi 4GB speichern, das ist schon richtig. Stringliterale aber eben nicht. Ein Stringliteral ist ein einziger direkt definierter String also z.B. 'Ich bin ein Literal' (Das sagt ja auch schon die Meldung: Da ist nicht von zu langen String die Rede, sondern von einem zu langen String-Literal)

Wenn ein einzelnes Literal länger als 255 Zeichen ist kommt diese Fehlermeldung.

Lösung: das gesamte Literal an einigen Stellen splitten und mit "+" verbinden:

variable := 'Stell dir vor dieses Literal sei länger als 255 Zeichen...'; // geht nicht

variable := 'Stell dir vor dieses' + 'Literal sei länger als 255 Zeichen...'; // geht!!


Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#12

Re: String-Literale

  Alt 23. Mai 2007, 11:42
@Alfi001: Hmm, wenn ich mir deine Erklärung anschaue und meinen Source-Code, habe ich ja schon den String in einzelne "Literale" aufgeteilt. Beim groben durchzählen der einzelnen Literale komme ich auf max. ca. 135 Zeichen... Es hätte also funktionieren müssen, oder?

Der ganze Witz an der Geschichte ist, nehme ich statt der Variable KundenObjData.MandantenId, die Variable MandantenID aus dem Procedure-Kopf dann geht es und an den Literalen habe ich nichts verändert. Also kann es nicht an den Literalen liegen. Es muss was anderes sein und da komme ich einfach nicht hinter.
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#13

Re: String-Literale

  Alt 23. Mai 2007, 13:02
Zitat von handson:
Der ganze Witz an der Geschichte ist, nehme ich statt der Variable KundenObjData.MandantenId, die Variable MandantenID aus dem Procedure-Kopf dann geht es und an den Literalen habe ich nichts verändert. Also kann es nicht an den Literalen liegen. Es muss was anderes sein und da komme ich einfach nicht hinter.
Das ganze scheint mir wirklich ein Bug im Compiler zu sein. Ist ja vielleicht ein Fall für die QC.
Uli Gerhardt
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: String-Literale

  Alt 23. Mai 2007, 19:50
Hallo Stephan,

wenn du dem Compiler deinen ShortString als AnsiString verkaufst, könnte es funktionieren:

Delphi-Quellcode:
'anzahl8, anzahl9, anzahl10, anzahl11, anzahl12, anzahl13, anzahl4) VALUES '+
// '('''+KundenObjData.MandantenId+''','+
                                              '('''+string(KundenObjData.MandantenId)+''','+
                                              ''''+KundenObjData.ObjNr+''','+
Ich kann nur vermuten, daß der Compiler hier Code für die Addition zweier ShortStrings durchführen möchte, und dafür ist die zusammengesetzte Stringkonstante wirklich zu lang. Ein ähnliches Verhalten findet man bei arithmetischen Operationen. Sie werden immer mit dem kleinstmöglichen gemeinsamen Datentyp durchgeführt - es sein denn, man führt einen expliziten TypeCast eines Operanden durch.

Gruß Hawkeye
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#15

Re: String-Literale

  Alt 24. Mai 2007, 11:52
Hallo!

Das ist es auch gewesen, er hat die ganzen Dinger als ShortStrings gesehen, daher nur 255 Zeichen. Mit der String-Umwandlung solls funktionieren.

Da muss auch einer erstmal drauf kommen...

Vielen Dank nochmal an alle für die schnelle Hilfe und Unterstützung!

Stephan
Stephan Faust
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: String-Literale

  Alt 24. Mai 2007, 12:12
Wieso bastelt ühr überhaupt so bescheuret Eure Strings zusammen? Entschuldigung, aber in jedem dritten Post sehe ich sowas.

Verwende doch einfach die Format-Funktion und deklariere den SQL-Befehl als Konstante. Das sieht wesentlich übersichtlicher aus, ist es auch und man vermeidet solche Fallstricke. Wenn Du dann den Befehl ändern musst, dann geht das auch viel schneller.

SQL-Code:
Const
  sSQLBefehl = 'insert into Foobar (.....) Values (%s, %s, %s)';

Begin
  MyDataSet.CommandText := Format (sSQLBefehl, [param1, QuotedStr(param2), param3]);
...
Ja gut eh, mit Parametern geht's auch...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#17

Re: String-Literale

  Alt 25. Mai 2007, 14:13
Du hast eigentlich recht, allerdings ist es für mich wesentlich übersichtlicher und lesbarer, wenn ich sie so zusammenbaue.
Ich denke, dass ist eine reine Philosophie-Frage. Fehler können überall auftreten.

Stephan
Stephan Faust
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz