Newsgroup: it.comp.lang.visual-basic
Titolo: [ADO] ricerca in db

vorrei sapere come fare per effettuare una ricerca in un database e poi
elencare il risultato in una ListBox
Ciao
--------------------------------
Inviato via 
http://usenet.libero.it

 elencare il risultato in una ListBox
Beh, fin dove sei arrivato?
Il database di che tipo č? L'hai aperto? Ti sei connesso? Sai come č
strutturato? Le tabelle che lo compongono? Conosci i campi che intendi
selezionare? E quelli oggetto di verifica nella ricerca? I loro contenuti?
Per mettere i dati nel LitBox devi prima averli.
Poi List1.Additem valore_da_elencare


Innanzitutto il programma consiste in un archivio CD. Nel Database (Access)
c'č una sola tabella.I campi del db sono Band,Disco,Anno:quindi nella
listbox dovrebbero essere aggiunti i dischi che soddisfano i criteri di
ricerca.Poi non so se la ListBox sia proprio adatto,sto giusto pensando a
qualche altro controllo + adatto(DataGrid)...
Il comando per la ricerca č rsArchivio.Find "Band LIKE '" & CStr(Text1.Text)
& "%' "
Il problema č come disporre il risultato nella List1...


 Il problema è come disporre il risultato nella List1...
Tanto per cominciare, ti consiglierei di mantenere l'idea del ListBox.
Assegnare allo stesso un font non proporzionale in modo che i vari caratteri
abbiano tutti le stesse dimensioni. Per adottare una Grid sei sempre a
tempo.
Se se già arrivato ad eseguire quel comando, allora puoi fare (adatta il 20
e il 30 esemplificativi in funzione delle tue esigenze):
List1.Clear
if rsArchivio.bof=0 or rsArchivio.eof=0 then rsArchivio.movefirst
do
    if rsArchivio.eof then exit Do
    LIst1.Additem left(rsArchivio!Band,20) & Space(1) &
left(rsArchivio!Disco,30) & Space(1) & rsArchivio!Anno
    rsArchivio.Movenext
Loop
--
"Ci ho messo tutta la vita a capire che non é necessario capire tutto"
(René Coty)

 Loop
Non mi e' molto chiaro perche' hai messo 20 e 30...


 Non mi e' molto chiaro perche' hai messo 20 e 30...
Era un esempio (vedi funzione Left) per limitare il numero dei caratteri
restituiti da Band e Disco, allo scopo di evitare che ti vadano fuori dalla
ListBox.

Col metodo che hai suggerito perň nella list vengono visualizzati tutti i
record, non solamente quelli che soddisfano il criterio di ricerca!!


 tempo.
Giusto.
Aggiungerei, visto quanto sono brutti i font non proporzionali, che qualche
tempo fa avevo postato il codice per incolonnare con qualsiasi font il testo
in un listbox.
Ciao
Alberto

 record, non solamente quelli che soddisfano il criterio di ricerca!!
La Find cerca il primo che soddisfa la ricerca.
Bisogna adattare il tutto con un po' di SQL (però il codice che fornisci è
un po' poco):
Dim rs2 as ADODB.Recordset
rs2.Open "Select * From Tabella Where Band LIKE '" & CStr(Text1.Text) & "%'
Order By Band", oggetto_connessione
Ora in rs2 hai _solo_ i records che soddisfano la scelta.
Adatta il resto del programma usando rs2.


 
Problema quasi risolto! Quasi, perche' tutto funziona correttamente, pero'
quando faccio una ricerca per Anno, ad esempio cerco un disco che ho
nell'archivio che e' uscito nel 1975, non mi visualizza nella List solo
quelli che sono usciti in quell'anno, ma mi da' tutti i record!
Probabilmente perche' in tutti gli altri record "Anno" c'e' sempre un numero
in comune con 1975,cioe' il numeri 1 e 9...non esiste qualche altra query
per ovviare a questo problema?
Ciao e grazie comunque!!
Andrea


 in un listbox.
A questo proposito vorrei chiederti del chiarimenti.Questo e' il tuo codice:
Dim Spazi As Long
Dim Stringa As String
ListV1.ListItems.Clear
ListV1.Sorted = False
Picture1.Font = ListV1.Font.Size
Picture1.FontBold = ListV1.Font.Bold
Picture1.FontItalic = ListV1.Font.Italic
Picture1.FontName = 
ListV1.Font.Name
For Each prog In Progetti
    Stringa = prog.ID_Commessa
    Spazi = (1650 - Picture1.TextWidth(Stringa)) \ Picture1.TextWidth(" ")
    If Spazi < 0 Then Spazi = 0
    Stringa = Stringa & Space(Spazi) & "- " & prog.ID_Pannello
    Spazi = (2570 - Picture1.TextWidth(Stringa)) \ Picture1.TextWidth(" ")
    If Spazi < 0 Then Spazi = 0
    Stringa = Stringa & Space(Spazi) & "- " & prog.Cliente
    Spazi = (4310 - Picture1.TextWidth(Stringa)) \ Picture1.TextWidth(" ")
    If Spazi < 0 Then Spazi = 0
    Stringa = Stringa & Space(Spazi) & "- "
    ListV1.ListItems.Add , , Stringa & " [Copia LOCALE]", 1, 1
Next
prog e' una variabile oggetto?da dove e' saltato fuori
Progetti?ID_Commessa,ID_Pannello e Cliente cosa sono? :-)
Ciao


 per ovviare a questo problema?
Anno è un campo numerico o testo?
Nella sezione Where devi aggiungere:
Se numerico: "... And Anno=" & tuo_anno_numerico
Se testo: "... And Anno='" & tuo_anno_testo & "'"

 Progetti?ID_Commessa,ID_Pannello e Cliente cosa sono? :-)
Ovviamente il codice è stato preso da un mio form, senza lavorarci troppo.
Ti basti sapere che prog.ID_Commessa, prog.ID_Pannello e prog.Cliente sono
proprietà della classe, che restituiscono una stringa.
Il punto chiave del mio codice è qui:
Calcolo il numero di spazi da mettere a fine stringa per avere una lunghezza
fissa come segue:
Spazi = (2570 - Picture1.TextWidth(Stringa)) \ Picture1.TextWidth(" ")
ossia considerando dove voglio che termini la stringa (twip 2570 dall'inizio
del listview), sottraendo i twip già occupati dal testo esistente
(Picture1.TextWidth(Stringa)), e dividendo per i twip occupati da uno spazio
con quel font (Picture1.TextWidth(" ")).
Dopodichè, concateno la stringa precedente, gli spazi calcolati, e la
stringa successiva:
Stringa = Stringa & Space(Spazi) & "- " & prog.ID_Pannello
Nel tuo caso, anzichè utilizzare degli spazi, devi posizionare la lettera
successiva considerando i twip occupati da quella precedente, per cui lo
strumento principale che devi utilizzare in modo furbo è Picture1.TextWidth.
Ciao
Alberto

Adesso e' tutto molto + chiaro :-)
Grazie per la pazienza



--------------------------------
Inviato via 
http://usenet.libero.it