Newsgroup: italia.genova.discussioni
Titolo: [HELP]  ultima rottura su SQL, lo giuro...

Se voi mi giurate sul vangelo, sul Corano e sulla Torah, (tutte e tre
insieme) e sulla tomba della vostra bisnonna, che in una stringa SQL è
'impossibile' passare parametri, (=variabili del programma) io non vi rompo
più i coglioni con SQL.
Perchè io non ci credo.
Io non credo che esista una Structured Query Language, che non abbia una
'feature' che permetta di passare argomenti.
cioè deve essere possibile fare
FFF = "Kakkio"
stringaSQL = "select * from TABELLA where COGNOME = %FFF% " 
qui il segno % l'ho inventato io, ma devono esistere dei 'delimiters' per
dire al SQL engine che FFF è una variabile.
Un modo, una qualche regola sintattica, che identifichi una 'variable'
all'interno di un commando SQL, ci deve essere.
<MODE Totò ON>
...Eccome no !....ECCI DEVE ESSERE  !!!
<MODE Totò OFF>
Grazie. 
John.

 all'interno di un commando SQL, ci deve essere.
eccertochece'
FFF = "Kakkio"
stringaSQL = "select * from TABELLA where COGNOME = '" & FFF & "'"
se pero' hai anche dei casi tipo:
FFF = "De' Rossi"
allora prima devi fare:
FFF = Replace(FFF,"'","''")
bye
r


ma è proprio *questo* che voglio evitare (e che ho giá fatto).
Quindi, mi stai dicendo che NON ESISTE un metodo *diretto*.
Che delusione !!!  :-((((
E' una grave mancanza.
Io però non demordo, perchè alcuni 'specialisti' di SQL (altri dialetti, ad
es. versioni di Oracle) mi dicono che 'esiste' nella forma in cui avevo
detto io.
Solo che magari SQL di Access non ce l'ha.
Grazie comunque.
John.

 
veramente ti ho risposto cosi' perche e' quello che ho capito dal tuo 
post, ma forse tu intendi realizzare delle query parametriche
tipo questa:
PARAMETERS [NumeroRegistrazione] Long;
SELECT Codice, Aliquota
FROM TestateGiornale
WHERE IDregistrazione=[NumeroRegistrazione]
giusto?
usi DAO o ADO?
bye
r

Nerone wrote:

Uso ADODB.Connection, ADODB.Recordset e 
DRIVER = Microsoft Access Driver  (*.mdb)
e il tuo esempio non è chiaro, perchè non capisco se le parentesi quadre
sono intese in senso 'sintattico vero' cioé se il nome si deve racchiudere
in parentesi quadre, oppure se è inteso in senso 'esplicativo' come i
manuali le usano per definire una cosa 'opzionale'.
Grazie.
John.

più i coglioni con SQL.
 Giuro, giuro, giuro!
 Evvai che e' la volta buona!
	pgg
 Purtroppo vedo che qualcuno che non si fa i dibi' suoi mi ha preceduto...
 E va ben...  ;-)

 
le parentesi sono parte della sintassi.
pero' queste query di usano, prevalentemente, come surrogato delle 
"stored procedure" dei dbm veri.
la tua richiesta, invece, mi sembrava rivolta ad avere un sistema per 
cui la query venisse composta in esecuzione sostituendo una variabile 
con un valore, ad esempio in PHP potresti scrivere
$FFF = 'kakkio';
$stringaSQL = "select * from TABELLA where COGNOME = '$FFF' "
e avresti lo stesso risultato di
$stringaSQL = "select * from TABELLA where COGNOME = 'Kakkio' "
ma questa e' una possibilita' offerta dal PHP (e altri linguaggi di 
scripting) non c'entra nulla il dbm usato
dunque se ti serve creare la stringa sql in fase di runtime il metodo 
che usi va benissimo, invece se vuoi usare delle query precompilate
passando solo i parametri variabili devi usare, appunto, i parametri.
bye
r

  E va ben...  ;-)
non volevo interferire, sorry

non volevo interferire, sorry
 Ehi, siccome il tuo nick mi sembra nuovo, forse e' il caso di chiarire che
scherzavo!
 8-Ţ
	pgg

 r
e allora purtroppo mi hai confermato la tragica notizia  !!
Quello che voglio io si puo' fare solo col php !!
Col Visual Basic uno si attacca !!
Però è una ingiustizia ! E' un limite vergognoso del SQL accoppiato a Visual
Basic e Access.  !!! (urca come sono incazzato)
Grazie lo stesso.
E adeso prometto solennemente di non rompere più ufficialmente su SQL.
(quelli che mi vogliono dare delle 'dritte' sull'argomento, prego emailare
privatamente  a   ga AT agdp PUNTO de )
GRAAAASSIEEEEE.

 Perchè io non ci credo.
Guarda che non e' un problema di SQL ma del linguaggio che usi per 
comporre le stringhe SQL.
In vb componi la stringa come ti ha detto Nerone, mentre in altri 
linguaggi la componi come hai specificato tu. Ad esempio in php:
$nome="pippo";
$q="select * from cani where nome like '$nome';";
Qui la stringa inizia e finisce con i doppi apici, e quello che c'e' 
dentro e' tutt'uno (nota: i primi puntoevirgola sono la chiusura 
dell'SQL, i secondi la chiusura della riga php).
Pero' in vb non hai alternative.
Personalmente eviterei di insaccarmi in problemi piu' complessi come 
stored procedure o query con parametri. Naturalmente dipende dalla 
complessita' del progetto e dell'interrogazione, che comunque essendo in 
Access escludera' (credo) accessi multipli e 'cattivi'.

ops... ho visto solo ora che quello che ho scritto era stato anticipato 
da Nerone.
Chiedo scusa per avervi rubato banda e tempo ;o)

 Access escludera' (credo) accessi multipli e 'cattivi'.
magari però la 'query con parametri' forse è quello che mi serve.
Bisogna che approfondisca il topic.
grazie di tutto comunque. :-)))
Ciao.
John.


