- Verkettung und die maximale Länge von string in VBA, access
Ich habe severas Probleme mit strings in access-vba.
Der Sache ist, den Zugang (manchmal) begrenzen Sie die string - Länge über 255 Zeichen.
Jedoch, je nachdem, WIE der string aufgebaut wurde, es kann in der Lage zu wachsen größer als 255 chars.
Gibt es auch einen Beispiel der funktionierenden code :
Dim strReq as String
strReq = "SELECT exampleField1, exampleField2, exampleField3, exampleField4, exampleField5 "
strReq = strRec & ", exampleField6, exampleField7, exampleField8, .... [etc. insert many fields, you get it]"
strReq = strReq & " FROM myTable INNER JOIN Tbl2 ON ...[many JOINs as well]"
Und so weiter, ich arbeite oft mit großen Anfragen, sodass die 256 chars ist einfach kaputt.
Dieser Beispiele ist allerdings nicht funktioniert :
Dim strReq as String
strReq = "SELECT exampleField1, exampleField2, exampleField3, exampleField4, exampleField5 " & _
", exampleField6, exampleField7, exampleField8, .... [etc. insert many fields, you get it]" & _
" WHERE exampleField1 = x AND exampleField2 = y AND exampleField3 = z" & _
" ORDER BY 1,2,3,4,5,6"
Und das funktioniert nicht, entweder :
Dim strReq as String
Dim strWhere as String
strReq = "SELECT exampleField1, exampleField2, exampleField3, exampleField4, exampleField5 "
strReq = strRec & ", exampleField6, exampleField7, exampleField8, .... [etc. insert many fields, you get it]"
strWhere = "WHERE exampleField1 = x "
strWhere = strWhere & "AND exampleField2 = y"
strWhere= strWhere & " AND exampleField3 = z"
strReq = strReq & strWhere [& strJoin / strOrder / strHaving / etc]
Ich weiß, weiß näherungsweise, wie ich kann oder kann nicht verketten von strings, aber ich würde gerne wissen,, wie Zeichenfolgen exakt arbeiten, auf access vba , weil, ich gebe zu, es scheint ziemlich zufällig, so weit...
*(Bitte beachten Sie, dass diese Zeichenfolgen werden soll, der mehr Länge dann die 255 Zeichen UND die Abfrage wird nur dort als ein Beispiel, syntaxe Fehler oder die genaue Länge, die in diesen nicht der Punkt hier)
*Bearbeiten -- code hinzufügen, ich bin tatsächlich mit (Mit der funktionierenden version, versucht, sowohl die Reiz-Versionen, um den code zu bereinigen und beide waren Lauschangriff
strReq = "SELECT " & IIf(Len(rsRap.Fields("top")) > 0, " TOP " & rsRap.Fields("top"), "") & " " & rsRap.Fields("champs") & ", Sum([Canada]*[Quantité]) AS Montant, Sum(TblDetailCom.Quantité) AS Qty " & IIf(Len(rsRap.Fields("rep")) > 0, ", NickName", "")
strReq = strReq & " FROM (SELECT * FROM TblRepresentant WHERE RefRep not In(13,15,26,27,28)) AS TblRepresentant INNER JOIN "
strReq = strReq & " ((TblProduits LEFT JOIN TblTypBijoux ON TblProduits.Type = TblTypBijoux.IdTypBijoux) "
strReq = strReq & " INNER JOIN (TblCouleur INNER JOIN ((TblClients INNER JOIN ((TblComm LEFT JOIN RqMaxIdTrait ON TblComm.ID = RqMaxIdTrait.IdCommande) "
strReq = strReq & " LEFT JOIN TblTraitement ON RqMaxIdTrait.MaxOfIdTrait = TblTraitement.IdTrait) ON TblClients.ID = TblComm.RefClient) "
strReq = strReq & " INNER JOIN TblDetailCom ON TblComm.ID = TblDetailCom.RefCom) ON TblCouleur.ID = TblDetailCom.RefCoul) "
strReq = strReq & " ON TblProduits.IdMod = TblDetailCom.RefProd) ON TblRepresentant.RefRep = TblClients.RefRepre "
strReq = strReq & " WHERE (TblClients.RefRepre <> 5 OR (TblClients.RefRepre=5 AND TblClients.ID In (1210,219,189,578))) "
'(((TblProduits.Coll)=16) AND((TblComm.CoDatCom)>=#2011-01-01# And (TblComm.CoDatCom)<=#2014-01-01#) " 'Params Collection (16) DteDeb/fin
'strReq = strReq & " AND "
If Len(rsRap.Fields("type")) > 0 Then
strReq = strReq & " AND TblProduits.[Type] = " & rsRap.Fields("type")
End If
If Len(txtDe) > 0 Then
strReq = strReq & " AND TblTraitement.DtTrait >= #" & txtDe & "# "
End If
If Len(txtA) > 0 Then
strReq = strReq & " AND TblTraitement.DtTrait <= #" & txtA & "# "
End If
If Len(rsRap.Fields("pays")) > 0 Then
strReq = strReq & " AND TblClients.ClPaiePays = '" & rsRap.Fields("pays") & "' "
End If
If Len(rsRap.Fields("rep")) > 0 Then
strReq = strReq & " AND TblClients.RefRepre = " & rsRap.Fields("rep")
End If
If Len(rsRap.Fields("col")) > 0 Then
strReq = strReq & " AND TblProduits.Coll=" & rsRap.Fields("col")
End If
If Len(rsRap.Fields("group")) > 0 Then
strReq = strReq & " GROUP BY " & rsRap.Fields("group") & IIf(Len(rsRap.Fields("rep")) > 0, ", NickName", "")
End If
strReq = strReq & " HAVING Sum([Canada]*[Quantité]) >= 0 "
If Len(rsRap.Fields("order")) > 0 Then
strReq = strReq & " ORDER BY " & rsRap.Fields("order")
End If
String
Daten Typ hat eine sehr große Grenze rund 2 Milliarden Zeichen. Es gibt Orte, wo Sie nicht verwenden können strings diese lange, aber Sie nicht bekommen, einen Fehler bei der Zuordnung strReq
variable. siehe hier für einige Diskussion, z.B., wenn Ihre Tabelle den Datentyp Text, die Grenze ist 255.Ich spreche nicht über das Feld in einer Tabelle hier. Es geht um die variable (Dim str... als String) in VBA. Ich weiß, es "sollte" über 255 chars lange, aber je nachdem, WIE ich das verketten von string ich kann oder kann nicht länger als 255 Zeichen. (Ich weiß nicht, über die string/varchar-Feld in einer Tabelle, ich bin einfach gefragt, um die "string" - variable verwendet, in den Formen, in vba)
Bekommst du eine Fehlermeldung, wenn Sie versuchen zu bauen diese langen strings? Wenn ja, was ist die Nachricht?
Haben Sie etwas getan, wie
Debug.Print Len(strReq)
InformationsquelleAutor Ludovic Migneault | 2013-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheinen Sie die Tatsache zu akzeptieren, dass ein VBA-string kann enthalten mehr als 255 Zeichen. Als ein Beispiel dieser code erstellt ein 264 Zeichenkette.
Eher du bist der Begegnung mit Schwierigkeiten, auf der Grundlage der Methode, die Sie verwenden, um zu verketten von strings. Ich weiß nicht, wo das Problem ist genau, aber ich kann Ihnen sagen, es gibt ein limit für die Anzahl der Zeilenfortsetzungen können Sie beim hinzufügen einer Zeichenfolge. Zum Beispiel der folgende code kompiliert und läuft ohne Fehler. Wenn ich aber fügen Sie eine weitere Zeile fortgesetzt (
& cstrSegment _
), der compiler beschwert sich "Zu viele Zeilenfortsetzungen".Wenn, der das problem beschreibt, die Sie sehen, die Einschränkung basiert auf Zeilenfortsetzungen, nicht die string-Länge. Wenn nötig, könnten Sie umgehen, die Grenze durch den Bau der string in mehreren Schritten. Tun
"MyBigString = MyBigString & cstrSegment _"
bis an die Grenze des Zeilenfortsetzungen, dann fügen Sie zuMyBigString
mit anderen"MyBigString = MyBigString & cstrSegment _"
block.Stellen Sie sicher, dass Sie nicht irregeführt, wie viele Zeichen Sie sehen. Vielleicht ist die situation, Sie sehen nur die ersten 255 Zeichen, aber der string enthält tatsächlich viele mehr. Das würde Sinn machen, da Sie berichtet, Sie sind nicht immer ein Fehler Gebäudes der string offenbar fehl.
Bestätigen Sie die tatsächliche Länge der Zeichenfolge mit
Len()
:Können Sie auch drucken Sie die Zeichenfolge den Inhalt an das Fenster, um zu sehen, was es enthält:
Können Sie Strg+g um das Direktfenster zu öffnen.
OK, meine Antwort war spekulativ. Ich denke, es würde helfen, zu zeigen, uns eine genaue Stück code, das das problem verursacht, die Sie versuchen zu lösen.
Keine einzige Zeile tatsächlich kaputt 110 chars so war es nicht wegen einer einzigen Zeile, die länger als 256 chars... Aber vielleicht ist das "& _ " was macht es look wie eine einzige Zeichenkette (so würde es die Büste 255) und , wieder, vielleicht das Problem verursachen... Oder es ist es nicht ^^' da vba-debug-zeigen nicht das ganze Zeichenfolge, sondern nur die ersten chars ist es schwer für mich, um wirklich alles testen... Wer weiß eigentlich warum der Zugang ist, dies zu tun? (und wie es tatsächlich funktioniert mit srtings)<
Bitte zeigen Sie uns-code veranschaulicht das problem.
Ich habe den code in der Bearbeitung meiner ursprünglichen Frage
InformationsquelleAutor HansUp
Beim verketten von Zeichenketten für SQL, fügen Sie ein
vbCrLf
Charakter, wenn Zeilen lang wachsen. Access scheint Probleme haben, die Einnahme von VBA-strings (ausgeführt als in SQL) größer als etwa 1000 Zeichen. z.B.InformationsquelleAutor user10887287