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.