Newsgroup: it.comp.lang.visual-basic
Titolo: Apice in una TextBox

Ciao a tutti,
ho una subrutine che prende il valore di una textbox ed esegue una query di 
ricerca:
SELECT nome,cognome FROM dbo.anagrafiche WHERE cognome like '" _
 & TextBox1.Text & "%'
Ora, se nella textbox inserisco stringhe normali tipo Mario Rossi oppure 
Luca Bianchi,
funziona tutto regolarmente, ma se inserisco una stringa con
caratteri strani tipo gli Apici
Mar'io Ro's'si
non mi funziona piu' il programma.
Come si puo' risolvere questo problema ?
Grazie ! 

 ha scritto nel messaggio
news:46cc7b93$0$10628$4faf...@reader2.news.tin.it...

Normalmente si usa questo:
Replace(Text1.text,"'","''")
cosa che avresti trovato facilmente con una ricerca nei vecchi post.
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

 cosa che avresti trovato facilmente con una ricerca nei vecchi post.
Grazie mille :) 

 Grazie mille :)
Ti consiglio di fare una funzione string con la quale passare TUTTE le
stringhe che passi al database, sia per select, insert, update, delete.
Per ora potrebbe essere:
Function String2DB (byVal InString as String) as String
	 String2DB = Replace$(InString,"'","''")
End Function
Poi potrai aggiungerla ad esempio filtrando alcuni tipi di caratteri che
non vuoi far inserire nel DB ecc.
Poi fai:
SELECT nome,cognome FROM dbo.anagrafiche WHERE cognome like '" _
 & String2DB(TextBox1.Text) & "%'
Ti consiglio di usare sempre funzioni di formattazione per dialogare col
DB, se almeno devi fare una modifica in un colpo le becchi tutte.
Io ultimamente uso una funzione per variabili/textbox al DB, una da
Recordset a TextBox ed una da RecordSet a Variabile (questa non è altro una
funzione Variant che controlla l'IsNull).

 DB, se almeno devi fare una modifica in un colpo le becchi tutte.
Giustissimo.
Allora, visto che siamo in argomento, ti dò un paio di idee (che poi ho 
implementato nelle mie funzioni ....2SQL):
- Parametro optional boolean per effettuare il Trim$
- Parametro optional long per effettuare il left$
e, chicca delle chicche:
passare alla function, byref, il field del recordset da cui il dato 
proveniva o comunque verso cui andrà (spesso gli insert e update 
avvengono su tabelle di cui già abbiamo un recordset a disposizione). 
Dal Field, si ricava il Type e la DefinedSize, e si può formattare il 
dato come numerico, oppure come stringa rispettando la lunghezza 
massima ammessa, oppure come data, oppure come booleano, ecc...
Ciao
Alberto
-- 
Noi ammazziamo solo per motivi buoni.
E quando sono buoni, sta a noi indicarlo.
[Guccini]

 massima ammessa, oppure come data, oppure come booleano, ecc...
Io per le maschere standard opero in maniera leggermente diversa, nella
proprietà TAG della texbox dichiaro tipo:
With frmMain.txtMy
  .Item(0).Tag = "SDESCREG|Descrizione"
  ecc.
End With
Primo carattere è il tipo (anche per accettare o meno dati all'input, fare
validate ecc.), fino al | è il nome del campo, e dopo c'è la descrizione
della label (ok qui sarebbe meglio avere un'associazione su file di testo o
altro).
Il caricamento quando viene ricercato un record si riduce a questo:
  For i = 0 To txtTab.UBound
    txtTab(i).Text = Rs2Text(AdoRs.Fields(tc$(txtTab(i))), tt$(txtTab(i)))
  Next i
tc e tt estraggono NOMECAMPO e TIPODATO dal TAG
Certo è restrittivo e ti impone alcune limitazioni, ma posso gestire input
di tabelle velocemente.
Se però ad esempio in una maschera metto un Check o una Combo sono
obbligato a farlo a mano, oppure mettere una TXT invisibile sulla quale
metto i valori scelti.

 End Function
Ti ringrazio moltissimo per i consigli :)
Solo una cosa....scusa l'ignoranza ma in Replace$ il dollaro a che serve ? 

 ha scritto nel messaggio
news:46cdb4c0$0$10627$4faf...@reader2.news.tin.it...

Credo sia un'errore di scrittura la funzione Replace restituisce solo
stringhe ed il $ non c'è...
Contrariamente ad altre funzioni che senza il $ prevedono un Variant...


 Contrariamente ad altre funzioni che senza il $ prevedono un Variant...
...
Da quanto ne so, da prove fatte da qualcuno che ne capisce moooooolto piu' 
di me (F.Balena), le istruzioni che devono restituire stringhe, terminate 
con il $, sono piu' veloci delle omologhe senza dollaro.
Ciao... Maurizio 

 Ciao... Maurizio
Quello che hai letto da Balena è tutto vero peccato che no lo hai applicato
ad una funzione
Esistente...!
Replace$ NON ESISTE... in quanto come ho detto REPLACE restituisce
nativamente STRING.
mentre esistono :
Left/Left$
Format/Format$
ecc...
Senza scomodare Balena per una cosa simile, il motivo della differenza
prestazionale l'ho rioportato sopra
se ti impegnavi a leggere meglio la mia risposta e magari capirla...!
Questione di TIPO di Dati interpretati, STRING invece di VARIANT...!
Leggi bene l'Help e non inventare funzioni inesistenti.
;-)


 ;-)
..
Ah, beh, meno male che hai messo la faccina, altrimenti mi arrabbiavo 
davvero :-)
Ciao... Maurizio 

 Questione di TIPO di Dati interpretati, STRING invece di VARIANT...!
Si, sinceramente l'ho usato col $ per "abitudine".
Dato che spesso la nidifico con mid$, left$, right$, ucase$, lcase$.
Non ho neanche controllato che non servisse.
Ora mi sovviene una domanda.
Ma la Left, Mid, ucase, lcase, Dir ecc. che restituiscono variant a che
servono?
Immagino a qualcosa del genere:
Dim myDate as Date
  STR= "ABC01/12/2007"
  myDate=Mid(STR,4)
o al limite
  myDate=CDate(Mid(STR,4))
Che forzando la CDate dovrebbe comunque equivalere a:
  myDate=CDate(Mid$(STR,4))

 servono?
    Dim s As Variant
    s = Null
    Debug.Print Mid(s, 1, 2)
    Debug.Print Mid$(s, 1, 2)
    Debug.Print Replace(s, "a", "o")
    Debug.Print Replace$(s, "a", "o")
Alcune come la Replace non hanno differenza.
Ciao