Newsgroup: it.comp.lang.visual-basic
Titolo: INDICI DI TABELLE ACCESS

Ciao a tutti!!!
In VB non è possibile usare contemporaneamente da codice 2 indici su una
tabella di Access97.
Il fatto è che prima devo ordinarli con un indice e dopo aver trovato per
esempio il codice giusto
devo ordinare i per numero di riga e perciò utilizzare un altro indice.
Ho già provato ad utilizzare il codice
    Set dbs = OpenDatabase("C:\Programmi\IMPISTRA.mdb")
    Set rec4 = dbs.OpenRecordset("articoli")
    rec4.Index = "codice_preve"
    rec4.Seek "=", codice
    If rec4.NoMatch = False Then
        Esci = False
        rec4.Index = "Riga"
        While Not rec4.EOF And Not Esci
            If rec4!cod_preventivo = prevet Then
il fatto è che alla fine scorro tutto l'archivio e per velocità di
salvataggio e modifiche
vorrei posizionarmi subito sui record che hanno lo stesso codice e ordinarli
come ho già detto per numero di riga..
Chi mi sa dire qualcosa è veramente un MITO!!
Ciao a tutti e grazie
IGOR

Ma non ti è più semplice giocare con le Query, ricercando i campi che ti
servono ed ordinandoli per i campi che ti pare ?
    un esempio di sintassi è la seguente:
Dim DB as Database
Dim Rs as Recordset
    set db=opendatabase(Il_Tuo_Database)
    set rs=db.openrecordset("Select * from [La_Tua_Tabella] where
[Il_Tuo_Campo] = " & Valore & " Order by [Il_Primo_Campo_Che_Vuoi],
[Il_Secondo_Campo_Che_Vuoi]")
    per ogni dubbio consulta la guida di VB.
Spero di esserti stato utile,
        ciao Rocco.

 ha

fermo restando che e' giustissimo quello che dice rocco sul possibile uso di
un recordset da query,
# 1 - il codice dao qui sotto fa piu' o meno quello che dici.
ci sono due tabelle, 1-n, la seconda punta al contatore della prima.
al click sul command, le schede della seconda collegate dovrebbero essere
listate in un textbox.
il codice fa schifo, ero agli inizi, ma funzionava. a te migliorarlo.
quello che mi ha fatto ammattire (e si vede benone dai commenti e dal doppio
if eof, senza il quale mi piazzava errori comunque), e' stato gestire il
caso in cui le schede della tabella 2 fossero proprio le ultime della
tabella, per cui si tocca senz'altro l'eof... ci dev'essere senz'altro un
modo migliore, ma al momento non ho ne' tempo ne' voglia di cercarlo. se lo
trovi, plz comunicamelo :)
Private Sub cmdTraccia_Click()
    On Error GoTo errman
    Dim rs As Recordset
    Set rs = MainDb.OpenRecordset("Indice", dbOpenTable)
    rs.Index = "PRINCIPALE_NOME"
    With rs
        .Seek ">=", lblCodPri, "", ""
        If .EOF Or .NoMatch Then
'( in realta', vedo adesso, con ">=" e' difficile che dia problemi...)
            MsgBox "Non trovo tracciato per la scheda «" & lblCodPri & "»"
            Exit Sub
        End If
        txtSpoglio = ""
'        Do While Not .EOF And rs!pripc = Val(lblCodPri)
        Do While !pripc = Val(lblCodPri)
            If .EOF Then Exit Do
            txtSpoglio = txtSpoglio & !IndTipo & " - " & !IndNome & vbCrLf
            .MoveNext
            If .EOF Then Exit Do
            DoEvents
        Loop
    End With
    rs.Close
    Set rs = Nothing
    Exit Sub
errman:
    MsgBox Error
    Resume Next
End Sub
# 2 - come consiglia giustamente rocco, qc di simile, ma con una query sql
che carica un listview con tutti i campi delle schede collegate, generando
anche i relativi headers (mi serve perche' sto modificando in continuazione
la struttura della tabella e cosi' funziona pressoche' sempre, specie con la
precauzione dell'isnull):
Private Sub UpdateLvFL()
    On Error GoTo errman
    lvFL.ListItems.Clear
    Dim rs As Recordset
    Dim i As Integer
    Dim sqlS As String
    sqlS = "select * from fl where fl.codcli = " & Val(txtCodCli) & _
        " order by codcli, nfl, cod"
    Set rs = MainDB.OpenRecordset(sqlS, dbOpenDynaset)
    With rs
        'headers
        lvFL.ColumnHeaders.Clear
        Dim clmX As ColumnHeader
        For i = 0 To .Fields.Count - 1
            Set clmX = lvFL.ColumnHeaders.Add()
            clmX.Text = .Fields(i).Name
        Next
        'items
        If Not (rs.BOF And rs.EOF) Then
            Dim itmX As ListItem
            Do While Not .EOF ' qui ci vanno tutte :)
                Set itmX = lvFL.ListItems.Add
                itmX.Text = .Fields(0)
                For i = 1 To .Fields.Count - 1
                    If Not IsNull(.Fields(i)) Then itmX.SubItems(i) =
.Fields(i)
                Next
                .MoveNext
                ' se ci sono molte schede derivate
                ' --> meglio un doevents qui
            Loop
        End If
    End With
    rs.Close: Set rs = Nothing
    Exit Sub
errman:     MsgBox Error: Exit Sub
End Sub