Angelus (Normal User)
Newbie
Messaggi: 8
Iscritto: 29/01/2011
|
Salve io vorrei esaminare un record alla volta per verificare se corrisponse ad un criterio di ricerca, il problema è che non mi serve nel suo complesso come cercare un nome e visualizzare il record ma bensì se il primo record corrisponde a X allora nella variabile contatore diverrà +1 se corrisponde a Z il contatoreXmax diverrà 0 e contatore Zmax +1 piccolo es.
X 1
X 2
X 3
Z 1
Z 2
X 1
X 2 < 3 = 3
Z 1 < 2 = 2
in questo caso il contatore Xmax sarà 3 perchè e il numero consecutivo maggiore e Zmax sarà 2
qual'è il comando che mi permette di eseguire questo spostamento nei record?
Grazie in anticipo per i suggerimenti.
|
|
poeo85 (Normal User)
Pro
Messaggi: 104
Iscritto: 27/01/2010
|
allora lavorare con i database è "come" lavorare con un array, cioè quanto ti sei aperto un recordset hai tutti i risultati della tua query dentro la variabile recordset che ti sei dichiarato.
esempio:
Codice sorgente - presumibilmente VB.NET |
dim rs as recorset dim sql as string sql = "select campo1, campo2, campo3 from tabella" Set rs = OpenRecordset(Sql) If Not (rs.EOF And rs.BOF) Then Do While Not rs.EOF list1.additem rs!nomeCampo1 list2.additem rs!nomeCampo2 list3.additem rs!nomeCampo3 rs.movenext loop End If rs.Close Set rs = Nothing
|
come puoi vedere scorri il recorset come fosse un array
è l'equivalente di do while i< ubound(array)
il recorset (è un array di un type non so se conosci) alla fine non è che un array
|
|
poeo85 (Normal User)
Pro
Messaggi: 104
Iscritto: 27/01/2010
|
ok...per cui stai iniziando a lavorare con i dabase
allora
per lavorare con i database
devi prima dichiarare
private Cn As New ADODB.Connection
private Rs As New ADODB.Recordset
' se ti servono privati o pubblici non so che devi fare
poi fare la connessione
Codice sorgente - presumibilmente VB.NET |
Private Sub cmd_Connessione_Click() 'Set db = New ADODB.Connection If Cn.State > 0 Then Call writeList(lst_Operazioni, "Connessione già attiva." & vbCrLf & "Prima Disconnettere.") Else On Error GoTo lbl_Error With Cn .ConnectionString = "Provider = Microsoft.Jet.OleDB.4.0;" & _ "Data source = " & App.Path & "\" & NomeDatabase & ".mdb" 'nella prima riga si specifica il provider 'nella seconda il percorso al db .ConnectionTimeout = 5 'numero dei secondi di timeout .CursorLocation = adUseClient 'tipo di cursore .Mode = adModeShareDenyNone 'nessuna limitazione .Open 'apertura ricordarsi di chiuderla End With With Rs .ActiveConnection = Cn ' imposta a che connessione si riferisce .LockType = adLockOptimistic ' imposta il tipo di lock End With gb_ConnectDB = True End If end sub Exit Sub lbl_Error: 'fai la gestione dell'errore...
|
e poi fare dove serve
Codice sorgente - presumibilmente Delphi |
Sql = "Select max nomecampo from tabella" Set rs = OpenRecordset(Sql) If Not (rs.EOF And rs.BOF) Then 'quando trova qualcosa 'quando devi ciclare il record per esempio in una query select * from trabella fai Do While Not rs.EOF list1.additem rs!nomeCampo1 list2.additem rs!nomeCampo2 list3.additem rs!nomeCampo3 rs.movenext loop Else 'se non trova niente ma facendo il massimo al massimo hai 0 End If rs.Close Set rs = Nothing
|
spero di esserti stato d'aiuto con questi esempi di codice....se hai problemi chiedi
spero anche che non ci siano errori di codice.... Ultima modifica effettuata da poeo85 il 30/03/2011 alle 9:21 |
|
poeo85 (Normal User)
Pro
Messaggi: 104
Iscritto: 27/01/2010
|
tranquillo non prendere paura...
alla fine fai una volta le funzioni poi usi sempre quelle...
poi quando impari a usari i database fidati che è molto meglio...
|
|
poeo85 (Normal User)
Pro
Messaggi: 104
Iscritto: 27/01/2010
|
prova con il metodo move
Codice sorgente - presumibilmente Visual Basic 6 |
dim rs as recondset
rs.move
|
Sposta la posizione del record corrente in un oggetto Recordset.
Sintassi
setdirecord.Move righe, inizio
La sintassi del metodo Move è composta dalle parti descritte di seguito.
Parte Descrizione
setdirecord Variabile di oggetto che rappresenta l'oggetto Recordset la cui posizione di record corrente viene spostata.
righe Valore di tipo Long con segno che specifica di quante righe verrà spostata la posizione. Se il valore di righe è maggiore di 0, la posizione viene spostata in avanti verso la fine del file. Se il valore di righe è minore di 0, la posizione viene spostata indietro verso l'inizio del file.
iniziosegnalibro Opzionale. Valore di tipo Variant di sottotipo String, che identifica un segnalibro. Se si specifica iniziosegnalibro, lo spostamento inizia in relazione a questo segnalibro. Altrimenti, Move inizia dal record corrente.
|
|
poeo85 (Normal User)
Pro
Messaggi: 104
Iscritto: 27/01/2010
|
scusa ma alla fine questo è un problema di query...
se ti tiri fuori solo i massimi?????
es:
select max(x)
from tabella
Ultima modifica effettuata da poeo85 il 29/03/2011 alle 13:31 |
|
Aangelus (Normal User)
Pro
Messaggi: 143
Iscritto: 29/03/2011
|
Scusami se non mi sono espresso in maniera chiara, volevo intendere che
la variabile contatoreXmax non sta nel database, ma dovrebbe essere un frutto
dell'esaminazione di ogni record che vb troverà
nel database sta solo
X
X
X
Z
Z
X
X
Z
ho sempre lavorato con open "nomefile" for append as #1 adesso vorrei passare a lavorare con i database dato che sono più veloci e più affidabili ed il vecchio costrutto era
Esempio:
for a = 0 to 100
get #1, a , nomefile
if nomearrey(a).lettera = X then
contatorez = 0
contatorex = contatorex + 1
if contatore > contatorexmax then
contatorexmax = contatore
end if
end if
e lo stesso procedimento con la lettera Z spero di essermi espresso in maniera chiara
Ultima modifica effettuata da Aangelus il 29/03/2011 alle 15:21 |
|
Aangelus (Normal User)
Pro
Messaggi: 143
Iscritto: 29/03/2011
|
Ciao poeo e a tutta la comunità sto leggendo adesso il tuo post e la prima considerazione che mi viene in mente e che >>forse mi conviene tornare al costrutto OPEN << scherzi a parte ma serve tanto codice per i database
ho studiato le varie connessioni ricerche ma non trovavo quello che mi serviva comunque ti ringrazio di cuore per la cortesia adesso cercherò di adattarlo alle mie esigenze e ti faccio sapere
CIAO!!!!!
|
|
Aangelus (Normal User)
Pro
Messaggi: 143
Iscritto: 29/03/2011
|
Ciao premettendo che sto trovando altri manuali per i database (cosa molto complicata per compatibilità tra vb6 e vista) il punto preciso nel codice precedente postato da poeon che lavora con le singole celle delle tabelle
es:
dati.nome = Angelo
dati.cognome = Rossi
dati.città = Taranto
ecc.
quindi se io voglio lavorare con i singoli dati di ogni tabella per ogni riga come si fa con un array come faccio, anche perchè il problema non è visualizzare il contenuto ma passare i dati ad una variabile per fargli eseguire dei calcoli ?
Ciao a tutti
|
|