None. :-(
Adesso comunque vado a provare i due punti.
Non lascio nulla di intentato . :-)

 Non lascio nulla di intentato . :-)
niente da fare. Manco coi due punti funziona.

 
</romatic mode ON> 
<sottofondo musicale con violino>
Caaaaara la mia Sandra, <smack smack smack>, 
non ti andrebbe di emailarmi un esempio pratico privatamente ..:-)))
Su dai, lo sai che ti sogno ogni notte... 
</romantic mode OFF>
<violinista zittito con la forza dalle persone circostanti>

 Sandra
SANDRA, andiamo in un separé romantico ???
Sento già la presenza di pgg con una pistola a tamburo che si aggira nelle
vicinanze...
magari adesso accendo il MSN
VIDEOCHIAMAMI !!!  :-)))

non ho capito perche' la sintassi:
stringaSQL = "select * from TABELLA where COGNOME = '" & FFF & "'"
non ti sconfinfera, per quale motivo vuoi che il nome della variabile
sia *nella* stringa?
bye
r

Nerone wrote:

perchè facendo così, non si passa un 'pointer' ad una posizione di memoria
(come sartebbe più logico fare) bensì si *costruisce* una stringa atraverso
il compilatore.
se si stampa la stringa appena costruita, nel programma compilato, si
otterrà  "select from TABELLA where Cognome = 'Pippo'  ".
Invece un SQL che si rispetti, dovrebbe poter accettare parametri
(pointers).
Ciao.
J.  

 Sandra
grazie. mi sono stampato tutto. Ci risentiamo stasera su MSN.
J.

 (pointers).
