Newsgroup: it.comp.appl.access
Titolo: Lunghezza max stringhe

Salve,
    mi rendo conto possa essere una domanda stupida o magari fatta e 
rifatta, ma ho provato aleggermi tutti i post vecchi e a fare ricerche ma 
non ho trovato nulla in merito. Devo fare un SQl all'interno di VBA ma la 
lunghezza massima delle stringhe è di 255, per cui avendo una streinga SQL 
più lunga non mi permette di eseguirla in modo corretto me la tronca. Esiste 
un tipo di dato più lungo che permetta di creare stringhe SQL di lunghezza 
variabile.
Grazie mille a tutti e scusate ancora per la domanda forse ovvia.
Ingrid 

 Ingrid
Con MEmo hai 65.000 e rotti caratteri. Ti bastano?
-- 
-- 
Massimiliano Amendola
www.accessgroup.it
Il sito italiano di svilupatori Access
www.donkarl.com/it/cisa
 

ingrid ha scritto:

Una precisazione.
Non è la stringa ad avere il limite a 255 caratteri, ma il Campo di
tipo Testo....!
Usa il MEMO come ti ha suggerito MA.
@Alex

 ha scritto nel messaggio 
news:1160991294....@f16g2000cwb.googlegroups.com...
ingrid ha scritto:

Una precisazione.


@Alex
Il tipo di dato MEMO mi basterebbe eccome, solo che se lo dichiaro come tipo 
dato in VBA mi da
errore di compilazione per: Tipo definito dall'utente non definito, io l'ho
dichiarato nel seguente modo:
Dim stringa As Memo
Grazie ancora!
Ingrid


Non č che non torni mai a capo? .... " & _  ... eccetera? :)
Ciao eSQueL 

 Ciao eSQueL
Mi spiego meglio. Prova a dividere la stringa con la sequenza [" & _] in 
questo modo:
rst.Open "SELECT BANDA_BASSOTTI.* " & _
         "FROM BANDA_BASSOTTI " & _
         "WHERE (
BANDA_BASSOTTI.ID
)=6111;",  ....
Ciao.
eSQueL 

 ha scritto nel messaggio 
news:453360a3$0$39885$4faf...@reader4.news.tin.it...

Massimiliano mi ha mandato una mail suggerendomi di utilizzare il tipo di 
dato Variant e ora funziona.
Grazie mille per la Vostra disponibilità
Ciao
Ingrid 

ingrid ha scritto:

A mio avviso è un suggerimento errato.
Basta leggere l'Help per vedere che:
String
(lunghezza variabile) 10 byte + lunghezza stringa Da 0 a circa 2
miliardi
Da cui si evince che non è possibile avere una limitazione a
255...!!!!
Il Variant si usa quando non sai a priori il tipo di dato oltretutto mi
pare chiaro che sarebbe
solo uno spreco di risorse come dice l'help:
Variant
(con caratteri) 22 byte + lunghezza stringa Stesso intervallo di String
a lunghezza variabile
La dichiarazione di tipo STRINGA è quello che serve e devi usare
quello.
Ritengo che tu stia sbagliando la composizione della dicitura SQL
tentando di concatenare
in modo erato la stringa....!
Ti consiglio di pensarci meglio o di evidenziarci il modo in cui stai
tentando di rendere
operativa la sintassi....!
@Alex


Confermo, mi sono fattp portar via dalla sua eccezione.
Io pensavo al campo non alla stringa
Anche io faccio lunghe stringhe di query per i rst e per le query action
e non ho mai avuto problemi di lunghezza (al limite ogni tanto problemi di 
ritorni a capo)


 @Alex
Chiaro, e facilmente dimostrabile caricando più di 255 caratteri in una
variabile String, per esempio 5.000:
  Dim Str As String
    Str = String$(5000,"X")
    Debug.Print Len(Str), Str
Il problema deve essere dovuto ad altre cause. Magari se posta il codice
si riesce a capire la causa dell'errore.
Ciao.
-Marco-
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 -Marco-
Ciao Marco
Fai attenzione che le Stringhe a lunghezza fissa hanno un limite molto
inferiore...!
String
(lunghezza fissa) Lunghezza stringa Da 1 a circa 65.400
String
(lunghezza variabile) 10 byte + lunghezza stringa Da 0 a circa 2
miliardi
Detto questo a mio avviso è il CR solamente a creare dei problemi.
@Alex


Mi ricordo vagamente mi e' successo ed era sotto VB in connessione ADO 
con trasferimento dei valori via XML.
Avevo trovato in giro sulla rete anche il riscontro della situazione.
Non era tanto un problema di lunghezza stringa ma un problema legato 
alla lunghezza "eseguibile" dell'SQL. Fatto sta, al  tempo, sono stato 
costretto a modificare la logica di esecuzione dell'SQL. E forse il 
limite era proprio 255 caratteri.
In tutto cio' quello che non mi torna e' il fatto che con un Variant 
Ingrid dice che va bene.
--
ac

 ha scritto nel messaggio 
news:rcKYg.30724$pp1....@tornado.fastwebnet.it...

Ho provato una select lunga oltre 300 caratteri (ADO). Nessun problema.
eSQueL

 ac
Credo che ti ricordi molto, ma molto... vagamente......
Nessun problema a 255 caratteri nè con SQL nè sulle stringhe, il
problema è solo per la concatenazione, se scrivi:
sSQL="SELECT * FROM T1 " & _
          "WHERE....." & _
