String-Variablen-Länge begrenzt?

Guten Morgen, ihr Experten,

ich hab mal wieder ein Problem: ich versuche in VBA von Acc2K einen Recordset mit 'nem SQLString zu öffnen, merkwürdigerweise lässt sich die Variable nur bis 253 (?) Zeichen auffüllen, obwohl in der Hilfe was von 64000 Zeichen Fassungsvermögen steht?!?

DIM sqlstring AS String

sqlstring = "SELECT Artikel.Artikel, VKBestelldetails.Menge,
VKBestelldetails.Einzelpreis, VKBestelldetails.Rabatt "
sqlstring = sqlstring & "FROM VKBestellungen INNER JOIN (Artikel
INNER JOIN VKBestelldetails "
sqlstring = sqlstring & "ON Artikel.ArtikelNummer =
VKBestelldetails.ArtikelNummer) ON
VKBestellungen.VKBestellNummer =
VKBestelldetails.VKBestellNummer "
sqlstring = sqlstring & „WHERE
(((VKBestelldetails.VKBestellNummer)=“ & letztBest & „) AND
((VKBestellungen.Firmennummer)=“ & [Forms]![Bestellungen
eingeben]![Firmennummer] & „) AND
((VKBestellungen.Abteilungsname)=’“ & [Forms]![Bestellungen
eingeben]![Abteilungsname] & „’) AND ((VKBestellungen.Art)
=‚Bestellung‘))“

der String enthält aber nur

„SELECT Artikel.Artikel, VKBestelldetails.Menge, VKBestelldetails.Einzelpreis, VKBestelldetails.Rabatt FROM VKBestellungen INNER JOIN (Artikel INNER JOIN VKBestelldetails ON Artikel.ArtikelNummer = VKBestelldetails.ArtikelNummer) ON VKBestellungen.VKBs“

Was mache ich falsch???

*fast verzweifelt* (zumal ich in anderen DB dieses Problem nicht habe)

Sibylle

Hi…

Das folgende habe ich aus der VB-Doku kopiert:

//schnipp///
Byte = 0 bis 255 

Boolean = True oder False 

Integer = -32.768 bis 32.767 

Long = -2.147.483.648 bis 2.147.483.647 

Single = -3,402823E38 bis -1,401298E-45 für negative Werte; 401298E-45 bis 3,402823E38 für positive Werte. 

Double = 1,79769313486232E308 bis 
-4,94065645841247E-324 für negative Werte; 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte. 

Currency = -922.337.203.685.477,5808 bis 922.337.203.685.477,5807 

Decimal = +/-79.228.162.514.264.337.593.543.950.335 ohne Dezimalzeichen; +/-7,9228162514264337593543950335 mit 28 Nachkommastellen; die kleinste Zahl ungleich Null ist 
+/-0,0000000000000000000000000001. 

Date = 1. Januar 100 bis 31. Dezember 9999. 

Object = Beliebiger Verweis auf ein Objekt vom Typ Object. 

String (variable Länge) = plus Zeichenfolgenlänge 0 bis ca. 2 Milliarden. 

String (feste Länge) = Zeichenfolgenlänge 1 bis ca. 65.400 

Variant
(mit Zahlen) = Numerische Werte im Bereich des Datentyps Double. 
(mit Zeichen) = Wie bei String mit variabler Länge. 

//schnapp//

Versuch mal das ganze ohne die DIM-Anweisung… schau ob es so geht… wenn es geht, dann kannst Du mal versuchen die Variable ned als String sondern irgendwie als Variant zu definieren oder so…

Viel Erfolg…

Chris

Hi…

Hai…

String (variable Länge) = plus Zeichenfolgenlänge 0 bis ca. 2
Milliarden.

String (feste Länge) = Zeichenfolgenlänge 1 bis ca. 65.400

nach dem müsste die Variable String, fest oder variable, doch genug Platz bieten?!?

Versuch mal das ganze ohne die DIM-Anweisung… schau ob es
so geht… wenn es geht, dann kannst Du mal versuchen die
Variable ned als String sondern irgendwie als Variant zu
definieren oder so…

