🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych.msaccess
4 messages
4 total messages Started by PB Thu, 14 Sep 2017 08:32
Kopiowanie danych do tabeli MySQL - optymalizacja recordeset-u
#137524
Author: PB
Date: Thu, 14 Sep 2017 08:32
69 lines
2706 bytes
Witam,
Mam takie pytanie.
Posiadam dwie tabele podłączone do MS Access-a.
Tabele podłączone są przez ODBC - jedna z SQL Server-a "lokalnie" a 
druga do MySQL-a serwer zdalny - hosting.

I teraz tak. Muszę aktualizować dane na MySQL-u co jakiś czas np. raz w 
tygodniu. Tabel z niema identyczne. Przy transferze na MySQL dodaje 4 
pola z lokalnej bazy, ale to nie jest problem.

Moje rozwiązanie działa, tylko niestety nie jest chyba najlepsze - przy 
paczce 100 000 rekordów trwa to bardzo długo, nawet się zawiesza.

Moja funkcja:

--
Function fAktualizujTabele()
Debug.Print "start: " & Now()
     Set conn = CurrentProject.Connection
     Set rst = New ADODB.Recordset
     Set rst2 = New ADODB.Recordset

     rst.Open "SELECT * FROM tbl_SQLServer where id<100000", conn, 
adOpenKeyset, adLockOptimistic
     rst2.Open "tbl_MySQL", conn, adOpenKeyset, adLockOptimistic

     rst.MoveLast
     rst.MoveFirst

     If rst.BOF And rst.EOF Then
         MsgBox "brak danych"
     End If

     Do While Not rst.EOF
             With rst2
               .AddNew
'              Pól jest zdecydowanie więcej, podaję tylko kilka przykład
                 rst2("id") = rst("id")
                 rst2("p_date") = rst("p_date")
                 rst2("p_time") = rst("p_time")
                 rst2("desc") = rst("desc")
		rst2("who") = "Admin"
               .Update
             End With

         rst.MoveNext
     Loop

     Set rst = Nothing
     Set rst2 = Nothing
     conn.Close
     Set conn = Nothing

Debug.Print "end: " & Now()


End Function

----
Założenie:

rst - pobieram dane z tabeli tbl_SQLServer z warunkiem where
następnie idę po kolei po każdy rekordzie i wrzucam do tabeli tbl_MySQL 
wykorzystując rst2.

Czy mogę to zrobić lepiej jak ??

dzięki za pomysły :)
PB
Re: Kopiowanie danych do tabeli MySQL - optymalizacja recordeset-u
#137525
Author: PB
Date: Thu, 14 Sep 2017 08:35
81 lines
3262 bytes
Inaczej mówiąc chciałby uzyskać lustro tabli z SQLServer-a na MySQL z 
dodatkowymi polami.



