Hilfethema "Visual Foxpro System Capacities":
1. ein Stringliteral "abc" kann bis zu 255 Zeichen enthalten.
2. eine Stringvariable wird dort mit 16MB Maximallänge angegeben.
(Maximum # of characters per character string or memory variable: 16,777,184)
SPACE(16777185) scheitert tatsächlich. Aber mit FILETOSTR() lassen sich meine ich auch größere Strings einlesen. Nicht alle Stringfunktionen können sauber mit den längeren Strings arbeiten, welche ist aber nicht gesagt. Insofern würde ich die Grenze ernst
nehmen, aber sie ist für SQLs, auch komplexere, sowieso irrelevant und recht akademisch.
3. Nutze TEXT TO lcLesedate NOSHOW ...sql mehrzeilig ... ENDTEXT statt mit so vielen Einzelstrings zu arbeiten. Das hat auch noch die gute Option TEXTMERGE. Das macht auch den Sourcecode sehr viel lesbarer.
TEXT TO lcSQL NOSHOW TEXTMERGE
SELECT
COUNT(*) AS nCount
FROM
Rechnungen
WHERE
KundeID = <<STR(lnKundeID)>>
ENDTEXT
Wobei man im Fall von sowieso schon auf die dynamischen Werte gesetzte Variablen auch aus Sicherheitsgründen besser mit Parameterübergabe per ?Variable arbeitet, also:
TEXT TO lcSQL NOSHOW TEXTMERGE
SELECT
COUNT(*) AS nCount
FROM
Rechnungen
WHERE
KundeID = ?lnKundeID
ENDTEXT
Das darf auch ein Cursorfeld sein: "...KundeID = ?cursorKunden.ID"
Wobei das sowohl zur Vorbereitung eines SQLEXEC(lnCommandhandle, lcSQL) möglich ist, als auch für native Foxpro interne Ausführung mittels &lcSQL, nur braucht VFP zur Zeilenfortsetzung Semikolons, SQL Server nicht, höchstens als Abschluss, aber da ist
das optional.
Man kann CHR(13)+Chr(10) für VFP auch entfernen bzw. durch ein Leerzeichen ersetzen, SQL Server sind Zeilenumbrüche aber egal.
Tschüß, Olaf.