Newsgroup: it.comp.lang.visual-basic
Titolo: scorrimento record db sql

Buonasera a tutti,
con ilcodice sotto riesco a leggere i dati da 2 diverse tabelle, ma ora 
vorrei poter trovare i record precedenti e successi a quelo trovato.
vorrei fare il tutto da codice, ma non ho trovato come implementare 
"movenext e moveprevious", come posso fare?.
grazie anticipate per eventuali suggerimenti
saluti
Dim da As SqlClient.SqlDataAdapter, ds As New DataSet(), dr As DataRow
Dim da1 As SqlClient.SqlDataAdapter, ds1 As New DataSet(), dr1 As DataRow
StrSql1 = "SELECT  id, Nome, Cognome, Eta, Importo, Gruppo, compleanno FROM 
soci where nome='mauro'"
da = New SqlClient.SqlDataAdapter(StrSql1, StrConn) : da.Fill(ds, "Soci")
For Each dr In ds.Tables("soci").Rows : Next
da1 = New SqlClient.SqlDataAdapter("SELECT  categoria FROM gruppi where 
id='" & dr(5) & "'", StrConn) : da1.Fill(ds1, "gruppi")
For Each dr1 In ds1.Tables("gruppi").Rows : Next
MsgBox(dr(0) & " " & dr(1) & " " & dr(2) & " " & dr(3) & " " & dr(4) & " " & 
dr(6) & " " & dr(5) & "-" & dr1(0) & vbCrLf)
ds.Dispose() : da.Dispose() 

salve,

stai ragionando in un'ottica di accesso a tabelle in maniera completamente 
ISAM :(
capisco che "quell'accidente" di Navigator che hanno messo in Visual Studio 
purtroppo porta a pensare in questi termini, ma purtroppo, in una base dati, 
normalmente non si ragiona in termini di "precedente" e "successivo".. puoi 
ragiornare in questi termini esclusivamente nel caso di applicazione di un 
ordinamento, quindi, sia l'ordinamento prescelto quello sulla colonna [id], 
dovresti recuperare la riga
SELECT  TOP(1) id, Nome, Cognome, Eta, Importo, Gruppo, compleanno
    FROM soci
    WHERE [Id] > @tua_id_corrente
    ORDER by [Id];
con top 1 ottieni la prima successiva, a prescindere dall'esistenza di gap 
nella sequenza... lo stesso vale per altri tipi di ordinamento e 
chiaramente, anche per posizionamente "precedenti" e non solo "successivi" 
alla riga corrente.. il termine "riga corrente" e' in questo caso un po' 
fuorviante, visto che tu, giustamente, hai recuperato 1 singola riga come 
resultset, completamente avulsa da un contesto di "cursore" (lato client e 
non lato server), ma comunque resta valido il principio di ragionamento..
potresti fare molto peggio, pero'.. fare cioe' quelle che fa solitamente 
Visual Studio.. ti restituisce l'intera "tabella" (e ripeto, questo e' un 
tornare a ragionare in termini ISAM, con enorme appesantimento sia del 
lavoro del server, del traffico sulla rete, sulle necessita' di caching 
locali di ogni singolo client) ed avere fisicamente una specie di 
In-Memory-Database, cioe' il dataset completamente popolato, e scorrerlo a 
piacimento come a te meglio aggrada..
personalmente preferisco la strategia da te scelta, anche se, premetto, mi 
torna il discorso della mancata esistenza tra la semplice riga in un 
contesto di cursore.. infatti questo potrebbe portare l'utente non gia' a 
cercare (con le funzionalita' da te previste nell'applicazione) la riga 
interessante (dove tu probabilmente avrai previsto un dialogo di ricerca per 
nome, ragione sociale, data di nascita o quant'altro), ma semplicemente 
"scorrendo" un cursore client che tu non hai.. in questo caso, 10/15 click 
sul pulsante "next" del tuo applicativo si traducono in 10/15 interrogazioni 
separate, eseguite in un periodo temporale molto breve.. e qui potresti 
avere problemi di "performance" notevoli e forse sarebbe meglio "gradita" la 
"soluzione" adottata da Visual Studio, che ritorna in effetti "tutta la 
tabella" localmente e quindi navigabile in tempo reale..
mi ripeto ancora..
<IMVHO>
il Navigator e' una funzionalita' pesantissima, a prescindere da come sia 
implementata..
e' pesante per il servizio, per il traffico, per il client ma, soprattutto, 
e' "sbagliato" per l'abitudine che crea nell'utente finale :)
vorrei esprimermi cone Fantozzi relativamente alla corazzata Potemkin, ma 
preferisco evitare :)
</IMVHO>
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz
 
http://italy.mvps.org
DbaMgr2k ver 0.21.0 - DbaMgr ver 0.65.0 and further SQL Tools
--------- remove DMO to reply 

    ORDER by [Id];
Questo dovrebbe risolve i miei problemi, penso che utilizzerň questa 
soluzione.
grazie mille
saluti