Newsgroup: it.comp.lang.delphi
Titolo: firebird + delphi + apice...

Salve a tutti, come trattate il carattere ' (apice) durante gli
inserimenti ?
ho notato che se faccio :
 cdsclientdataset.insert;
 cdsclientdataset.miocampo.asstring := 'L'automobile';
 
cdsclientdataset.post
;
 cdsclientdataset.applyupdate(-1);
ottengo un errore dovuta a quella L apostrofata....
come risolvete in casi del genere ?
E se inserissi una frase con piu apostrofi ?
Saluti,
Antonio.

Doppio apice.
-- 
______________________
Gaetano
"Nel coltellino svizzero di Chuck Norris c'è McGyver" 


e se ci sono piu apici ? tipo l'a'u't'o'm'o'b'i'l'e ? che faccio ?

 e se ci sono piu apici ? tipo l'a'u't'o'm'o'b'i'l'e ? che faccio ?
Basta raddoppiare ogni apice (es. l''a''u''t''...).
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

Scusa stai sfottendo?
ogni apice diverso dal delimitatore di strnga va raddoppiato.
-- 
______________________
Gaetano
"Nel coltellino svizzero di Chuck Norris c'č McGyver" 

 ogni apice diverso dal delimitatore di strnga va raddoppiato.
QuotedStr()
potrebbe servire allo scopo.
-- 
Morde

QuotedString
se non fosse che si tratta di una stringa costante :-)


 se non fosse che si tratta di una stringa costante :-)
Io non l'ho capita questa... :-)


Ovviamente non sfotto...cmq la stringa costante era un
esempio...potrebbe essere una qualsiasi stringa...vorrei solo capire
come bisogna a trattare una stringa proveniente da un oggetto
TEdit...quindi inserita a runtime... come faccio a cercare gli apici
ogni volta e a raddoppiarli ?
esiste una funzione che presa in ingresso una stringa cerca un
carattere e lo sostituisce con un altro ? anzi per dirla meglio esiste
un componente che si occupa di tutto questo ? O mi sto dimenticando di
qualche proprieta di TEdit ?
Saluti,
Antonio.

 ogni volta e a raddoppiarli ?
Usa la funzione suggerita da Morde: *QuotedStr*.
Ciao,
   Marco.


ogni volta e a raddoppiarli ?
Usa i parametri e vivi tranquillo.

 Usa i parametri e vivi tranquillo.
Cosa intendi per parametri ?

> Usa la funzione suggerita da Morde: *QuotedStr*.
Io appunto dicevo che se usi una stringa costante tipo 'Hello World'
non serve il QuotedString, ovviamente se si tratta di una variabile stringa
qualsiasi è necessario l'uso della funzione.
-- 
______________________
Gaetano
"Nel coltellino svizzero di Chuck Norris c'è McGyver" 

 non serve il QuotedString [...]
Ora ho capito... :-D  Pardon, sono giorni difficili... :-)


La Funzione QuotedStr non va bene perche anche se inserissi solo la
stringa : PROVA mi ritroverei nel db la stringa ' PROVA '
quindi la suddetta funz non fa quello che voglio...poi sarebbe scomodo
il fatto che ogni volta che inserisco una stringa debba utilizzare
questa funzione...l'ideale sarebbe utilizzare un componente che
possegga una proprieta del tipo che se trova un apice va a sostituire
il doppio apice.
Saluti,
Antonio.

 stringa : PROVA mi ritroverei nel db la stringa ' PROVA ' [...]
Hai sostanzialmente escluso tutte le soluzioni più semplici per 
risolvere il tuo problema: uso di una funzione, uso dei parametri...



Magari preferisce scrivere una classe su misura oppure un componente!
:-)


 Magari preferisce scrivere una classe su misura oppure un componente!
Alla fine, sempre quelle soluzioni dovrà usare. ;-)


 
Magari preferisce fare perdere tempo ;)
Mario