W dniu 2017-09-14 o 10:32, PB pisze:
> Witam,
> Mam takie pytanie.
> Posiadam dwie tabele podłączone do MS Access-a.
> Tabele podłączone są przez ODBC - jedna z SQL Server-a "lokalnie" a 
> druga do MySQL-a serwer zdalny - hosting.
> 
> I teraz tak. Muszę aktualizować dane na MySQL-u co jakiś czas np. raz w 
> tygodniu. Tabel z niema identyczne. Przy transferze na MySQL dodaje 4 
> pola z lokalnej bazy, ale to nie jest problem.
> 
> Moje rozwiązanie działa, tylko niestety nie jest chyba najlepsze - przy 
> paczce 100 000 rekordów trwa to bardzo długo, nawet się zawiesza.
> 
> Moja funkcja:
> 
> -- 
> Function fAktualizujTabele()
> Debug.Print "start: " & Now()
>      Set conn = CurrentProject.Connection
>      Set rst = New ADODB.Recordset
>      Set rst2 = New ADODB.Recordset
> 
>      rst.Open "SELECT * FROM tbl_SQLServer where id<100000", conn, 
> adOpenKeyset, adLockOptimistic
>      rst2.Open "tbl_MySQL", conn, adOpenKeyset, adLockOptimistic
> 
>      rst.MoveLast
>      rst.MoveFirst
> 
>      If rst.BOF And rst.EOF Then
>          MsgBox "brak danych"
>      End If
> 
>      Do While Not rst.EOF
>              With rst2
>                .AddNew
> '              Pól jest zdecydowanie więcej, podaję tylko kilka przykład
>                  rst2("id") = rst("id")
>                  rst2("p_date") = rst("p_date")
>                  rst2("p_time") = rst("p_time")
>                  rst2("desc") = rst("desc")
>          rst2("who") = "Admin"
>                .Update
>              End With
> 
>          rst.MoveNext
>      Loop
> 
>      Set rst = Nothing
>      Set rst2 = Nothing
>      conn.Close
>      Set conn = Nothing
> 
> Debug.Print "end: " & Now()
> 
> 
> End Function
> 
> ----
> Założenie:
> 
> rst - pobieram dane z tabeli tbl_SQLServer z warunkiem where
> następnie idę po kolei po każdy rekordzie i wrzucam do tabeli tbl_MySQL 
> wykorzystując rst2.
> 
> Czy mogę to zrobić lepiej jak ??
> 
> dzięki za pomysły :)
> PB
> 
> 
> 
> 
> 
> 
Re: Kopiowanie danych do tabeli MySQL - optymalizacja recordeset-u
#137526
Author: PB
Date: Thu, 14 Sep 2017 08:36
79 lines
3196 bytes
Próbowałem z DAO - to samo :(


W dniu 2017-09-14 o 10:32, PB pisze:
> Witam,
> Mam takie pytanie.
> Posiadam dwie tabele podłączone do MS Access-a.
> Tabele podłączone są przez ODBC - jedna z SQL Server-a "lokalnie" a 
> druga do MySQL-a serwer zdalny - hosting.
> 
> I teraz tak. Muszę aktualizować dane na MySQL-u co jakiś czas np. raz w 
> tygodniu. Tabel z niema identyczne. Przy transferze na MySQL dodaje 4 
> pola z lokalnej bazy, ale to nie jest problem.
> 
> Moje rozwiązanie działa, tylko niestety nie jest chyba najlepsze - przy 
> paczce 100 000 rekordów trwa to bardzo długo, nawet się zawiesza.
> 
> Moja funkcja:
> 
> -- 
> Function fAktualizujTabele()
> Debug.Print "start: " & Now()
>      Set conn = CurrentProject.Connection
>      Set rst = New ADODB.Recordset
>      Set rst2 = New ADODB.Recordset
> 
>      rst.Open "SELECT * FROM tbl_SQLServer where id<100000", conn, 
> adOpenKeyset, adLockOptimistic
>      rst2.Open "tbl_MySQL", conn, adOpenKeyset, adLockOptimistic
> 
>      rst.MoveLast
>      rst.MoveFirst
> 
>      If rst.BOF And rst.EOF Then
>          MsgBox "brak danych"
>      End If
> 
>      Do While Not rst.EOF
>              With rst2
>                .AddNew
> '              Pól jest zdecydowanie więcej, podaję tylko kilka przykład
>                  rst2("id") = rst("id")
>                  rst2("p_date") = rst("p_date")
>                  rst2("p_time") = rst("p_time")
>                  rst2("desc") = rst("desc")
>          rst2("who") = "Admin"
>                .Update
>              End With
> 
>          rst.MoveNext
>      Loop
> 
>      Set rst = Nothing
>      Set rst2 = Nothing
>      conn.Close
>      Set conn = Nothing
> 
> Debug.Print "end: " & Now()
> 
> 
> End Function
> 
> ----
> Założenie:
> 
> rst - pobieram dane z tabeli tbl_SQLServer z warunkiem where
> następnie idę po kolei po każdy rekordzie i wrzucam do tabeli tbl_MySQL 
> wykorzystując rst2.
> 
> Czy mogę to zrobić lepiej jak ??
> 
> dzięki za pomysły :)
> PB
> 
> 
> 
> 
> 
> 
Re: Kopiowanie danych do tabeli MySQL - optymalizacja recordeset-u
#137527
Author: minfo
Date: Thu, 14 Sep 2017 19:23
12 lines
1668 bytes
> Czy mogę to zrobić lepiej jak ?? 

Spróbuj czy nie przyspieszy kwerenda dołączająca.

sSQL = "INSERT INTO tbl_MySQL SELECT * FROM tbl_SQLServer where id<100000"
db.Execute sSQL

Musisz jeszcze tylko zadbać o te 4-ry dodatkowe pola.
Nie wiem czy powyższe przyspieszy ale można spróbować.

MF
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