Ho capito, ne fai una questione di velocità.
Ebbene, il tempo che ci mette un programma, anche fatto nel linguaggio 
interpretato più scalercio, a mettere insieme una stringa è 
incommensurabilmente minore al tempo che il database ci metterà a fare 
il parsing della query, eseguirla e darti il risultato.
Questa è la prima ragione per cui va benissimo fare la concatenazione di 
stringhe nel programma compilato.
La seconda è che database e programma compilato sono 2 applicativi ben 
distinti e quindi non puoi passare il pointer di uno all'altro (pensa 
che sei in s.o. multitasking, non su Z80).
Ultima precisazione: la differenza tra VB e PHP nella costruzione delle 
stringhe è solo sintassi del linguaggio, computazionalmente è lo stesso 
perchè entrambi fanno concatenazione di stringhe.

 campi risultanti).
E perchè mai ricompilare? Se pure la query è "esterna" come dici tu 
(tutta o in parte), ricade nella concatenazione come i suoi parametri.
Il caso limite è prendere la query da una "input box" e passarla al db, 
anche in questo caso mica ricompili (lasciamo perdere il fatto che non 
si deve fare per altri motivi...).
Vabbè, tanto il thread è nato OT e pgg non si incazzerà più di tanto ;-)

vicinanze...
 L'hai scritto per vedere se ti controllo, eh? Ti controllo, ti controllo!
 E vedo anche che ci sono certi che, partiti dal tuo OT, ora stanno
oteggiando alla grande per conto loro, estromettendoti di fatto...
 8-Þ
	pgg
 

Vabbè, tanto il thread è nato OT e pgg non si incazzerà più di tanto ;-)
 Vedi quanto ho appena replicato a John...
 8-Þ
	pgg

 select nome,cognome from fornitori where citta='Roma'
In tal caso la query è solo una delle mille cose da cambiare nel 
sorgente. Comunque la pianto qui, perchè ora esco e soprattutto perchè 
pgg sta preparando i mezzi bellici :-))

  8-Ş
"pgg il censore" di IGD ;-))))
Ciao!

pgg ha scritto:


 Ma non dovevi uscire?
 

 J.  
bye
r

 ora stanno *oteggiando*
bellissima!

 Ma non dovevi uscire?
 Sono uscito anch'io, e sono appena rientrato: mezz'ora in fila per votare!
 Tutti disciplinatamente in coda, anche molte persone d'eta', per strada,
perche' il seggio e' un gazebo, e meno male che e' bel tempo... Certo che
qualcuno se avesse potuto avrebbe cercato di corrompere Giove Pluvio...  ;-)
 Ora vediamo se John reagisce che gli ho oteggiato il 3ad!  8-Þ
	pgg

 Ora vediamo se John reagisce che gli ho oteggiato il 3ad!  8-Ş
Mbe', cambiamo filone di discussione!

Mbe', cambiamo filone di discussione!
 'zzo! Solo adesso ho sentito in TV che in Calabria hanno ucciso il
vicepresidente della Regione mentre usciva dal segggio!
 Ovviamente almeno finora non se ne conoscono i motivi, ma il luogo fa
pensare allo sfondo politico...  
	pgg
 

pensare allo sfondo politico...  
La mafia alligna nella politica. E' nei suoi cromosomi, è pur sempre
un potere senza concorrenza.
Questo, sommato all'enorme disponibilità di denaro "nero" dovuto a
spaccio di droga e controllo della prostituzione rende la situzione
disperata.
-- 
Nulla è impossibile per chi non lo deve fare.

 il luogo fa pensare allo sfondo politico...  
Non conosco i motivi dell'omicidio, ma penso che se l'hanno ammazzato
li', e' perche' era comodo trovarlo li'. Se devo ammazzare qualcuno,
lo faccio dove e' piu' facile. Credo. Non sono esperto nel ramo...

lo faccio dove e' piu' facile.
Come mafioso non vali una sega. ;-)


 Oltre a Report che sto guardando ora.
 Cavoli, meno male che me l'hai rammentato... Vedo che parlano dei giochetti
