🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#137469
Author: minfo
Date: Wed, 31 May 2017 11:20
31 lines
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
#137470
Author: minfo
Date: Wed, 31 May 2017 11:26
15 lines
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
#137471
Author: minfo
Date: Wed, 31 May 2017 18:25
32 lines
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
#137472
Author: Zbigniew Bratko
Date: Fri, 02 Jun 2017 09:11
99 lines
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
#137473
Author: minfo
Date: Fri, 02 Jun 2017 10:07
13 lines
1490 bytes
> 
> End Sub
> 
> 
> 
> -- 
> Pozdrowienia
> BraZby
> www.faq.accdb.pl
> www.accdb.pl

Dziękuję za odpowiedź!
MF
Re: Przyspieszenie generowania pliku tekstowego
#137474
Author: minfo
Date: Fri, 02 Jun 2017 12:14
11 lines
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
#137475
Author: Zbigniew Bratko
Date: Fri, 02 Jun 2017 21:06
21 lines
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
#137476
Author: Adam
Date: Mon, 05 Jun 2017 11:22
37 lines
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
#137477
Author: LeszekN
Date: Wed, 07 Jun 2017 05:16
9 lines
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
#137478
Author: Adam
Date: Sat, 10 Jun 2017 20:30
27 lines
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
#137479
Author: LeszekN
Date: Mon, 12 Jun 2017 11:31
8 lines
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
#137480
Author: Jacek
Date: Thu, 15 Jun 2017 07:38
19 lines
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
#137481
Author: Adam
Date: Thu, 15 Jun 2017 09:00
35 lines
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