Cosa intendi per parametri ?
I placeholder tipici, nel codice SQL, per ospitare valori, a
prescindere dal formato. Se scrivi qualcosa del tipo:
select * from pippo where id = :p_id
quel p_id č appunto un parametro. Usando i parametri, eviti di doverti
preoccupare di problemi di formato (risolti dal driver al livello piů
basso).

 basso).
Si sarebbe la strada migliore...ma io nel post avevo scritto il
contesto in cui mi avveniva quella situazione...cioè io inserisco nel
cds e poi il datasetprovider si occupa del resto dopo aver fatto
cds.applyupdate...
ora io non posso pensare di dover chiamare una funzione per ogni campo
di una tabella o cmq sembra un approccio poco ortodosso...poi la
funzione che mi è stata suggerita non risolve il mio problema perche
se l'utente inserisse la stringa PROVA applicando la funzione
quotedstring(PROVA) verrebbe inserita una stringa diversa, ovvero la
stringa ' PROVA '
probabilmente sono io a non aver capito i vostri suggerimenti ma spero
di aver esposto correttamente il problema.

 contesto in cui mi avveniva quella situazione... [...]
Nel corso del thread, hai scritto tutti i possibili contesti di 
utilizzo, o meglio ogni volta che viene proposta una soluzione, la tua 
esigenza cambia.
Ti sono state date tutte le possibili e immaginabili soluzioni per 
scrivere stringhe letterali, stringhe con doppi apici in contesti 
"manuali", uso dei parametri per le query... non ci sono altri casi.
Ciao,
   Marco.



Infatti ogni volta la risposta non era pertinente alla domanda...il
punto è semplicissimo io nel primo thread ho spiegato come effettuavo
l'inserimento quindi NIENTE QUERY...soluzione da scartare quindi nel
mio caso...successivamente mi è stato suggerito di utilizzare la
funzione quotedstring ed io ho spiegato piu di una volta che questa
soluzione non va bene perche se la stringa non contiene apici viene
inserita con un apice all'inizio e uno alla fine che non desidero...
la domanda è semplice non penso di aver peccato di chiarezza...poi ho
chiesto se c'era un componente lo facesse tramite il settaggio di una
proprieta, perche utilizzare una funzione ogni volta che devo trattare
una stringa non la ritengo una pratica molto ortodossa...poi se voi
che siete piu esperti di me ritenete che sia corretto allora mi
adeguo...
Ciao,
Antonio.

Adesso è tutto chiaro! Un altro Troll!
-- 
______________________
Gaetano
"Nel coltellino svizzero di Chuck Norris c'è McGyver" 

 Adesso è tutto chiaro! Un altro Troll!
Probabilmente è lo stesso Troll


Io ho sempre postato in questo NG non vedo perche dovrei essere un
Troll.
Se uno non sa rispondere o nn ha capito la domanda puo tranquillamente
dirlo...Ma forse è piu semplice accusare una persona di essere un
Troll anziche provare a leggere le domande postate e le risposte
ricevute alla stessa e magari provare a dare risposte pertinenti.
A questo punto non interverro piu su questo post.
Saluti,
Antonio.

 ora io non posso pensare di dover chiamare una funzione per ogni >campo
Per quale motivo tu non possa ancora non mi è noto.
Io ho spesso scritto righe come:
SQL := Format('select * from tabella where campo_stringa1 = %s and
campo_stringa2 = %s, [QuotedStr(valore1), QuotedStr(valore2)]);
Anche questo approccio va benissimo.

  
cdsclientdataset.post
;
Questo codice non può produrre errori.


Infatti è esattamente quello che faccio...ma ottengo quest'errore :
inserendo la stringa L'AUTOMOBILE ottengo il seguente errore : SQL
SERVER ERROR : TOKEN UNKNOWN - line 1,column 43 AUTOMOBILE.
almeno che non abbia sbagliato qualcosa a livello DB.