🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych.msaccess
3 messages
3 total messages Started by Phantom Wed, 22 Feb 2017 15:22
Otwieranie formularza z recordsource - filtrowanie ok 300000 rekordów
#137422
Author: Phantom
Date: Wed, 22 Feb 2017 15:22
13 lines
1919 bytes
Witam
Dotyczy: MSAccess2000-2003

Mam problem z wielokrotnym otwieraniem formularza.
Formularz zasila zapytanie sql.
Wynikiem jest pokazanie w podformularzu ciągłym kilku rekordów spośród ok 300000.
Pierwsze 3-4 otwarcia formularza z wynikami są błyskawiczne. Kolejne powoduje wywołanie klepsydry i komunikat na dolnym pasku "obliczam" i pasek postępu, no i przede wszystkim trwa to w nieskończoność.
Kolejne próby otwarcia dają ten sam skutek.
Zauważyłem, że wystarczy wejść do projektu formularza oraz VB - zapisać projekt oraz formularz..... i wszystko znowu śmiga.. 3-4 razy oczywiście. Potem powtórka z rozrywki.

Proszę o pomoc
Pozdrawiam
Tomek
Re: Otwieranie formularza z recordsource - filtrowanie ok 300000 rekordów
#137423
Author: LeszekN
Date: Thu, 23 Feb 2017 11:14
12 lines
1938 bytes
Zrób to samo tylko na tabeli powiedzmy około 50 000 rekordów, wykonasz to jakieś 24 razy i będziesz miał taki sam wynik, czyli zapchana pamięć.
Jeżeli wykonujesz SQL'a za pomocą VBA trzeba pamiętać o tzw uwolnieniu pamięci.

recordset.close
set recordset = Nothing


sprawdz w "menedżer zadań" wartość pamięci przed i w momencie już zawieszenia 
oczywiście mogę się mylić ;) 

pozdrawiam
Leszek 
Re: Otwieranie formularza z recordsource - filtrowanie ok 300000 rekordów
#137424
Author: Phantom
Date: Thu, 23 Feb 2017 15:22
46 lines
4079 bytes
Nie otwieram recordset
Moja funkcja wygląda tak:
-----------------------------------
Private Function FiltrGl()
On Error Resume Next
Dim wh, sql1, sql2, dd, aa, ss

wh = ""
If NZ(Me.IddZakDec, "") <> "" Then wh = wh & "(Dec.[ZakDec]=" & Me.IddZakDec & ") AND "
If NZ(Me.IddOdz, 0) <> 0 Then wh = wh & "(Dec.[IDOdz]=" & Me.IddOdz & ") AND "
If NZ(Me.IddWydziały, 0) <> 0 Then wh = wh & "(Dec.[IDWydziały]=" & Me.IddWydziały & ") AND "
If NZ(Me.IddPracownicy, 0) <> 0 Then wh = wh & "(Dec.[IDPracownicy]=" & Me.IddPracownicy & ") AND "
If NZ(Me.IddRozdzZaj, 0) <> 0 Then wh = wh & "(Dec.[IDRozdzZaj]=" & Me.IddRozdzZaj & ") AND "
If NZ(Me.IddLata, 0) <> 0 Then wh = wh & "(Dec.[IDLata]=" & Me.IddLata & ") AND "
If Not IsNull(Me.FFNrDec) Then wh = wh & "(NumWysz Like ""*" & Me.FFNrDec & "*"") AND "
 
    If NZ(Me.IddZakDec, "") <> "" Then wh = wh & "(Dec.[ZakDec]=" & Me.IddZakDec & ") AND "
    If Me.RodzTerm = 1 Then
        aa = Fdaty(Me.IddDataZak - 31)
        If Not IsNull(Me.IddDataZak) Then wh = wh & "(Dec.[DataZakDec]=" & aa & ") AND "
    End If
    If Me.RodzTerm = 2 Then
        aa = Fdaty(Me.IddDataZak)
        If Not IsNull(Me.IddDataZak) Then wh = wh & "(Dec.[DataZakDec]=" & aa & ") AND "
    End If
    If Me.RodzTerm = 3 Then
        dd = "[DataZakDec]"
        ss = WarunekZDatami("", Me.IddDataZak, dd)
        If ss <> "" Then wh = wh & "(" & ss & ") AND "
    End If
    
    If wh <> "" Then wh = "(" & Left$(wh, Len(wh) - 5) & ")"
    
    sql2 = "SELECT Dec.IDDec, Dec.NumDec, Dec.NumFak, Dec.NumWysz as Wyr1, Dec.IDLata, Dec.NrDec, Dec.NrPrzedlDec, NumDec AS InfoNrDec, RozdzZaj.NazRozdzZaj, KatRob.NazKatRob, Odz.NazOdz, Wydziały.SkrWydz, Pracownicy.[naz/imie], Dec.DataZakDec as InfoDataZak, Dec.ZakDec as ZakDec, Zob.NazZob, IIf([DataZakDec]<=Date() And [ZakDec]=No,""PRZEKROCZONY TERMIN DECYZJI!"") AS AlTermin, Dec.IDRozdzZaj, ZobWyk.NazwaZobWyk, Dec.ListaLokDec, Dec.IDRozdzZaj" ', Dec.ZakUpomDec, Dec.DZakUpomDec, Dec.ZakMonitDec, Dec.DZakMonitDec"
    sql2 = sql2 & " FROM (Zob INNER JOIN (Odz INNER JOIN (KatRob INNER JOIN ((([Dec] INNER JOIN Pracownicy ON Dec.IDPracownicy = Pracownicy.IDPracownicy) INNER JOIN Wydziały ON Dec.IDWydziały = Wydziały.IDWydziały) INNER JOIN RozdzZaj ON Dec.IDRozdzZaj = RozdzZaj.IDRozdzZaj) ON KatRob.IDKatRob = Dec.IDKatRob) ON Odz.IDOdz = Dec.IDOdz) ON Zob.IDZob = Dec.IDZob) INNER JOIN ZobWyk ON Dec.IDZobWyk = ZobWyk.IDZobWyk"
    sql2 = sql2 & IIf(wh <> "", " WHERE " & wh, "")
    sql2 = sql2 & " ORDER BY Dec.NrDec, Dec.NrPrzedlDec"


 
Me.WybIDDec = Null
Me.WybIDDec.RowSource = sql2
Me.DecTab_pdf.Form.RecordSource = sql2

End Function
-----------------------------------
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads