Oppure

Loading
29/03/11 10:11
Angelus
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.
aaa
29/03/11 11:19
poeo85
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 29/03/11 11:31
aaa
29/03/11 12:59
Aangelus
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 29/03/11 13:21
aaa
30/03/11 7:14
poeo85
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

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
            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.... :om:
Ultima modifica effettuata da poeo85 30/03/11 7:21
aaa
30/03/11 12:12
Aangelus
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 :om:
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!!!!!
aaa
30/03/11 13:03
poeo85
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...
aaa
03/04/11 17:23
Aangelus
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
aaa
04/04/11 7:27
poeo85
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:

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
aaa