- 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
Die Begrenzung auf einen VBA-String ist rund 2 GB, warum, glaubst du, seine 256 begrenzt? - Beachten Sie, dass wenn Sie eine Zeichenfolge in einem Meldungsfeld/watch Fenster, es wird angezeigt abgeschnitten.
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

Schreibe einen Kommentar