Newsgroup: it.comp.www.asp
Titolo: [Visual Interdev] DTC-Recordset e dannata query parametrica

Non so se questo è l' NG giusto, ma non ho trovato altri ng italiani che
trattino asp e interdev, quindi sono andato per esclusione e ho postato
qui..
Sto tentando di realizzare la classica query parametrica su un db access, da
una pagina che contiene una listbox scewlgo un elemento e lo passo ad una
pagina asp come parametro he dovrà essere usato in una query dinamica.
Quando cioè scelgo un elemento nella listbox , scatta un redirect del tipo:
http:// blablabla/pagina.asp?param_id=ciccio
Allora...le ho provate tutte ma non sono ancora riuscito a fare funzionare
la query (ho anche seguito le istruzioni sul sito microsoftma nulla da
fare..)
In pratica leggo il parametro passato come
    addr = request.querystring("param_id")
e questo funziona, poi creo un DE command con dentro la query:
   SELECT id,ip FROM tabella WHERE ip = ?
metto nel parameter tab il parametro come adVarWChar e qui ho già due dubbi:
1) questo tab mi chiede il nome del parametro....cosa ci devo mettere ? Io
ci metterei
addr, mentre nell'esempio che leggo sul sito di microsoft ci mette il nome
dell' attributo su cui faccio il WHERE, cioè in questo caso ci metterebbe
ip..mah !
2) Sempre in questo parameter tab mi chiede il value del parametro..che ci
devo mettere qui dentro ? Il valore non lo so a priori..uso una variabile
apposta per quello !
Se lo lascio vuoto quando visualizzo la pagina si incazza xchè dice che la
lunghezza della stringa è sbagliata (e dopo vari tentativi ho scoperto che
si riferisce al contenuto di questo campo value), se ci metto qualunque
altra cosa la pagina viene visualizzata, ma il risultato della query è
nullo, nel senso che non viene mostrato nulla !
Una volta fatto questo creo un DTC-Recordset trascinando il DE command sulla
pagina che si linka automaticamente al DEobject.
Creo poi una grid legata al recordset per visualizzare il risultato della
query ma non viene visualizzato nulla !!
Ho anche provato, dopo il codice del recordset, a fare un
<% response.write(Recordset1.getSQLstr()) %>
e mi viene mostrato
SELECT id,ip FROM tabella WHERE ip = ?
Il parametro che andrebbe sostituito al posto del ? non c'è..ma forse è
perchè la sostituzione viene fatta a run time ?
Avete qualche consiglio ?

    SELECT id,ip FROM tabella WHERE ip = ?
?
Che vuol dire WHERE ip = ?
la select deve essere
strSQL = "SELECT id, ip FROM tabella WHERE ip = ' " & addr & "'"
Ricorda che, a prescindere dal linguaggio che usi per gestire recordset e
compagnia bella, ad eseguire le QUERY SQL e' ADO e ADO ha bisogno di comandi
scritti in Structured Query Language (SQL per gli amici), rispettando le
regole del dialetto SQL parlato dal database su cui vai a lavorare.
SQL di Oracle e' leggermente diverso da SQL di MS SQL server , che e'
diverso da quello di MS Access, che e' diverso da quello di MYSql (linux).
Si tratta di differenze minime, come la forma degli apici, la presenza di
comandi dedicati (come quelli per le query su testo tramite index server,
per MSSQL 2000), simboli diversi per le wildcard (access usa gli * mentre
SQL2000 usa i % ) per le date, le stringhe ecc...
Quindi oltre a conoscere bene il linguaggio di programmazione che usi per
pilotare l'oggetto che accede al database (MDAC, qualcosa che hai creato
tu...), conoscere i metodi e gli oggetti di ADO (o chi per esso), devi anche
conoscere il linguaggio che usa il tuo database.
Ne consegue quindi che la query che hai scritto:
SELECT campi FROM tabella WHERE uncampo = ?
non ha senso, hai chiesto al database di cercare in un campo il numero ?, in
quanto per tutti i motori dei database un valore non racchiuso da apici (o
virgolette, dipende dai casi) e' un numero, non una stringa.
Saluti
Andrea


Vuol dire che in Visual Interdev se vuoi fare un query parametrica devi
scrivere un ? al posto del parametro, altrimenti non ti abilita il parameter
tab in cui poi puoi specificare che tipo di parametro devi passare e le sue
proprietà. Il problema è che non funziona :)
Comunque ho risolto tutto semplicemente scrivendo lA query a mano nel
recordset (solo la clausola SELECT e FROM) e aggiungendo la clausol
parametrica WHERE nell'handler dell'evento recordset_before_open (mi pare si
chiami così)
