PDA

View Full Version : [VBA access] "Somma" di stringhe


maximarco
16-06-2006, 16:54
Spero di non aver sbagliato sezione!

Ho un problema con access
ho una zabella fatta in questo modo:

codice provincia
---------------------
MARCO MI
GIOVANNI VA
LUCA CO
MARCO BG
MARCO BS
ALBERTO TO
GIOVANNI GE


Come faccio a creare una query che mi dia questo output

codice provincia
---------------------
MARCO MI - BG - BS
GIOVANNI VA - GE
LUCA CO
ALBERTO TO

Ho trovato questo modulo VBA ma non fa quello che voglio fare io

Public Function Concatena(ByVal StudenteID As String,
ByVal Nome As String,
ByVal Separatore As String) As String

Static s_strStudenteID As String
Static s_strOutput As String

' Verifico se si tratta di un nuovo studente
If s_strStudenteID <> StudenteID Then
' Memorizzo lo studente
s_strStudenteID = StudenteID

' Inizializzo la variabile di output con il nome dello studente
s_strOutput = Nome

Else
' Concateno il nome
s_strOutput = s_strOutput & Separatore & Nome

End If

' Valorizzo il valore di ritorno della funzione
Concatena = s_strOutput

End Function




Da abbinare a questa istruzione SQL

SELECT StudenteID, MAX(Concatena(StudenteID, Nome, ', ')) AS Nomi
FROM Studenti
GROUP BY StudenteID;


Avete qualche suggerimento?

Stiwy.NET
19-06-2006, 08:57
Spero di non aver sbagliato sezione!

Ho un problema con access
ho una zabella fatta in questo modo:

codice provincia
---------------------
MARCO MI
GIOVANNI VA
LUCA CO
MARCO BG
MARCO BS
ALBERTO TO
GIOVANNI GE


Come faccio a creare una query che mi dia questo output

codice provincia
---------------------
MARCO MI - BG - BS
GIOVANNI VA - GE
LUCA CO
ALBERTO TO

Ho trovato questo modulo VBA ma non fa quello che voglio fare io

Public Function Concatena(ByVal StudenteID As String,
ByVal Nome As String,
ByVal Separatore As String) As String

Static s_strStudenteID As String
Static s_strOutput As String

' Verifico se si tratta di un nuovo studente
If s_strStudenteID <> StudenteID Then
' Memorizzo lo studente
s_strStudenteID = StudenteID

' Inizializzo la variabile di output con il nome dello studente
s_strOutput = Nome

Else
' Concateno il nome
s_strOutput = s_strOutput & Separatore & Nome

End If

' Valorizzo il valore di ritorno della funzione
Concatena = s_strOutput

End Function




Da abbinare a questa istruzione SQL

SELECT StudenteID, MAX(Concatena(StudenteID, Nome, ', ')) AS Nomi
FROM Studenti
GROUP BY StudenteID;


Avete qualche suggerimento?
La prima cosa che mi è saltata all'occhio è la stringa sql che dovrebbe essere sbagliata perchè dovrebbe bastare questa:
SELECT DISTINCT(Concatena(StudenteID, Nome, ', ')) AS Nomi
FROM Studenti
Quella di prima era sbagliata perchè ti restituiva l'idstudente quando non era possibile perchè tu ne concatenavi più di uno.

La funzione concatena la modificherei così:
1. parametri:
a. Nome studente
2. ciclerei su tutti i record con nomestudente = parametro
3. Concatenerei quindi le province
4. Return della stringa concatenata

Dovrebbe bastare :sofico:

maximarco
21-06-2006, 07:21
So di chiedre troppo ma non sono molto ferrato di programmazione in access.
Mi scriverestre almeno il ciclo con i comandi per scorrere nei record.
Avevo pensato a un do while fino a EOF ma non so come assegnare a una variabile il numero dei record e soprattuto come collegarmi al db