2016-03-31 27 views
1

Çok küçük bir sorun yaşıyorum, ama yine de sorun ve beni deli ediyor!Yükleyici ile Kullanıcı Formu Yükleme Seçilen Öğenin Bilgileri (Daha hızlı nasıl yapılır)

Ben hast metin kutularının ve bir liste (Ön Uç ve Arka End olarak Access gibi Excel kullanarak, VBA) bir UserForm var. Ne yapar

kullanıcı liste üzerinde yapar seçimine dayalı bir Access veritabanından bilgilerle textboxes doldurmaktır. Kullanıcı, "001" kodu ile giriş seçerse

Yani, söz konusu kaydı fecthes ve UserForm doldurur, Access DB gider. Aşağıda

kodudur:

Private Sub LtaInversiones_Click() 

Dim rcon As Recordset 
Dim sql As String 

sql = "SELECT * FROM INVERSIONES WHERE CODIGO = "_ 
& LtaInversiones.List(LtaInversiones.ListIndex, 0) 

Set rcon = BD.OpenRecordset(sql) 

With rcon 

    CmbCodigo.Text = !Codigo 
    CmbTipo.Text = !TIPO 
    TxtTitulo.Text = !TITULO 
    TxtMonto.Text = !Monto 
    DTFCompra.Value = !FECHACOMPRA 
    DTFVencimiento.Value = !FECHAVENCIMIENTO 
    CmbPeriodicidad.Text = !periodicidad 
    TxtTCupon.Text = !TASACUPON 
    TxtPrecio.Text = !Precio 
    TxtRendimiento.Text = !rendimiento 
    TxtGPRedencion.Text = !GANANCIAPERDIDAREDENCION 
    TxtIAcum.Text = !INTERESESACUMULADOS 
    CmbEmisor.Text = !eMISOR 
    CmbOperador.Text = !OPERADOR 
    TxtNotas.Text = !NOTAS 

     If !FECHAREDENCION <> "" Then 

      DTFRedencion.Value = !FECHAREDENCION 
      ChkCInversion.Value = True 

     Else 

      ChkCInversion.Value = False 


     End If 

    .Close 

End With 

    Set rcon = Nothing 
    CmdEliminar.Visible = True 
    CmdGuardar.Caption = "Modificar" 
    CmbCodigo.Enabled = True 

şey, çalışma, ama biraz yavaşlatır. Olası nedenleri test ettim ve kesinlikle sorgunun, DB'ye gitmeden önce liste dizininin ne olduğuna bakması gerektiğidir. Bunu yapmanın daha iyi bir yolu varsa:

yüzden daha deneyimli programcılar (/ ticaret tarafından Im bir avukat) size sormak istiyorum.

Bana gelen tek şey, tüm kayıtları başlatma sırasında yükleyebilir ve bu şekilde bir şekilde bu verilere erişebilir, çünkü bu, DB'ye yapılan ziyareti engelleyeceğinden, performansın iyileştirilip yükseltilmeyeceğinden emin olamayacağından emin olabilirsiniz. önemli olan

Teşekkür

cevap

0

Bunun değiştirmesini Seni durduran: Buna

LtaInversiones.List(LtaInversiones.ListIndex, 0) 

?

LtaInversiones.Value 

Bu

Ben şahsen "!" Önlemek (Liste & Listındex) çift arama önleyecektir notasyon, dolgunun tercih edilmesi .Fields ("ABC") Değer
Orada herhangi bir performans cezası veya avantajı emin değilim.

+0

Denedim, ve hiçbir şey beni cehalet lol'in dışında bırakmıyordu. Ancak, bu hızda bir gelişme kaydetmedi. Bir karşılaştırma olarak, ben bir rasgele sayı kodlanmış ve bu algılanamaz olması için yeterince hızlı (şu anda olduğu gibi, benim kodumda şeyler değiştirmek için yaklaşık 1,5 ila 2 saniye sürer) – rammpeth