Newsgroup: it.comp.lang.visual-basic
Titolo: Rimuovere spazi finali nei campi di un DBF

Ciao a tutti.
Devo eseguire una select su un DBF di FoxPro 2.6 e vorrei che i campi del
mio recordset non contenessero gli spazi finali.
Per esempio, in un DBF ho i campi Cognome e Nome di 35 caratteri.
Quando eseguo la select anche se utilizzo Trim(Cognome) oppure
RTrim(Cognome) o qualsiasi altra cosa... il campo del mio recordset ha
sempre gli spazi in fondo.
Questo è il codice che utilizzo:
    sConn = "Driver={Microsoft Visual FoxPro Driver};" & _
             "SourceType=DBF;" & _
             "SourceDB=" & txtDirDBF.Text & ";" & _
             "Exclusive=Yes;" & _
             "Null=No"
    Set cn = New ADODB.Connection
    cn.ConnectionString = sConn
    cn.Open
    sql = "SELECT Trim(Cognome) AS Cognome, Trim(Nome) as Nome FROM
Anagrafe"
    Set rs = New ADODB.Recordset
    rs.Open sql, cn
A questo punto se provo a scrivere
?rs!Cognome & "x" ottengo:
Cognome                            x
Sapete se esiste qualche modo per eliminare questi maledetti spazi?
Grazie.
Skysurfer

 Trim(rs!Cognome) & "x" ???
No, mi serve che il recordset risultante sia già senza spazi perchè devo
darlo in pasto ad una griglia che ridimensiona le colonne in base al
contenuto.
Ciao
Skysurfer

 base al contenuto.
Usare trim direttametne nella query? ;)


Qui non ho FoxPro però provando con SQL Server ho notato che se il tipo di
dato è Char, allora il campo contiene gli spazi alla fine, mentre se è di
tipo nvarchar no.
Quindi ti consiglio di provare (anche se non ho mai usato FoxPro) a cambiare
il tipo di dato sul db, sempre che tu ne abbia la possibilità, altrimenti
rimango anch'io in attesa che qualcuno suggerisca la soluzione più
appropriata....;-)
ciaociao

 ha scritto nel messaggio
news:b2vnd2$29sg$1...@half.spin.it...

FoxPro 2.6 è un database (si fa per dire) un po' vecchiotto... non
esistevano i campi VarChar ma tutti i campi Testo erano a lunghezza fissa.
Come ho scritto nel primo Post ho usato Trim direttamente nella Query, ma
non funziona!
Ho provato anche con RTrim e con LTrim(RTrim()) ma niente da fare!
sql = "SELECT Trim(Cognome) AS Cognome, Trim(Nome) as Nome FROM Anagrafe"
Set rs = New ADODB.Recordset
rs.Open sql, cn
Grazie.
Ciao
Skysurfer

 Ho provato anche con RTrim e con LTrim(RTrim()) ma niente da fare!
Una curiosità.
Verifica se il numero di caratteri del campo del recordset è esattamente
quello del campo della tabella di origine, o se si riduce al numero di
caratteri validi del campo del primo record del recordset o della tabella.
Perchè ricordo che, ad esempio, in FoxPro era tassativo, se volevi avere i
decimali, nell'IIF nelle select usare 0.0 anzichè 0 (e fra parentesi io lo
utilizzo anche in Sql-Server nell'isnull o coalesce, perchè secondo me serve
comunque).
Ciao
Alberto

 ha scritto nel messaggio
news:OOJ4a.133918$YG2.3...@twister1.libero.it...

Ho notato anch'io questa cosa, infatti avevo un'IIF nella select per evitare
le date vuote e se la data del primo record era vuota, la dimensione del
campo veniva impostata a 1 cosi' anche nei record successivi che avevano la
data vedevo solo la prima cifra della data.
Per quanto riguarda il cognome invece la dimensione del campo del recordset
è 35, anche se il primo record contiene un cognome di 4 caratteri. Devo
supporre però che a questo punto non c'è soluzione. Infatti se funzionasse
il Trim, mi imposterebbe la dimensione del campo a 4 per tutti i record.
Ciao.
Skysurfer