immobiliari di Ricucci: puo' essere che ci sia da imparare qualcosa...
	pgg

 Ho capito, ne fai una questione di velocità.
No caro Alessandro. E' la rottura di coglioni a 'costruirsi' la stringa
incollando pezzettini di stringhe come " ' " & KAKKIO & " ' ; ".
Sai che menata scriversi il code.
Invece si potrebbe scrivere  "select * from nome_tabella where CODPAZ =
codice_paziente". Ora per fortuna che devo leggere solo 11 tabelle. Ma il.
database ne ha 58.
sai che palle.
Capirai che palle. Specialemnte perchè c'é sempre qualcosa di 'particolare'
in una tabella che si deve processare 'in un modo speciale'.
Sì, lo so. Sono diventato un programmatore ULTRAPIGRO.
Io merito l'Oscar della pigrizia.
La la 'pigrizia' è il 'motore' della tecnologia, così come la curiositá è il
motore della scienza. :-)))
Ciao.
John.

pgg wrote:

Io non so niente. Sono innocente. Io avevo proposto a Sandra un tete-a-tete
romantico da un'altra parte... :-)))

Nerone wrote:

è proprio a questo che io mi ribello. Però stanotte darò una occhiata ai
'PARAMETERS' che mi ha mandato Sandra. Forse risolvo il problema 'a modo
mio'  :-))))

pgg wrote:

spero che Bertinotti vinca le elezioni. Mi è centocinquanta volte più
simpatico che Prodi !! Io se fossi di sinistra lo voterei.  :-))))

'feature' che permetta di passare argomenti.
Il fatto e' che tu vuoi che l'esito desiderato sia scritto come piace
piu' a te! 
Ripetendoti l'invito di scrivere "dentro" Access in VBA, per
facilitarti la vita, e seguendo quello che ti e' stato gia' mostrato
da Nerone, puoi costruire tutte le stringhe SQL che vuoi, basta che ci
concateni le espressioni condizionali che ti servono e i nomi dei
campi, separati da virgola, che, nell'ordine, genereranno
l'ordinamento dell'estrazione condizionata.
 
