Thread View: pl.comp.bazy-danych.msaccess
13 messages
13 total messages
Started by minfo
Wed, 31 May 2017 11:20
Przyspieszenie generowania pliku tekstowego
Author: minfo
Date: Wed, 31 May 2017 11:20
Date: Wed, 31 May 2017 11:20
31 lines
2143 bytes
2143 bytes
Mam pewną zagwostkę:
Wyciągam do rekorsetu Numer Faktury i kwotę z tabeli.
Następnie w pętelce tworzę plik tekstowy.
O ile przy małej ilości rekordów sprawa jest błyskawiczna (wygenerowanie pliku tekstowego) o tyle przy 17 tysiącach rekordów czekam około 4 minut.
Zawsze mogę iść na kawę ale tak z ciekawości w celach doskonalenia, czy zmieniliście by coś w poniższym?
Ta pętelka trwa długo.
Chodziłoby może o inną organizację przekazywania danych do zmiennej sTxtOut.
kod:
With rst
.MoveFirst
Do Until .EOF Or .BOF
sTxtOut = sTxtOut & vbCrLf & _
"K K1 POL" & !NrFaktury & vbCrLf & _
"K K2 POL" & vbCrLf & _
"F FNR " & !NrFaktury & vbCrLf & _
"F WAR " & !WartFaktury & vbCrLf & _
"F WA2 " & !WartFaktury & vbCrLf & _
"F TWA " & !WartFaktury
.MoveNext
Loop
End With
Pozdrawiam
MF
Re: Przyspieszenie generowania pliku tekstowego
Author: minfo
Date: Wed, 31 May 2017 11:26
Date: Wed, 31 May 2017 11:26
15 lines
1638 bytes
1638 bytes
> End With
>
>
> Pozdrawiam
> MF
Samo wrzucenie wartości zmiennej do pliku trwa błyskawicznie:
fragment kodu:
"
Set fs = CreateObject("Scripting.FileSystemObject")
Set txtFile = fs.CreateTextFile(sFile, False)
txtFile.Write (sTxtOut)
"
MF
Re: Przyspieszenie generowania pliku tekstowego
Author: minfo
Date: Wed, 31 May 2017 18:25
Date: Wed, 31 May 2017 18:25
32 lines
2120 bytes
2120 bytes
Podumałem i wymyśliłem.
Generuje plik dla 40 tys rekordów w pare sekund zamiast 30 minut.
kod:
"
Set fs = CreateObject("Scripting.FileSystemObject")
Set txtFile = fs.CreateTextFile(sFile, False)
'txtFile.Write (sTxtOut)
txtFile.WriteLine "H D=."
txtFile.WriteLine "T TR"
With rst
.MoveFirst
Do Until .EOF Or .BOF
txtFile.WriteLine "K K1 POL" & !NrFaktury
txtFile.WriteLine "F K2 POL"
txtFile.WriteLine "F FNR " & !NrFaktury
txtFile.WriteLine "F FWA " & !WartFaktury
txtFile.WriteLine "F FW2 " & !WartFaktury
txtFile.WriteLine "F TWA " & !WartFaktury
.MoveNext
Loop
End With
"
MF
Mimo wszystko chętnie posłuchałbym opinii o tym rozwiązaniu.
Re: Przyspieszenie generowania pliku tekstowego
Author: Zbigniew Bratko
Date: Fri, 02 Jun 2017 09:11
Date: Fri, 02 Jun 2017 09:11
99 lines
3602 bytes
3602 bytes
W dniu 2017-05-31 o 20:25, minfo@onet.pl pisze:
> Podumałem i wymyśliłem.
> Generuje plik dla 40 tys rekordów w pare sekund zamiast 30 minut.
>
> kod:
> "
> Set fs = CreateObject("Scripting.FileSystemObject")
> Set txtFile = fs.CreateTextFile(sFile, False)
> 'txtFile.Write (sTxtOut)
>
> txtFile.WriteLine "H D=."
> txtFile.WriteLine "T TR"
>
> With rst
> .MoveFirst
> Do Until .EOF Or .BOF
>
> txtFile.WriteLine "K K1 POL" & !NrFaktury
> txtFile.WriteLine "F K2 POL"
> txtFile.WriteLine "F FNR " & !NrFaktury
> txtFile.WriteLine "F FWA " & !WartFaktury
> txtFile.WriteLine "F FW2 " & !WartFaktury
> txtFile.WriteLine "F TWA " & !WartFaktury
>
> .MoveNext
> Loop
> End With
>
> "
>
> MF
>
> Mimo wszystko chętnie posłuchałbym opinii o tym rozwiązaniu.
>
U mnie dla 40 000 rekordów wygenerowanie pliku trwa ok. 1 sekundy
Przetestuj poniższe rozwiązanie:
#If VBA7 Then
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
#Else
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
#End If
'__________________________________
Private Sub btnToFile_Click()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim sTmpPath As String
Dim ff As Integer
Dim i As Long
Dim lngStart As Long
Dim strTmp As String
lngStart = timeGetTime
ff = FreeFile
sTmpPath = CurrentProject.Path & "\" & "aaa.txt"
Open sTmpPath For Binary Access Write As #ff
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Tabela1", dbOpenForwardOnly)
With rst
Do Until .EOF
i = i + 1
' numeruj rekordy
strTmp = strTmp & "Nr rekordu: " & i & vbNewLine
strTmp = strTmp & "Jeden: " & !ID & vbNewLine
strTmp = strTmp & "Dwa: " & !F2 & vbNewLine
strTmp = strTmp & "Trzy: " & !F2 & vbNewLine
strTmp = strTmp & "Cztery: " & !F3 & vbNewLine
strTmp = strTmp & "Pięć: " & !F4 & vbNewLine
strTmp = strTmp & "Sześć: " & !F5 & vbNewLine
' zapisz rekord
Put #ff, , strTmp
' wyczyść zmienną
strTmp = ""
.MoveNext
Loop
End With
Close #ff
rst.Close
Set rst = Nothing
Set dbs = Nothing
MsgBox "Czas trwania operacji: " & timeGetTime - lngStart
End Sub
--
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: Przyspieszenie generowania pliku tekstowego
Author: minfo
Date: Fri, 02 Jun 2017 10:07
Date: Fri, 02 Jun 2017 10:07
13 lines
1490 bytes
1490 bytes
> > End Sub > > > > -- > Pozdrowienia > BraZby > www.faq.accdb.pl > www.accdb.pl Dziękuję za odpowiedź! MF
Re: Przyspieszenie generowania pliku tekstowego
Author: minfo
Date: Fri, 02 Jun 2017 12:14
Date: Fri, 02 Jun 2017 12:14
11 lines
1779 bytes
1779 bytes
>W dniu 2017-05-31 o 20:25, mi...@onet.pl pisze: >– pokaż cytowany tekst – >U mnie dla 40 000 rekordów wygenerowanie pliku trwa ok. 1 sekundy > >Przetestuj poniższe rozwiązanie: Jeżeli chodzi o szybkość to zgadza się dla 60 tys. rekordów: Twoja procedurka 2,9 sek moja 6,1 sek. / MF
Re: Przyspieszenie generowania pliku tekstowego
Author: Zbigniew Bratko
Date: Fri, 02 Jun 2017 21:06
Date: Fri, 02 Jun 2017 21:06
21 lines
1739 bytes
1739 bytes
W dniu 2017-06-02 o 14:14, minfo@onet.pl pisze: >> W dniu 2017-05-31 o 20:25, mi...@onet.pl pisze: >> – pokaż cytowany tekst – >> U mnie dla 40 000 rekordów wygenerowanie pliku trwa ok. 1 sekundy >> >> Przetestuj poniższe rozwiązanie: > > Jeżeli chodzi o szybkość to zgadza się dla 60 tys. rekordów: > Twoja procedurka 2,9 sek moja 6,1 sek. ... Optymalizowanie kodu ma swoje minusy. W tym układzie nie ma szansy na spokojne wypicie kawy ;-) W 3 sek. nie da rady wypić kubka kawy. -- Pozdrowienia BraZby www.faq.accdb.pl www.accdb.pl
Re: Przyspieszenie generowania pliku tekstowego
Author: Adam
Date: Mon, 05 Jun 2017 11:22
Date: Mon, 05 Jun 2017 11:22
37 lines
2380 bytes
2380 bytes
W dniu 2017-06-02 o 23:06, Zbigniew Bratko pisze: > (...) > > Optymalizowanie kodu ma swoje minusy. > W tym układzie nie ma szansy na spokojne wypicie kawy ;-) > W 3 sek. nie da rady wypić kubka kawy. > Zawsze wyniki można też zapuszczać na konsolę, podłożyć pasek postępu i dać stado fruwających animacji ;) Szczegóły już mi umknęły, ale przypomniała mi się taka historia: Czasy jeszcze Novella 3.12. Duża firma produkująca oprogramowanie dla firm, wtedy jeszcze też serwisująca oprogramowanie u klientów; także sprzedająca oraz serwisująca sprzęt. Klienci od czasu do czasu kupowali dodatkowe licencje na Novella. Aż zdarzył się jeden klient, który (ówcześnie za naprawdę duże pieniądze) kupił pakiet dodatkowych licencji. Przyszedł serwisant, usiadł przy konsoli NW, zapodał dyskietkę, potwierdził wczytanie licencji. Całość: kilkadziesiąt sekund. Przedstawił fakturę klientowi. Ledwie uszedł z życiem ;) Klient ze swojego punktu widzenia zauważył, że serwisant chce kupę szmalu za minutę roboty... Od tego czasu w celu instalacji licencji serwer był zabierany do serwisu. -- Pozdrawiam. Adam
Re: Przyspieszenie generowania pliku tekstowego
Author: LeszekN
Date: Wed, 07 Jun 2017 05:16
Date: Wed, 07 Jun 2017 05:16
9 lines
2078 bytes
2078 bytes
> Klient ze swojego punktu widzenia zauważył, że serwisant chce kupę > szmalu za minutę roboty... Wiedza kosztuje, a czy klient poradził by sobie sam z wgraniem tej Licencji? znając życie i Novela w 99% nie. > Od tego czasu w celu instalacji licencji serwer był zabierany do serwisu. Trzeba klienta zawsze uprzedzić że to będzie kosztowało i nie robić wariata z zabieraniem serwera. Złe podejście do sprawy. pozdrawiam :) Leszek
Re: Przyspieszenie generowania pliku tekstowego
Author: Adam
Date: Sat, 10 Jun 2017 20:30
Date: Sat, 10 Jun 2017 20:30
27 lines
2326 bytes
2326 bytes
W dniu 2017-06-07 o 07:16, LeszekN pisze: >> Klient ze swojego punktu widzenia zauważył, że serwisant chce kupę >> szmalu za minutę roboty... > Wiedza kosztuje, a czy klient poradził by sobie sam z wgraniem tej Licencji? znając życie i Novela w 99% nie. > W zasadzie powinien sobie poradzić. Wtedy praktycznie każdy serwer był podpięty do monitora z konsolą. >> Od tego czasu w celu instalacji licencji serwer był zabierany do serwisu. > Trzeba klienta zawsze uprzedzić że to będzie kosztowało i nie robić wariata z zabieraniem serwera. Złe podejście do sprawy. > Nie, to nie o to chodzi. Klienci najczęściej nie mieli świadomości kosztów oprogramowania. Przecież to były czasy, gdzie program/grę albo zgrywało się od kolegi, albo jechało na giełdę, aby zdobyć w podwójnej cenie dyskietki. Świadomość klienta była na poziomie: On mi to (np. program do obsługi firmy) wgrał i skonfigurował w ciągu godziny, a ja mam płacić tyyyyle? -- Pozdrawiam. Adam
Re: Przyspieszenie generowania pliku tekstowego
Author: LeszekN
Date: Mon, 12 Jun 2017 11:31
Date: Mon, 12 Jun 2017 11:31
8 lines
2169 bytes
2169 bytes
> On mi to (np. program do obsługi firmy) wgrał i skonfigurował w ciągu > godziny, a ja mam płacić tyyyyle? Trzeba było długo udawać że się coś robiło a nie wgrać i uciekać :D Znam te czasy ;) Czuję się czasem jak bym miał dalej 16 lat, a tu niestety trochę więcej :) pozdrawiam Leszek
Re: Przyspieszenie generowania pliku tekstowego
Author: Jacek
Date: Thu, 15 Jun 2017 07:38
Date: Thu, 15 Jun 2017 07:38
19 lines
1998 bytes
1998 bytes
Dnia Mon, 12 Jun 2017 04:31:43 -0700 (PDT), LeszekN napisał(a): >> On mi to (np. program do obsługi firmy) wgrał i skonfigurował w ciągu >> godziny, a ja mam płacić tyyyyle? > > Trzeba było długo udawać że się coś robiło a nie wgrać i uciekać :D > Znam te czasy ;) Czuję się czasem jak bym miał dalej 16 lat, a tu niestety trochę więcej :) > > pozdrawiam > Leszek 'Znam te czasy' Ja też je znam. Teraz jest jeszcze 'lepiej'. Nie jeździ się do klienta. Dzwoni, proszę podać ID ihasło do pomocy zdalnej (Teamwiever). 3 kliknięcia i działa. Ile za to kasować?:) P.S. Pomojam koszt licencji TV.
Re: Przyspieszenie generowania pliku tekstowego
Author: Adam
Date: Thu, 15 Jun 2017 09:00
Date: Thu, 15 Jun 2017 09:00
35 lines
2521 bytes
2521 bytes
W dniu 2017-06-15 o 09:38, Jacek pisze: > Dnia Mon, 12 Jun 2017 04:31:43 -0700 (PDT), LeszekN napisał(a): > >>> On mi to (np. program do obsługi firmy) wgrał i skonfigurował w ciągu >>> godziny, a ja mam płacić tyyyyle? >> >> Trzeba było długo udawać że się coś robiło a nie wgrać i uciekać :D >> Znam te czasy ;) Czuję się czasem jak bym miał dalej 16 lat, a tu niestety trochę więcej :) >> >> pozdrawiam >> Leszek > > 'Znam te czasy' > Ja też je znam. Teraz jest jeszcze 'lepiej'. > Nie jeździ się do klienta. > Dzwoni, proszę podać ID ihasło do pomocy zdalnej (Teamwiever). > 3 kliknięcia i działa. > Ile za to kasować?:) > > P.S. Pomojam koszt licencji TV. > Moi znajomi (niektórzy to konkurencja, z niektórymi współpracuję) to liczą najczęściej każdą rozpoczętą godzinę serwisową, niektórzy pół godziny serwisowej. Jeśli klient w porządku, to czasem pierdółka gratis - ale klient wie o tym. Mogą jeszcze być klienci ze stałą umową. Zwykle w ramach umowy jest określony miesięczny czas ogółem. -- Pozdrawiam. Adam
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