allora troverai un problema, che verrà segnalato come massima
lunghezza ammissibile...
Se invece scrivi:
sSQL="SELECT * FROM T1 "
sSQL=sSQL+"WHERE...."
non avrai nessun problema.
@Alex

Scusa Alex,
questo č parte del primo post di Ingrdi:
*Devo fare un SQl all'interno di VBA ma la
lunghezza massima delle stringhe č di 255, per cui avendo una streinga SQL
piů lunga non mi permette di eseguirla in modo corretto me la tronca.*
Che vuol dire "me la tronca". Magari mi sbalgio, ma non ho mai visto il 
compilatore troncare qualcosa.
Ciao
eSQuel 

 [CUT]


Questa 
  Dim Str As String
è a lunghezza variabile, quindi con limite 2 miliardi e rotti.
Mentre questa 
  Dim Str As String * 5000
è a lunghezza fissa, con limite 65.535 caratteri.
Solitamente tutti usano la prima sintassi, strano che dia errore già oltre
i 255.
Il CR è un carattere come un altro e occupa 1 solo posto nella stringa, a
differenza del CRLF che ne occupa 2. Non credo che siano quelli a creare
problemi, dev'essere qualcos'altro.
Basta interrompere il codice prima dell'esecuzione della query e
controllare l'SQL generato, per vedere se è corretto o no.
Il caso più comune in cui compare l'errore di superamento dei limiti di
lunghezza delle stringhe è quando non si chiudono bene i doppi apici, nel
qual caso considera tutto il codice seguente come facente parte della
stringa.
Bisognerebbe accertare se dà errore in fase di assegnazione dell'SQL alla
variabile stringa o in fase di esecuzione della query.


 eSQuel
Nemmeno io, ma personalmente non mi perdo nella diagnosi di chi non ha
le idee chiare, cerco di capirne la logica in base alla segnalazione e
di capire !
Se leggi il mio Post ho esposto quanto in mia conoscenza per risolvere
il problema della
composizione stringa SQL.
A valle delle prove che l'OP farà vediamo se ho frainteso...!
@Alex


Il problema me lo ricordavo. Non ricordavo la soluzione.  Nel frattempo 
mi sono andato a riguardare quel codice e non ho trovato alcuna 
stranezza ergo la cosa che scrivi dovrebbe essere certa al 101%.
--
ac


Non è proprio così semplice, nel senso che in entrambi i casi,
potresti ottenere errore se
l'assegnazione della variabile avviene in modo errato:
Questo è il modo LIMITATO o errato(da quanto io ho potuto
riscontrare):
sSQL="SELECT * FROM T1 " & _
          "BLA....BLA.....BLA...." & _
          "BLA....BLA....."
Questo è il modo che non dà problemi(sempre in base alla mia
esperienza):
sSQL="SELECT * FROM T1 "
sSQL=sSQL+"BLA....BLA.....BLA...."
sSQL=sSQL+"BLA....BLA.....BLA...." 
Ciao
@Alex

 @Alex
Se l'hai provato è sicuramente così. Strano che nell'help non sia citato
questo limite.
Ma che fine ha fatto ingrid? Se ci posta il codice che ha usato ci si può
fare un'idea più precisa del problema.
Ciao.


 -Marco-
@Alex

 ;-)
La cosa potrebbe farsi intrigante ;<)
--
ac

 ac
Io passo....
@Alex

 ac
Io passo....
@Alex
Precisiamo non sono un uomo...ad ogni modo grazie mille per i vari 
suggerimenti, ma sinceramente il mio problema persiste, quindi vi posto il 
codice che magari trovate subito l'errore:
Private Sub Comando56_Click()
Dim stringa As Variant
stringa = "select Anagrafica_Convenzioni.Cod_Convenzione, 
Anagrafica_Convenzioni.Descrizione_Convenzione from Anagrafica_Convenzioni, 
Rate where Anagrafica_Convenzioni.Id_Convenzione = Rate.Id_Convenzione and "
stringa = stringa + "Rate.Data_Scadenza <#09/01/2006#"
stringa = stringa + " GROUP BY Anagrafica_Convenzioni.Cod_Convenzione, 
Anagrafica_Convenzioni.Descrizione_Convenzione"
Me.Convenzioni_SOTTOMASCHERA.Form.RecordSource = stringa
Grazie mille ancora a tutti per la vostra disponibilitą!!! 

 Grazie mille ancora a tutti per la vostra disponibilità!!!
Al di là di altri aspetti, se hai scritto
stringa = "select Anagrafica_Convenzioni.Cod_Convenzione,
Anagrafica_Convenzioni.Descrizione_Convenzione from Anagrafica_Convenzioni,
....
è sbagliato perché ogni ritorno a capo va marcato con [" & _] e la nuova 
riga dev'essere aperta dai doppi apici, sino alla riga finale (chiusa dagli 
apici).
Ossia
stringa = "select Anagrafica_Convenzioni.Cod_Convenzione, " & _
"Anagrafica_Convenzioni.Descrizione_Convenzione " & _
"from Anagrafica_Convenzioni, ...."
Inoltre, non sono proprio sicuro che "Rate" possa star lì prima della 
clausola WHERE
Ciao
eSQueL 

 Grazie mille ancora a tutti per la vostra disponibilità!!!
Leggendo la SQL mi pare che ci sia un errore ..... appaiono 2 Tabelle,
ma nessun JOIN
Anagrafica_Convenzioni e Rate.....
Secondo me non ha un gran senso di funzionamento....!!!
Hai provato a scrivere la Query direttamente in QBE e verificare che
funzioni... in modo corretto...?
@Alex