napisał: jalamas postów: 316
umieszczony: 11 lipca 2008 11:17
|
|
Nie wiem czy temat aktualny.
- ADODB, ADOX
- stworzenie tabeli połączonej (linked table) do tabeli MySql
- dołączenie danych do tabel ACC
- usuniecie tabeli połączonej.
- łańcuchy połączeń pomijam, zakladm, że wiesz co i jak
Lecz nie znam całości problemu, nie wiem do czego tabela docelowa służy, być może samo linker table wystarczy.
'----------------------------------------------------------
' STANDARD Module : MySQl_to_acc
'----------------------------------------------------------
Option Explicit
Function MySql2AccTable() As Boolean
' Referencje
'ADODB: Microsoft ActiveX Data Objects 2.X Library
'ADOX: Microsoft ADO Ext. 2.X for DDL and Security
' w zasadzie nalezaloby bez refrencji CreateObject, pozne wiazanie
' sprawdzac tylko wersje Jet w obiekcie Connection
On Error GoTo MojErrHand_Error
'----------------------------------
' ponizsze to pewnie u Ciebie parametry
Const strLinkTblName As String = "tblMySqllnk"
Const strMySqlTable As String = "osoba"
Const strAccTable As String = "tblxxxx"
'----------------------------------
Dim Conn As ADODB.Connection
Dim catDB As ADOX.Catalog
Dim tblLink As ADOX.Table
Dim strExecSql As String
Dim lngIle As Long
'----------------------------
Set Conn = New ADODB.Connection
With Conn
.ConnectionString = MyConnectionStringToMdb
.Open
End With
Set catDB = New ADOX.Catalog
With catDB
Set .ActiveConnection = Conn
On Error Resume Next
' usuniecie linkowanej tabeli jezeli jest
' byc moze jednak w ogole wystarczy miec linkowana tabele
' i nic wiecej lecz nie znam problemu w calosci
.Tables.Delete (strLinkTblName)
If Err.Number > 0 Then Err.Clear
On Error GoTo MojErrHand_Error
End With
Set tblLink = New ADOX.Table
' stworzenie tabeli linkowanej do tabeli MySQL
With tblLink
.Name = strLinkTblName
Set .ParentCatalog = catDB
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = MyConnectionStringToMySql
.Properties("Jet OLEDB:Remote Table Name") = strMySqlTable
End With
With catDB
.Tables.Append tblLink
.Tables.Refresh
End With
' tu wobec podlinkowanej tabeli można zdawać zapytania
' wtedy mamy tylko zapytanie do tabeli ACC
' dolaczenie danych z linkowanej tabeli do docelowej
strExecSql = "INSERT INTO " & strAccTable & " SELECT * FROM " & strLinkTblName
Conn.Execute strExecSql, lngIle
MySql2AccTable = True
MojErrHand_Exit:
On Error Resume Next
Set tblLink = Nothing
' usuwamy tabele linkowana aby nie bylo powiazania kompaktowac czasem mdb
If Not catDB Is Nothing Then
catDB.Tables.Delete (strLinkTblName)
Set catDB = Nothing
End If
If Not Conn Is Nothing Then
With Conn
If .State = adStateOpen Then .Close
End With
Set Conn = Nothing
End If
If MySql2AccTable Then
MsgBox "Dane do tabeli bazy danych ACC przekazano, liczba dodanych rekordów :" & CStr(lngIle)
Else
MsgBox "Eksport danych do bazy zakończył się niepowodzeniem! ", vbExclamation
End If
Exit Function
MojErrHand_Error:
MsgBox "Błąd - " & Err.Number & vbCrLf & "Opis - " & Err.Description & vbCrLf _
& "Procedura - " & "MojErrHand", vbExclamation, _
"VBAProject - MySql2AccTable"
Resume MojErrHand_Exit
End Function |
|
napisał: _Z_ postów: 12
umieszczony: 9 lipca 2008 09:31
|
|
Cześć,
Zadanie polega na przepisaniu danych w bazy w MySQL, do bazy o identycznej strukturze w Accessie. Makro napisane w VBA działające pod Excelem.
Dane źródłowe w MySQL (MySQL ODBC 3.51 Driver) pobieram na przykład do ADODB.Recordset i ładuje do MS Access (Provider=Microsoft.Jet.OLEDB.4.0).
Zaznaczam, że nie mam Accessa na komputerze na którym chcę ten program uruchamiać.
Pozdrawiam
- Marcin |
|
napisał: Rycho postów: 291
umieszczony: 8 lipca 2008 18:53
|
|
hej,
jaki program?
Tabele w jednym pliku czy różnych i może jeszcze różnych typów?
Jeśli access, to praktycznie wszystkie operacje na danych da się zrobić przy pomocy SQL (kwerend). |
|
napisał: _Z_ postów: 12
umieszczony: 8 lipca 2008 10:10
|
|
Witam,
Mam dwie tabele, jedna jest źródłowa i zawiera dane, a druga docelowa jest pusta. Pobieram dane z tabeli źródłowej i wszystko chcę w szybki sposób przepisać do tabeli docelowej. Chciałbym uniknąć żmudnego przepisywania rekord po rekordzie.
rs.Open "select * from tabela", "DSN=baza1", adOpenStatic, adLockOptimistic
' Range("A1").CopyFromRecordset rs
Dim conn As ADODB.Connection
Dim rec As Recordset
rec.<insert from rs>
Oczywiście metoda <insert from rs> nie istnieje a ja szukam jej odpowiednika, najlepiej w VBA.
Pozdrawiam
- Marcin |
|
wstecz 1 dalej wszystkich stron: 1
|