Newsgroup: it.comp.lang.visual-basic
Titolo: interrogazioni sql run-time

salve a tutti
sto realizzando un sistema informativo aziendale e, fra i privilegi 
dell'amministratore, vorrei che ci fosse anche un tool per scrivere ed 
eseguire interrogazione personalizzate del database.
in pratica non sarebbe altro che un modulo contenente una textarea ed un 
pulsante.
nella textarea l'utente scrive tutta la sua query, si preme il pulsante e si 
visualizza il risultato della query.
Ora...
come si fa a tirare fuori i dati se non si sanno a prescindere i nomi delle 
colonne richieste?
considerate che se nella SELECT viene scritto tutto l'elenco di colonne in 
output in qualche maniera si potrebbe ricavare il nome delle colonne, ma se 
uno usa * oppure delle funzioni di aggregazione la cosa diventa molto molto 
piu tosta.
avete qualche idea?
grazie
Luca

 avete qualche idea?
Certo.
Prova a guardare lo strumento di autocomposizione query di access. Da
quanto scrivi dovresti riprodurre un meccanismo simile.
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 pulsante e si visualizza il risultato della query.
Dim RS as Adodb.Recordset
Set RS = Connessione.Execute (Textbox1.Text)
Set DataGrid1.DataSource = RS
Se invece vuoi generare dei controlli per ciascun campo, dopo l'execute puoi 
fare:
Dim FLD as Adodb.Field
For each FLD in RS.Fields
    Select Case FLD.FieldType
        Case AdChar
        ......
        ......
    End Case
Next FLD
Ciao
Alberto
-- 
E tutto mi sembrava andasse bene... 

 quanto scrivi dovresti riprodurre un meccanismo simile.
eh no... forse non mi sono spiegato bene.
l'utente mi scrive una query nella textarea. io semplicemente la prendo e la 
eseguo: se poi vengono restituiti degli errori di sintassi non faccio altro 
che riportarli all'utente che ha scritto la query.
questo è facile.
il difficile è come realizzare, in caso la query vada bene, la tabella del 
risultato dell'interrogazione:
non so quante colonne fare, non so come si chiamano le colonne, non so 
niente...!
per esempio... c'è un modo per scorrere automaticamente non solo le righe di 
output ma anche le colonne in uscita? se poi riesco a ricavare dal risultato 
della query le intestazioni di colonna richiesta allora dovrei essere a 
posto.
però non so se si può fare, e sopratutto non so come farlo!
Luca 

 eh no... forse non mi sono spiegato bene.
Ti sei spiegato bene (beh, più o meno), ma probabilmente la tua difficoltà è 
nel leggere le risposte...


 è nel leggere le risposte...
potrebbe anche essere... 

 niente...!
Pensavo che tu volessi semplificare le cose all'utente, informandolo di
quali erano le tabelle presenti nel db, e quali colonne fossero contenute
in ciascuna tabella.
Comunque, come ti faceva gentilmente notare Alberto, tu forse non sai che
colonne sono contenute nel recordset risultante, ma il recordset stesso
sì, quindi basta chiederglielo con i dovuti modi (al recordset, non ad
Alberto), e potrai risolvere tutti i tuoi problemi.


 Alberto), e potrai risolvere tutti i tuoi problemi.
ok... con vb ho provato e in effetti questo metodo funziona.
però ora cambio un po le carte in tavola.
se io dovessi usare il tutto su una pagina asp e non su una form di vb, come 
potrei fare?
tanto per iniziare non potrei usare il controllo datagrid...
mi sapete aiutare anche in questo caso?
cercando su google ho trovato veramente poco che possa aiutarmi
grazie 

 mi sapete aiutare anche in questo caso?
Non ce n'è bisogno. Albe ti ha già detto tutto quello che ti serve. Devi
scandire la collection fields del recordset.
Ci sarà un po' da ridere per costruire la tabella a forza di <tr> e <td>,
ma in una quindicina di giorni dovresti venirne fuori...


 <td>, ma in una quindicina di giorni dovresti venirne fuori...
Non esageriamo:
'Inizializzazione tabella
  response.write "<table border=1 class='TT' cellspacing=0 cellpadding=2>"
  'Riga intestazione
  response.write "<tr>"
  'Scrittura intestazione colonne
  for intX=0 to RsDB.fields.count-1
   response.write "<td><b>" & RsDB.fields(intX).name & "</b></td>"
  next
  'Fine riga intestazione
  response.write "</tr>"
  'visualizzazione dati
  do while not RsDB.eof
   'inizio riga dettaglio
   response.write "<tr>"
    for intX=0 to RsDB.fields.count-1
     response.write "<td >" & RsDB.fields(intX) & "</td>"
    next
   'Fine riga dettaglio
   response.write "</tr>"
   intNumeroRecord=intNumeroRecord+1
   RsDB.movenext
  loop
  'Chiusura tabella
  response.write "</table>"
Ovviamente, RsDB è un recordset generico...
ciao!
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca

 Non esageriamo:
funziona perfettamente. grazie mille!
Luca 

 Luca
E' una porzione di codice presa da una mia pagina ASP che utilizzo per 
eseguire delle query generiche su SQL Server...
Ciao!
