Concatenare tramite a capo campi di un recorset

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.