Newsgroup: it.comp.appl.access
Titolo: DCount su campi contenenti apici

Tabella "Elenco" con un campo denominato "Nome", di tipo Testo.
In questo campo sono elencati dei nomi (ci avreste mai creduto?), con
possibilità di avere due nomi uguali.
Devo avere un elenco di questi nomi, con a fianco il numero di volte che questo
nome compare nell'elenco.
Soluzione (banale):
Creo una Query con la proprietà "Valori univoci" impostata a "Sì", contenente
il campo "Nome" della tabella "Elenco"
Aggiungo nella query il seguente campo: Quantità:
DCount("Nome";"Elenco";"Nome=""" & [Nome] & """")
Fino a qui tutto bene, funziona perfettamente.
Ma se il campo Nome della tabella contiene dei record con caratteri del tipo "
(doppio apice), succedono i casini, perché il doppio apice finisce nel criterio
sballando il bilanciamento degli apici stessi.
Se so a priori che il problema è con i doppi apici, posso imbrogliare
sostituendo la DCount con DCount('Nome';'Elenco';'Nome=''' & [Nome] & ''''), ma
allora i casini capitano se il nome contiene il carattere ' (apice).
Come si risolve in questi casi? (Non voglio eliminare gli apici, perché Claudio
deve essere considerato diverso da "Claudio" e da 'Claudio').
Grazie. Claudio.

"Claudio" <cld@NOSPAM&COsupereva.it> ha scritto nel messaggio
news:W_Cl9.158219$ub2.3...@news1.tin.it...

Per questo problema generalmente utilizzo questa stessa function che sia per
gli ADO che per i DAO, non ricordo quali dei due creava casini con gli apici
doppi
Public Function AdhSeparatori(Testo As String) As String
AdhSeparatori = Replace(Testo, "'", "''") 'un apice singolo con due apici
singoli
AdhSeparatori = Replace(AdhSeparatori, """", "' & '" & """" & "' & '")
'doppio apice racchiuso tra due apici singoli inserito con operatore &
AdhSeparatori = "'" & AdhSeparatori & "'" 'racchiude l'intera stringa tra
gli apici singoli
End Function
Ho appena aggiunto delle modifiche per tener conto della possibilità degli
apici, singoli o doppi, all'inizio e alla fine della stringa e non l'ho
testata, a occhio direi che funziona
Fammi sapere
Ciao omnitow

"Claudio" <cld@NOSPAM&COsupereva.it> ha scritto nel messaggio
news:W_Cl9.158219$ub2.3...@news1.tin.it...

Prova così:
DCount("Nome";"Elenco";"Nome=" & Chr$(34) & [Nome] & Chr$(34))
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

"Claudio" <cld@NOSPAM&COsupereva.it> ha scritto nel messaggio
news:W_Cl9.158219$ub2.3...@news1.tin.it...

Magari dico una fregnaccia, ma non basterebbe non usare DCount? Ma le
funzioni di aggregazione (che poi è la stessa cosa ma almeno questi
casini se li gestisce Access da solo).
Nella query il primo campo è il campo nome della tua tabella; il secondo
pure ma, facendo uscire le funzioni di aggregrazione, selezioni
Conteggio.
Basta.
Un attimo adesso faccio pure una prova...
...funziona.
Bye
giaconet

 DCount("Nome";"Elenco";"Nome=" & Chr$(34) & [Nome] & Chr$(34))
Perdonami Roberto,
ma cosa cambia? Credo che abbiamo scritto esattamente la stessa cosa. Io
semplicemente ho usato il doppio-doppio apice per inserire un doppio apice
all'interno di una stringa...
Che ne pensi?
Ciao e grazie. Claudio.

 casini se li gestisce Access da solo).
Non dici una fregnaccia! :-)
In effetti per questo problema specifico è la soluzione migliore. Lascerò i
doppi apici a macerarsi ancora un po' insieme agli apici.
Grazie molte! Claudio.

 doppi
Li proverò appena possibile, e potrebbero essermi utili per il futuro. Nel
frattempo ho visto la soluzione di giaconet, che in effetti mi risolve
egregiamente il problema. Prima di vederla anch'io pensavo di fare una cosa
tipo la tua. Grazie molte.
Ciao. Claudio.

 Ciao e grazie. Claudio.
Prego. ;-)


 Public Function AdhSeparatori(Testo As String) As String
uhmmm.....pubblicita' occulta?
--
a.cara


Scusa ho fatto un casino, nel post precedente ho dato la soluzione per
stringhe passate in
runtime.
Cmq una function pubblica dichiarata in un modulo standard la puoi
richiamare anche
all'interno di una query:
===================
    - nel modulo standard:
Public Function AdhSeparatori(Testo As String) As String
'un apice singolo con due apici singoli
AdhSeparatori = Replace(Testo, "'", "''")
'doppio apice racchiuso tra due apici singoli inserito con operatore &
AdhSeparatori = Replace(AdhSeparatori, """", "' & '" & """" & "' & '")
'racchiude l'intera stringa tra gli apici singoli
AdhSeparatori = "'" & AdhSeparatori & "'"
End Function
    - nella query:
DCount("Nome";"Elenco";"Nome=" & AdhSeparatori([Nome]))
====================
oppure inserisci il tutto direttamente nella query:
DCount("Nome";"Elenco";"Nome=" & "'" & Replace(Replace([Nome], "'", "''"),
"""", "' & '" & """" & "' & '") & "'")
====================
Fammi sapere
Ciao omnitow

 ha scritto nel messaggio
news:3D971941...@blunet.it...

Non ti seguo, perchč ?!?!
Ciao omnitow

 Non ti seguo, perchč ?!?!
le routine prefissate adh provengono da un cd allegato a (oddio quelli
fanno il monitor del NG,  lo dico parzialmente) Acc... Develop..
Hand....
un "mattone" pesante ma interessante. ;<)
--
a.cara


Mannaggia... ed io che li ho tolti dall'esempio del manuale convinto che
erano la stessa cosa!!!
Ciao e grazie omnitow

 Provare per credere. ;-)
Roberto,
ho provato ma si comporta esattamente nello stesso modo. Per esempio, se il
primo record contiene la stringa Clau"dio, lanciando la query si arrabbia con
l'errore:
Errore di sintassi (operatore mancante) nell'espressione della query
'Nome="Clau"dio"'
(identico all'altra sintassi). Mi sfugge forse qualcosa?
Tu hai provato?
Ciao. Claudio.

 a.cara
Scusa sarò un po' tardo ma continuo a non seguirti in parte.
Access 2000 Developer's Handbook è la stessa dicitura che compare
nell'intestazione dei moduli del cd allegato al mio caro e buon vecchio
manualone della JACKSON che non mi annoierò (probabilmente voi ne avete già
pieni i maroni) mai di publicizzare il più palesemente possibile, da cui ho
copiato il nome della function.
Ciao omnitow

 copiato il nome della function.
appunto. Che sia della Jackson (in italiano) non lo metto in dubbio
per me e' della sybex visto che ce l'ho in inglese ;<) sai sono un
po' "snob", i manuali in italiano non li prendo in considerazione.
Visto che ci siamo (ma si rompiamo i "maroni", se fosse anche il
ministro
avrei anche piu' piacere!) hanno fatto (la Jackson intendo) entrambi i
volumi Server e Desktop?
--
a.cara

 ha scritto nel messaggio
news:3D9726CC...@blunet.it...


"Claudio" <cld@NOSPAM&COsupereva.it> ha scritto nel messaggio
news:NwFl9.158761$ub2.3...@news1.tin.it...

Hai ragione io l'ho sempre usato per dare la possibilità di inserire in un
nome l'apice (cosa che funziona, come si evince anche dall'help se cerchi
Virgolette nelle stringhe).
Quindi con il mio sistema Clau'dio viene trattato correttamente.
Non l'avevo mai trattato per inserire in un nome le virgolette (cosa più
rara che capiti); in quel caso trasformo il valore del campo testo da
Clau"dio a Clau"&"dio e lavoro con quello, ovvero sostituisco " con "&".
Scusami per l'imprecisione.


 questo nome compare nell'elenco.
[...]
        SELECT
            Elenco.Nome _
          , Count(Elenco.Nome) AS ConteggioDiNome
        FROM Elenco
        GROUP BY Elenco.Nome
        ORDER BY <QuelCheVuoi>
        ;
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

	Sentite ragazzi, io non è che ci abbia capito molto di quello
che avete detto, probabilmente mi manca qualche messaggio. In buona
sostanza anch'io ho lo stesso problema: ho una certa stringa x che
devo inserire in un DB Access, la quale stringa può contenere sia il
carattere ' (apice) che il carattere " (virgolette) e per la quale non
posso dire a priori se ne conterrà solo del primo tipo, del secondo o
di entrambi i tipi. Per l'apice il problema è presto risolto poiché
basta sostituire ad ogni sua occorrenza un'altro apice consecutivo ('
diventa ''), ma per le virgolette come si fa? Ho provato tutte le
combinazioni, "", \", etc ma non sono riuscito a trovare la soluzione
:(
Krige

 di entrambi i tipi.
... cut
Ti agganci a un thread un mese dopo? :-)
Visto che lo avevo aperto io, provo a risponderti io. Attualmente ho fatto
tesoro della funzione propostami da omnitow un mese fa, che ti ripropongo:
Public Function Virgolette(Stringa As String)
Virgolette = Replace(Stringa, "'", "''")
Virgolette = Replace(Virgolette, """", "' & '" & """" & "' & '")
Virgolette = "'" & Virgolette & "'"
End Function
Ho soltanto cambiato il nome della funzione, ma non ho toccato altro. E
funziona egregiamente... la uso tutte le volte che non sono sicuro della
situazione delle virgolette in una stringa. In questo modo una funzione come
una DLookUp diventa una cosa del genere:
=DLookUp("Indirizzo";"Rubrica";"Nome = " & Virgolette([Nome]))
e funziona comunque sia composto "Nome".
Ciao. Claudio.