Basta che scrivi in modo che venga concatenato il contenuto di un
campo/variabile/parametro e NON che diventi contenuto il nome stesso
del campo.
Es.:
1) Nick = "LG" (il contenuto della variabile string Nick e' LG).
2) Nick = "'LG'" (il contenuto di Nick comprende adesso gli apici)
Se la condizione corretta che vuoi ottenere e'
"....WHERE Nome = 'LG'..." (come sai, se servono apici interni devono
essere diversi da quelli esterni...), 
nel caso 1
NON devi scrivere
"SELECT ....WHERE Nome = " & Nick & "...;"
perche' per effetto del concatenatore di spezzoni di stringa &
risulta:
"....WHERE Nome = LG...", che NON va bene; devi invece scrivere:
"...WHERE Nome = '" & Nick & "'...;" (apice, doppio apice...
ricordarsi di chiudere con punto e virgola finale una stringa SQL)
nel caso 2
avresti invece scritto:
"SELECT ....WHERE Nome = " & Nick 
perche' sarebbe risultato ancora:
"....WHERE Nome = 'LG'..." 
Complicazione dell'esempio: 
l'operatore immette dei dati in alcuni dei campi AM, BM...PM ... di
una maschera predisposta (che costituira' l'esempio d'estrazione -
contemporaneita' di quei dati); quindi col mouse clicca su un pulsante
OK previsto sulla stessa maschera, al quale e' associata - per click -
una routine a nome GeneraSQL. 
Nella routine GeneraSQL, sia StrSQL una stringa inizialmente posta
StrSQL = "".
Testando campo per campo (IF... END IF), per campo non-vuoto la
stringa SQL viene incrementata della condizione riguardante quel
campo, che - rispettivamente - sara' (ad es.):
StrSQL = StrSQL & "( A = '" & AM &"' ) AND " 
StrSQL = StrSQL & "( B = '" & BM &"' ) AND "
...
StrSQL = StrSQL & "( P = '" & PM &"' ) AND "
...
(* - eventuale condizione da recordset - vedi dopo)
Se alla fine StrSQL non e' rimasto a lunghezza nulla, allora si
aggiuge la testa e la coda 
StrSQL= "SELECT ...FROM ... WHERE (" & StrSQL & " True) ORDER BY.. ;"
e si fa eseguire la striga SQL..
In questo modo hai ottenuto una estrazione parametrica decisa al
momento dall'utente. Il quale utente potrebbe poi scegliersi delle
condizioni precedentemente memorizzate in un recordset (quindi quante
ne vuole e strane come le vuole) e concatenarle con quelle introdotte,
od eseguirle da sole.
Ad esempio in un recordset di condizioni di visibilita' di nome VISTE
settato come vst hai un campo CONDIZIONE con dentro l'occorenza
corrrente:
CITTA = 'Genova' OR CITTA = 'Darmstadt' 
Se vuoi che l'estrazione sia ulteriormente limitata da questa
condizione, nel punto (*)  - vedi sopra - devi includere:
StrSQL = StrSQL & "( " & vst!CONDIZIONE & ") AND "
Le parentesi interne qui servono perche'  c'e' una condizione di OR
che va eseguita prima della AND, altrimenti il computer darebbe una
diversa priorita'. Questo mostra come sia utile mettere comunque le
parentesi di delimitazione di un condizione di cui non si conosce la
scrittura interna.
Tieni conto che ho scritto tutto di getto, per cui avrei potuto
benissimo scrivere qualche minchiata. Se sbaglio mi corrigerete; ma lo
schema di fondo mi pare chiaro.
Ciao.
LG

simpatico che Prodi !! Io se fossi di sinistra lo voterei.  :-))))
  Non essendo di sinistra quindi avresti votato Prodi? Una signora vicino a
me: "Se ne accorgeranno tutti per chi votero' quando mi vedranno mettermi la
molletta al naso!"
	pgg

 
giusto!
bye
r


<cut>

Non dico che non sia valido quello che dici tu : anzi è validissimo, e
funziona pure. Ma 'a me non piace'.  :-)))
E poi io non posso 'liberamente' scegliere Access e VBA.  
Ho dei 'requirements'  ben precisi  :  DEVE essere in Visual Basic 6, (non
VBA),  DEVE assere in SQL e DEVE usare un Databank Access.
Quindi non ho libertà.
Comunque grazie.
John.

avevano votato circa 400 persone.
Io ho traversato due o tre volte la (lunga ) fila che c'era a Palazzo
Ducale, con Libero e Il Giornale bene in vista.
Niente rissa.
Puah...non ci sono piu i "comiunisti" di una volta....
Kairaddin

Puah...non ci sono piu i "comiunisti" di una volta....
 Tanto piu' incredibile se penso che a dar credito a certi commenti che ho
sentito in TV sono andati a votare "solo attivisti comunisti"...
	pgg

Come mafioso non vali una sega. ;-)
Temo di si'... 8-)

Puah...non ci sono piu i "comiunisti" di una volta....
He he he... deluso? 8-)

bellissima!
 Io osteggio l'oteggio!
 8-)
	pgg

sentito in TV sono andati a votare "solo attivisti comunisti"...
Puo' darsi.
Ma sono come le mezze stagioni.
Kairaddin