Ohne Dim is’ blöd - von wegen Option Explicit und Arbeitstempo…
Hab’s aber tropsdem versucht, auch mit Variant - der gleiche Effekt… :frowning:((
Noch 'ne Idee?

mit vorläufigem Dank

Sibylle

was ist wenn du den string so definierst:

sqlstring = „SELECT Artikel.Artikel, VKBestelldetails.Menge, VKBestelldetails.Einzelpreis, VKBestelldetails.Rabatt FROM VKBestellungen INNER JOIN (Artikel INNER JOIN VKBestelldetails ON Artikel.ArtikelNummer = VKBestelldetails.ArtikelNummer) ON VKBestellungen.VKBestellNummer = VKBestelldetails.VKBestellNummer WHERE (((VKBestelldetails.VKBestellNummer)=“ & letztBest & „) AND ((VKBestellungen.Firmennummer)=“ & [Forms]![Bestellungen eingeben]![Firmennummer] & „) AND ((VKBestellungen.Abteilungsname)=’“ & [Forms]![Bestellungen eingeben]![Abteilungsname] & „’) AND ((VKBestellungen.Art) =‚Bestellung‘))“

einfach statt mehrere zusammenhängen einfach 1 string… wenns so geht liegt es an dem zusammenbasteln… wenn es so auch ned geht, dann melde dich :smile:

Chris

Nee, ooch nich’ - ick gloob, ick spring aus’m Fensta…

Wenn ich das ganze hier mit Access 2000 teste (also nur den SQL-String), dann erscheint bei mir ne Fehlermeldung von wegen Syntaxfehler…

Kann es sein, dass Dein SQL-String ned stimmt ?

Kann es sein, dass Dein SQL-String ned stimmt ?

Das ist durchaus möglich - nur kann ich das nicht checken, weil ich dieses verflixte Ding nicht in die Variable kriege *fluch-zeter-schimpf*
Wie hast Du es denn getestet?

schreibs doch mals so:

Dim sqlstring As String

sqlstring = "SELECT " & \_
 "Artikel.Artikel, VKBestelldetails.Menge, VKBestelldetails.Einzelpreis, VKBestelldetails.Rabatt" & \_
 "FROM VKBestellungen INNER JOIN (Artikel INNER JOIN VKBestelldetails" & \_
 "ON Artikel.ArtikelNummer = VKBestelldetails.ArtikelNummer)" & \_
 "ON VKBestellungen.VKBestellNummer = VKBestelldetails.VKBestellNummer" & \_
 "WHERE (((VKBestelldetails.VKBestellNummer)" & \_
 letztBest & "AND ((VKBestellungen.Firmennummer)=" & \_
 "[Forms]![Bestellungen eingeben]![Firmennummer])" & \_
 "AND ((VKBestellungen.Abteilungsname)=[Forms]![Bestellungen eingeben]![Abteilungsname]')" & \_
 "AND ((VKBestellungen.Art) ='Bestellung'))"

MsgBox sqlstring

grüße aus dem vb-brett :smile:

holli

Hai, holli,

boah, ey, nu isser komplett - jetzt kann ich mich auch über die Fehlerkorrektur innerhalb des SQL hermachen - bleibt nur noch die Frage einsam im Raum stehen, warum das vorher nicht ging *grybelnd*

danke-greetz ans VB-Board :smile:

Sibylle

Mach es so:

  1. Starte Access

  2. Erstelle eine neue, leere Datenbank

  3. Erstelle darin KEINE Tabelle, sondern eine Abfrage (in der Entwurfsansicht)

  4. Wechsle in der Abfrage in die SQL-Ansicht (button oben links)

  5. Füge folgenden SQL-Code ein:

    SELECT Artikel.Artikel, VKBestelldetails.Menge, VKBestelldetails.Einzelpreis, VKBestelldetails.Rabatt FROM VKBestellungen INNER JOIN (Artikel INNER JOIN VKBestelldetails ON Artikel.ArtikelNummer = VKBestelldetails.ArtikelNummer) ON VKBestellungen.VKBestellNummer = VKBestelldetails.VKBestellNummer WHERE (((VKBestelldetails.VKBestellNummer)=" & letztBest & „) AND ((VKBestellungen.Firmennummer)=“ & [Forms]![Bestellungen eingeben]![Firmennummer] & „) AND ((VKBestellungen.Abteilungsname)=’“ & [Forms]![Bestellungen eingeben]![Abteilungsname] & "’) AND ((VKBestellungen.Art) =‚Bestellung‘))

  6. Wechsle mit dem Button in die Entwurfsansicht zurück…

Wenn Du nen Fehler bekommst, dass irgendeine Tabelle nicht vorhanden ist, ist es ok. Wenn Du aber einen Syntaxfehler hast, dann ist ein Fehler im SQL-String.

Viel Erfolg

Chris

1 Like

boah, ey, nu isser komplett - jetzt kann ich mich auch über
die Fehlerkorrektur innerhalb des SQL hermachen - bleibt nur
noch die Frage einsam im Raum stehen, warum das vorher nicht
ging *grybelnd*

nun, die maximale Länge eines String ist so groß wie der verfügbare Speicher, dafür ist aber die Länge einer VB-Codezeile begrenzt. Deswegen kann man Zeilen mit einem Abschließenden Leerzeichen+Unterstrich „verlängern“.

Hai, Chris,

den Trick kannte ich noch nicht - aber unabhängig davon war das SQL-Statement tatsächlich verkehrt (die beiden „ON“-Teile verdreht)
Dank Dir für die Hilfe…

Sibylle

nun, die maximale Länge eines String ist so groß wie der
verfügbare Speicher, dafür ist aber die Länge einer
VB-Codezeile begrenzt. Deswegen kann man Zeilen mit einem
Abschließenden Leerzeichen+Unterstrich „verlängern“.

Hai, Markus,

sonst klppte es auch immer mit dem „zusammenbasteln“ (sqlstring = sqlstring & „bla, bla“) und bei der Unterstrich-Geschichte hab ich das Leerzeichen vergessen - daher streikte die Methode wohl…
Dank Dir für die Hilfe

Sibylle