Newsgroup: it.comp.appl.access
Titolo: alternativa a dlookup in ciclo for per velocizzarlo

qualcuno di voi sa dirmi se c'� un  modo per avere lo stesso risultato di 
queste 3 istruzioni qui sotto in un ciclo nel quale credo che queste 
istruzioni influiscano negativamente sulle prestazioni del ciclo stesso.
 
            Siglat = DLookup("sigla", "corsi", "id=" & rs!IdCorso)
            Descrizionet = DLookup("descrizione", "corsi", "id=" & 
rs!IdCorso)
            Livellot = DLookup("livello", "corsidettagli", "id=" & rs!ID)
 
 
grazie in anticipo. 
 


Manca l'informazione dove si trova questo codice.
Se le tre righe NON si trovano in un ciclo puoi procedere
circa cos�:
 
Dim db as DAO.Database
Dim rsCorsi as DAO.Recordset, rsDet as DAO.Recordset
Dim strSQL as String
 
Set db = Currentdb
 
strSQL = "SELECT sigla, descrizione" & _
                " FROM corsi" & _
                " WHERE id=" & rs!IdCorso
 
Set rsCorsi = db.OpenRecordset(strSQL, dbOpendynaset)
 
If Not rsCorsi.BOF Then
    Siglat = rsCorsi!sigla
    Descrizionet = rsCorsi!descrizione
End If
 
 
Poi quasi lo stesso da
strSQL =
a
End If
anche per "corsidettagli.
 
Se invece si trovano in un ciclo, devi procedere diversamente.
La technica giusta sempre dipende dei dettagli.
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 

La technica giusta sempre dipende dei dettagli.
 
Si trovano in un ciclo le 3 istruzioni, lo scopo di trovare un codice 
alternativo � quello di velocizzare l'esecuzione in tempi del ciclo for 
all'interno del quale si trovano anche queste 3 istruzioni, mi sai dire come 
devo procedere per velocizzare questi 3 dlookup?
 
 
grazie.
 


No. Il mio commento di sopra volevo dire che si deve vedere tutto
il codice rilevante. Altrimenti non si pu� dire la strada pi� efficace.


Karl
 
 
 
il ciclo for che vorrei velocizzare è il seguente si accettano consigli per 
eventuale ottimizzazione:
 
*** inizio ciclo for ****
 
        For i = 1 To rs.RecordCount
            durata = CDate(rs!OrarioDalle - rs!OrarioAlle)
 
            DurataMinuti = (Hour(durata) * 60) + Minute(durata)
            volte = DurataMinuti / 30
            MargSU = DLookup("marginesuperiore", "interfacciaore", 
"orario=#" & Format(rs!OrarioDalle, "hh.nn") & "#") ' + (DLookup("Altezza", 
"interfacciaore") / 2)
            If rs!Aula = 1 Then
                MargSX = DLookup("marginesinistro", "interfacciagiorni", 
"giorno='" & rs!Giorno & "'")
            Else
                MargSX = DLookup("marginesinistro", "interfacciagiorni", 
"giorno='" & rs!Giorno & "'") + (DLookup("larghezza", "interfacciaaule", 
"giorno='" & rs!Giorno & "' and naule=" & NumeroAule) * (rs!Aula - 1))
            End If
            Larghezza = DLookup("larghezza", "interfacciaaule", "naule=" & 
NumeroAule)
            Altezza = DLookup("Altezza", "interfacciaore") * (volte)
            Set ctlLabel = CreateControl("interfacciatabella", acLabel, , 
"Corso" & i, , MargSX, MargSU, Larghezza, Altezza)
            ctlLabel.Name = rs!IdCorso & "-" & rs!ID
            Insegnanti = PrelevaInsegnanti(rs!IdCorso, rs!ID)
 
 
            Siglat = DLookup("sigla", "corsi", "id=" & rs!IdCorso)
            Descrizionet = DLookup("descrizione", "corsi", "id=" & 
rs!IdCorso)
            Livellot = DLookup("livello", "corsidettagli", "id=" & rs!ID)
 
            ctlLabel.Caption = Format(rs!OrarioDalle, "hh.nn") & " - " & 
Format(rs!OrarioAlle, "hh.nn") & vbNewLine & Siglat & "-" & Descrizionet & " 
(" & Livellot & ")" & vbNewLine & Insegnanti
            EtiZoom = Format(rs!OrarioDalle, "hh.nn") & " - " & 
Format(rs!OrarioAlle, "hh.nn") & "  " & Siglat & "-" & Descrizionet & "  (" 
& Livellot & ")" & " Insegnanti: " & Insegnanti
 
            'memorizzo nel TAG dell'etichetta idcorso e iddettaglio
            ctlLabel.Tag = rs!IdCorso & "-" & rs!ID
            'in base al numero delle aule imposto la dimensione del font
            If NumeroAule = 1 Then
                ctlLabel.FontSize = 8
            ElseIf NumeroAule = 2 Then
                ctlLabel.FontSize = 7
            ElseIf NumeroAule = 3 Then
                ctlLabel.FontSize = 7
            ElseIf NumeroAule = 4 Then
                ctlLabel.FontSize = 6
            End If
            'se il corso è già presente nella tabella corsisceltitemp 
imposto sfondo verde
            If DCount("id", "interfacciacorsiscelti", "idcorso=" & 
rs!IdCorso & " and idcorsodettaglio=" & rs!ID) = 1 Then
                ctlLabel.BackColor = RGB(0, 255, 0)
            Else
                ctlLabel.BackColor = RGB(255, 196, 255)
            End If
            ctlLabel.TextAlign = 2
            ctlLabel.BorderWidth = 2
            ctlLabel.BorderStyle = 1
            ctlLabel.BackStyle = 1
            ctlLabel.HyperlinkAddress = "#"
            ctlLabel.ControlTipText = ctlLabel.Caption
            ctlLabel.OnClick = "=FunzioneScheda(" & Chr(34) & ctlLabel.Name 
& Chr(34) & ")"
            ctlLabel.OnMouseMove = "=FunzioneZoom(" & Chr(34) & EtiZoom & 
Chr(34) & ")"
            rs.MoveNext
        Next i
 
 
*** fine ciclo for *** 
 

 Altezza = DLookup("Altezza", "interfacciaore") * (volte)
 
è senza criterio. Vuol dire che non conviene nel ciclo ma una
sola volta in una variabile che poi usi nel ciclo.
 
3.
Per il resto dei DLookup prova la technica descritta prima
di sostituirli con dei recordset che hanno delle query filtrate
il più possbile sulla base dei dati che si trovano nell'origine del rs.


Access FAQ:  
http://www.donkarl.com/it
 
 
 
Provo ad applicare il tutto sperando di avere capito bene e ti aggiorno sul 
miglioramento delle prestazioni.
Grazie infinite.