Newsgroup: it.comp.lang.visual-basic
Titolo: Primo bug..............bene!!!!!!!!!!

Ecco il primo bug del mio programma....
Cerco di descriverlo.
Ho una bella lista di cognomi immessi dal tipo che adesso usa il programma.
Cliccando su uno dei cognomi parte un select sul db per poi ottenere tutti i 
dati relativi a quella persona.
Il problema è questo:
un cognome è stato inserito così : (è un cognome di pura fantasia...ma il 
problema è lo stesso)
Passala'
invece che :
Passalà
Ora. ogni volta che faccio doppio click sul cognome e mi parte il select sul 
db
il fatto che sia stato memorizzato con quell'apostrofo finale mi crea un 
errore nella clausola where cognome = etcetcetc?
Sapreste darmi un consiglio su come risolvere il problema?
Grazie
IAK 

 Sapreste darmi un consiglio su come risolvere il problema?
Nel caso di apici devi raddoppiarli così come per il doppio apice.
Forse vale la pena che tu faccia una query con parametri per la tua
select, così non dovrai più preouccuparti degli apici
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Errore trito e ritrito e ritrito...
Quando si ha a che fare coi campi char/varchar/text e compagnia bella, 
bisogna SEMPRE raddoppiare gli apici (apostrofi) del testo cercato.
Ora... se l'utente scrive nelle sue caselle di testo GIANFRANCO D'ANGELO 
(nome di fantasia), la query dovrebbe somigliare a:
SELECT Cognome, Nome, DataNascita, nSpettacoli
FROM PersonaggiTV
WHERE Nome='GIANFRANCO'
AND Cognome='D''ANGELO'
dove quel doppio apice che vedi in D''Angelo non sono le VIRGOLETTE 
DOPPIE ma DUE APICI distinti e separati.
In questo modo escapi l'apice.
Altrimenti ottieni una query (errata) come la seguente:
SELECT Cognome, Nome, DataNascita, nSpettacoli
FROM PersonaggiTV
WHERE Nome='GIANFRANCO'
AND Cognome='D'ANGELO'
Ovviamente il database, che deve processare la query, crede che il testo 
di Cognome termini dopo la D (Cognome='D') e reputi tutto ciň che segue 
come un comando errato...
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa.

PiantoTardivo ha scritto:

Ciao.
Dovrebbe essere sufficiente fare una query con il cognome 
racchuiso tra doppi apici es.
SELECT *
FROM Table
WHERE Table.Surname="Passala'"
In questo modo trovi il record qualunque cosa abbia scritto 
l'utente.
Prova e fammi sapere... in Access funziona
Ciao Kenshirov
--  
Postato da Virgilio Newsgroup 
http://newsgroup.virgilio.it
Completo come il newsreader, ma senza il newsreader

E se, per puro caso di sfiga acuta, l'operatore scrive nella casella di 
testo le virgolette?
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...



Innanzitutto GRAZIE!!!!!
....ma se ho una sintassi come questa:
rs.Open "select fornitore from magazzino where fornitore = '" & 
ListView1.SelectedItem.SubItems(1) & "' order by nome asc", cn, 
adOpenStatic, adLockOptimistic
Come faccio a raddoppiare gli apici????????
Grazie ancora
IAK

Per risolvere il problema io mi sono costruito una funzione che passata una 
stringa te la restituisce con gli apici singoli raddoppiati
Public Function dbText(strTemp as string) as string
    dbText=Replace(strTemp,"'","''")
End Function
La funzione replace sostituisce nella stringa contenuta strTemp la prima 
sequenza di caratteri con la seconda. In questo modo la tua query diventa:
rs.Open "select fornitore from magazzino where fornitore = '" & 
dbText(ListView1.SelectedItem.SubItems(1)) & "' order by nome asc", cn,
 adOpenStatic, adLockOptimistic
Ciao
"PiantoTardivo" <aa...@aaaa.aa> ha scritto nel messaggio 
news:h%u9e.56001$IN.9...@twister2.libero.it...


 Ciao
Grande Soluzione!!!!
Grazie!!!!!
IAK 

 Grazie!!!!!
Aggiungo che puoi crearti un'unica funzione del tipo
Function dbData (dato as string, tipo as integer) as string
'tipo=1 stringa
'tipo=2 data
'tipo=3 numero
select case tipo
  case 1
	'fai replace e pulisci il testo come vuoi
  case 2
	controlli che sia una data e la formatti nel modo giusto (es. interbase
vuole mm-dd-yyyy)
  case 3
	'Controlli sia un numero e lo formatti eventualmente col decimale
giusto
end select
end function
Poi potresti fare una funzione analoga per le insert into, dove fai
quello di cui prima, ma se il campo è "" o non è una data o non è un
numero allora passi NULL, altrimenti passi 'dato' (includi anche le '
nella function).
Infine una funzione semplice semplice che ti evita di fare isNull tutte
le volte.
Quindi tipo
function nnull(adocampo as adodb.field) as string
  if isnull(adocampo) then
	nnull=""
  else
	nnull=adocampo
  endif
end function
in questo modo puoi farti direttamente:
text1=nnull(adors("NOME"))
text2=val(nnull(adors("NUMERO"))
ecc.
Io uso l'ultima e una cosa analoga della seconda.
-- 
Freccia@Bulldozer63 :D

 testo le virgolette?
vanno previste anche quelle,  perche` su certi databases
provocherebbero errore: una buona idea e` imho quella di
Freccia con una funzione che formatti l'output a seconda
del tipo di dato, cosi` li` dentro ti gestisci i caratteri
"fastidiosi".
-- 
ciao, hal

 
Si, ma.... se hai un cognome tipo D'Annunzio che succede ??? ;)
Secondo me bisognerebbe filtrare all'inizio, durante il
primo salvataggio...
Cioe' se hai un apostrofo finale, deve essere un accento
per cui sostituisci "a'" con "à" e si risolve!!
Ciao!
Hiho

 Ciao!
Ciao :)
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...


 Baccala' e poi cerca Baccalà son cavoli suoi).
Gia'.... e' un baccala' !! ;)
Ciao!
Hiho

 il DB a qualcun altro ??
Nel database COMUNQUE viene memorizzato D'Annunzio, ma per comporre una 
query "sintatticamente corretta" l'apice deve comparire doppio...