anch'io avevo pensato come fasce 
Beh, questo mi sembra eccessivo.
Non conosco altri Fasce, ma non credo siano tutti dei Nobel.
Immagino che Paolo, come Fasce, sia nella media.


 
Beh, dato che me lo chiedi, te la racconto tutta.
Sicchè mentre io e te stavamo beatamente sex-chattando, sento una orda
venire su dalle scale e purtroppo il peggio temuta si era avverato.
Nonostante il Ramadan, il mio amico marocchino è venuto con tutta la
famiglia, moglie e pentole comprese, per preparare la cena dopo-ramadan.
Di lì a poco, venne anche il vicino turco, al quale io gli chiesi (senza
pensare al Ramadan) : vuoi un cappuccino ? un bicchiere di vino.
E lui disse 'va bene'. Al che il marocchino si volta con occhi spalancati
come se avesse visto Maometto in persona 'Ma come, tu non fai il
Ramadan ??', e il turco preso alla sprovvista 'Mah... io... ehhh
veramente...' e si ricordò di un impegno improvviso e sparì.
Al che mentre i ragazzini si spargevano a amcchia d'olio per la casa,
occupandomi tutti i tre computers 'ufficiali' (uno l'ho chiuso nella mia
camera da letto), il papà si dilettava su un PC con Googlelearth (perchè
c'erano i figli, altrimenti si guardava le ultime novità porno), io quatto
quatto me ne andai in cucina dove la moglie preparava i 'kkakkiodakia' o
come si chiama. Ricordano un po' le 'bugie' che si fanno a Genova a
Carnevale. Più uova sode ed altre luculliano specialità dal nome
sconosciuto.
Inutile dire che io ho passato il tempo a 'piluccare' senza sosta in cucina,
senza aspettare la fine del Ramadan.
Alla sera poi mi è venuto un capogiro tremendo, pensavo di avere 600 di
glicemia, che quando tutti se ne sono andati, mi sono fatto portare al
pronto soccorso. Io coi miei precedenti, quando ho qualche sintomo 'molto
preoccupante' vado subito all'ospedale a controllare che non sia qualcosa
di grave.
E così, quando ritornai, mi misi subito a letto, senza poter leggere il tuo
post che mi ero stampato. Ma lo faccio oggi. Perchè presumo che questo è
proprio quello che cercavo.
Ti farò sapere puntualmente.
(<hehehehehe> come diceva mia moglie : 'you shouldn't have asked. Now you
got a full answer')
Ciao.
John.
 

pronto soccorso.
Che dire? :-(
-- 
Nulla č impossibile per chi non lo deve fare.

 
nel 'programmare' il marito, ricordati del metodo infallibile : 
di sempre di sì a tutte le sue richieste, non contraddirlo mai, sottomettiti
a qualsiasi volere suo, lasciagli sempre l'ultima parola, accetta sempre le
sue decisioni senza discutere.
Se fai così avrai un marito 'schiavo di te'  :-)))))

 anch'io avevo pensato come fasce
jez : 9:27 ! come mai in ritardo in ufficio stamattina ???  :-))))

 
non pensare male. Stavamo solo parlando di letteratura. Mi raccontava
la versione in film de 'L'amante di Lady Chatterley' che non l'ho mai visto.
(uuuhhh ma sempre questi malpensanti )

John ha scritto:

E ogni tanto riformattalo, che gli fa bene!

 
...la mia firma ha un costo... :-))))

 (*) e non fate i maliziosi :DDDDDDDD
E invece sì. Mi immagino tu che clicchi sui punti giusti.... :-))))

 Sandra
e no, quello si chiama upgrade!

Immagino che Paolo, come Fasce, sia nella media.
Si', sono normodotato in tutti i sensi. 8-)

so che non c'entra....
John, se hai tempo/voglia prova questo:
http://www.vbcorner.net/ita/mz-tools.htm
E' una serie di tool molto utili per chi programma in vb. Trovi anche la 
composizione delle stringhe di accesso per ADO/DAO, l'inserimento delle 
routine di gestione errori e tante altre cose belle.
Soprattutto: gratis.

giorgio wrote:

tenkiù anche a te, dotto'  :-))))