Ciao a tutti,
ho un recorset che è il risultato di una query che estrae una sola riga con 5 colonne.
Non riesco a concatenare queste 5 colonne tra di loro con il carattere ritorno a capo.
Questo il mio codice di esempio :
Dim rsc as RecordSet
Dim sql, v_id, CR, v_anagrafica, name, street, city As String
CR = Encodings.ASCII.Chr(10)
v_id = 100
sql = "SELECT * FROM client WHERE user_id='" + v_id +"' "
rsc = ConnectionDB.SQLSelect(sql)
rsc.MoveFirst
' Anagrafica
v_anagrafica = rsc.IdxField(3).StringValue + CR + rsc.IdxField(5).StringValue + CR + rsc.IdxField(6).StringValue
Txt_anagrafica.Text = v_anagrafica
v_anagrafica = rsc.IdxField(3).StringValue + Chr(10) + rsc.IdxField(5).StringValue + " " + rsc.IdxField(6).StringValue
Txt_anagrafica.Text = v_anagrafica
v_anagrafica = rsc.IdxField(3).StringValue + EndOfLine + rsc.IdxField(5).StringValue + " " + rsc.IdxField(6).StringValue
Txt_anagrafica.Text = v_anagrafica
v_anagrafica = Str(rsc.IdxField(3).StringValue) + chr(13) + Str(rsc.IdxField(5).StringValue) + " " + Str(rsc.IdxField(6).StringValue)
Txt_anagrafica.Text = v_anagrafica
name = rsc.IdxField(3).StringValue
street = rsc.IdxField(5)
city = rsc.IdxField(6)
Txt_anagrafica.Text = name + chr(13) + street + " " + city
Txt_anagrafica.Text = str(name) + chr(13) + str(street) + " " + str(city)
come potete vedere ho fatto varie prove su un oggetto textfield in xojo.
Ho usato:
- “stringValue” nel IdxField
- ho provato la funzione Str()
- ho usato vari return Chr(13), Chr(10), EndOfLine
con varie codifiche Encodings.ASCII.Chr(10) ect.
Se concateno semplicemente due string statiche come “MickMouse” + Chr(13) + “Pluto” il campo viene compilato correttamente.
Invece con rsc.IdxField(3).StringValue concatenati non funziona
Qualcuno sa aiutarmi?
Ciao Diego,
Immagini che hai verificato passo per passo il contenuto di v_anagrafica…
Puoi postarne il contenuto durante i vari tentativi?
Ciao Antonio,
si il risultato, purtroppo, è sempre uguale in tutti i tentativi :
RAGIONE_SOCIALE�INDIRIZZO�
è come se non leggesse il carattere return.
Oppure io mi sono fatto un idea sul campo del recordset che, per qualche strano motivo, non lo vede come una stringa e non fa il concat delle stringhe.
Infatti, come riportavo, se valorizzo la variabile v_anagrafica con due stringhe statiche :
v_anagrafica = “Pippo” + Chr(13) + “Paperino”
Txt_anagrafica.Text = v_anagrafica
Nel textArea o in un Textfield o in una Label stampa correttamente
Pippo
Paperino
Invece mi sarei aspettato un: Pippo�Paperino
Sai aiutarmi?
Grazie
Ciao
Hai un problema di encoding. (non hai detto che db stai utilizzando)
fai cosi:
crea un variable di appoggio e carica il valore del campo e ferma il programma subito dopo.
dim test as string=rsc.idxField(3).stringValue
break //o metti un breakpoint nell’istruzione seguente
nel debugger guarda la variabile test (premendo la lente d’ingrandimento)
Probabilmente la codifica è nil o comunque non UTF-8
Sono quasi certo che stai utilizzando MySQL.
In questo caso ricordati di attivare il comando per l’encoding a UTF-8 dopo lo connessione
Poi ti conviene fare una estensione ovvero metodo pubblico in un modulo in cui il primo parametro è extends campo as DatabaseField e restituisce una Stringa
Function utfValue(extends campo as DatabaseField) As String
dim s as String=campo.StringValue
if s.Encoding=nil then
Return s.DefineEncoding(Encodings.UTF8)
else
Return s
//se trovi altri encoding puoi invece di restituire direttamente il valore
// puoi ulteriormente operare con il seguente codice, ma in genere non è necessario
//if s.Encoding<>Encodings.UTF8 then
//return s.ConvertEncogind(Encodings.UTF8)
//else
//return s
//end if
end if
End Function
SUPER! grazie Antonio.
Per chiarezza ti confermo che il db è Mysql 8, come avevi intuito, e la variabile nel debugger dava encoding Nil.
Su tuo consiglio creerò il metodo pubblico con la definizione dell’encoding
Ora valuto solamente se inserire la stringa in un TextArea per permettere all’utente di copia/incollare il testo, oppure in solo visualizzazione in una Label.