maidinhdan > 07-10-16, 07:43 PM
huuduy.duy > 07-10-16, 10:49 PM
(07-10-16, 07:43 PM)maidinhdan Đã viết: Tiên Post Code lên được rồi, Dân chỉ cài Access 2003.
maidinhdan > 08-10-16, 12:08 AM
(05-10-16, 11:11 AM)Minh Tiên Đã viết: Chào Dân !
Tiên đang Import dữ liệu bằng cách dùng SQL ( theo bài viết của pausteigel thì phải) như sau:
1. Tạo link table từ CSQL đích vào CSDL hiện tại - Nguồn.
2. Dùng code CurrentDb.Execute "INSERT INTO tableDich(Field1, Field2,...) SELECT Field1, Field2, ... FROM tableNguon;"
3. Xóa link table.
Tiên đã test thử với table hơn 200.000 record tốc độ chỉ 10 giây (Theo code của Dân mất 26 giây ).
'- ưu điểm của SQL là:
+ Nhanh;
+ Cấu trúc table nguồn và đích ko cần giống nhau ( Chỉ cần các Field có cùng kiểu dữ liệu ).
- Nhượt:
+ Code hơi dài (Code Link, Xóa Link, SQL)
Dân cùng các Pro test lại thử có đúng ko nhé !
Thân./.
(07-10-16, 10:49 PM)huuduy.duy Đã viết:(07-10-16, 07:43 PM)maidinhdan Đã viết: Tiên Post Code lên được rồi, Dân chỉ cài Access 2003.
Đợi Tiên Post lên lâu quá, em gởi file đã chuyển về 2003.
Anh Dân xem thử
https://drive.google.com/file/d/0Bz23-2t...sp=sharing
Function CreateLinkTable(strPathFile As String, strPass As String, strTable As String, strBaseTable As String) As Boolean
    On Error GoTo CreateAttachedError
    
    Dim tdf As TableDef
    Dim strConnect As String
    Dim fRetval As Boolean
    Dim myDB As Database
    ' Kiem tra xem bang co ton tai khong?
    If TableExists(strTable) Then
        'MsgBox "Co table dang Link"
        CurrentDb.TableDefs.Delete strTable
    End If
    Set myDB = CurrentDb
    Set tdf = myDB.CreateTableDef(strTable)
    
    With tdf
        .Connect = "Ms Access;UID=Admin;PWD=" & strPass & ";DATABASE=" & strPathFile
        '.Connect = ";PWD=" & PwdString & ";DATABASE=" & strPath
        .SourceTableName = strBaseTable
    End With
    myDB.TableDefs.Append tdf
    fRetval = True
    
CreateAttachedExit:
    CreateLinkTable = fRetval
    Exit Function
    
CreateAttachedError:
    If Err = 3110 Then
        Resume CreateAttachedExit
    Else
        If Err = 3011 Then
            Resume Next
        End If
    End If
End Function
Function TableExists(tblName As String) As Boolean
    On Error GoTo ErrHandler
    Dim tdf As TableDef
    Set tdf = CurrentDb.TableDefs(tblName)
    Set tdf = Nothing
    TableExists = True
ErrHandler:
End Function 
        CreateLinkTable(strPath, strPass, "tblB1_Link", "tblB1")
        sql = "INSERT INTO tblB1 SELECT * FROM tblB1_Link;"
        CurrentDb.Execute sql
        If TableExists("tblB1_Link") Then CurrentDb.TableDefs.Delete "tblB1_Link" 
hoangnhanst > 24-08-22, 05:38 PM
(08-10-16, 12:08 AM)maidinhdan Đã viết:(05-10-16, 11:11 AM)Minh Tiên Đã viết: Chào Dân !
Tiên đang Import dữ liệu bằng cách dùng SQL ( theo bài viết của pausteigel thì phải) như sau:
1. Tạo link table từ CSQL đích vào CSDL hiện tại - Nguồn.
2. Dùng code CurrentDb.Execute "INSERT INTO tableDich(Field1, Field2,...) SELECT Field1, Field2, ... FROM tableNguon;"
3. Xóa link table.
Tiên đã test thử với table hơn 200.000 record tốc độ chỉ 10 giây (Theo code của Dân mất 26 giây ).
'- ưu điểm của SQL là:
+ Nhanh;
+ Cấu trúc table nguồn và đích ko cần giống nhau ( Chỉ cần các Field có cùng kiểu dữ liệu ).
- Nhượt:
+ Code hơi dài (Code Link, Xóa Link, SQL)
Dân cùng các Pro test lại thử có đúng ko nhé !
Thân./.
(07-10-16, 10:49 PM)huuduy.duy Đã viết:(07-10-16, 07:43 PM)maidinhdan Đã viết: Tiên Post Code lên được rồi, Dân chỉ cài Access 2003.
Đợi Tiên Post lên lâu quá, em gởi file đã chuyển về 2003.
Anh Dân xem thử
https://drive.google.com/file/d/0Bz23-2t...sp=sharing
Qua kiểm chứng thực tế, tôi thấy đoạn Code của Minh tiên là hay nhất.
Xin Post code của Tiên để anh em tham khảo
1. Code Link table
Mã PHP:Function CreateLinkTable(strPathFile As String, strPass As String, strTable As String, strBaseTable As String) As Boolean
On Error GoTo CreateAttachedError
Dim tdf As TableDef
Dim strConnect As String
Dim fRetval As Boolean
Dim myDB As Database
' Kiem tra xem bang co ton tai khong?
If TableExists(strTable) Then
'MsgBox "Co table dang Link"
CurrentDb.TableDefs.Delete strTable
End If
Set myDB = CurrentDb
Set tdf = myDB.CreateTableDef(strTable)
With tdf
.Connect = "Ms Access;UID=Admin;PWD=" & strPass & ";DATABASE=" & strPathFile
'.Connect = ";PWD=" & PwdString & ";DATABASE=" & strPath
.SourceTableName = strBaseTable
End With
myDB.TableDefs.Append tdf
fRetval = True
CreateAttachedExit:
CreateLinkTable = fRetval
Exit Function
CreateAttachedError:
If Err = 3110 Then
Resume CreateAttachedExit
Else
If Err = 3011 Then
Resume Next
End If
End If
End Function
Function TableExists(tblName As String) As Boolean
On Error GoTo ErrHandler
Dim tdf As TableDef
Set tdf = CurrentDb.TableDefs(tblName)
Set tdf = Nothing
TableExists = True
ErrHandler:
End Function
2. Nap du lieu vao Table va Xoa link table
Mã PHP:CreateLinkTable(strPath, strPass, "tblB1_Link", "tblB1")
sql = "INSERT INTO tblB1 SELECT * FROM tblB1_Link;"
CurrentDb.Execute sql
If TableExists("tblB1_Link") Then CurrentDb.TableDefs.Delete "tblB1_Link"
Đoạn code này là rất ngắn và ok rồi.
Gợi ý : Nên viết thêm code So sánh dữ liệu rồi hãy nạp vào Data.
Nhờ ý tưởng này, mình viết cho mình thêm 01 code khác rất hay. Vài hôm nửa Post Demo lên cho anh em tham khảo
Cảm ơn bác Tiên.