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
Author: PB
Date: Thu, 14 Sep 2017 08:32
Date: Thu, 14 Sep 2017 08:32
69 lines
2706 bytes
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
Author: PB
Date: Thu, 14 Sep 2017 08:35
Date: Thu, 14 Sep 2017 08:35
81 lines
3262 bytes
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
Author: PB
Date: Thu, 14 Sep 2017 08:36
Date: Thu, 14 Sep 2017 08:36
79 lines
3196 bytes
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
Author: minfo
Date: Thu, 14 Sep 2017 19:23
Date: Thu, 14 Sep 2017 19:23
12 lines
1668 bytes
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