doandinhtam > 28-08-18, 10:14 AM
'Khai bao
Public Ws As DAO.Workspace
Public db As DAO.Database
Public rst As DAO.Recordset
Public rstt As DAO.Recordset
Public Function Ketnoi1(TenTable As String, Duongdanfile As String)
Set Ws = DBEngine.Workspaces(0)
'Mo ket noi Data co Pass
Set db = Ws.OpenDatabase(Duongdanfile)
Set rst = db.OpenRecordset(TenTable, dbOpenDynaset)
Set rstt = CurrentDb.OpenRecordset(TenTable, dbOpenDynaset)
rst.MoveFirst
Do Until rst.EOF
' Cap nhap vao table tam
rstt.AddNew
' Duyet tu cot
For i = 0 To rst.Fields.Count - 1
rstt.Fields(i) = rst.Fields(i)
Next
rstt.Update
rst.MoveNext
Loop
rst.Close
Set db = Nothing
End Function
Ketnoi1(" Ten table", "Đường dẫn file Nguồn")
doandinhtam > 28-08-18, 01:03 PM
ongke0711 > 28-08-18, 01:58 PM
doandinhtam > 28-08-18, 05:43 PM
(28-08-18, 01:58 PM)ongke0711 Đã viết: Tôi nghĩ giải pháp trên của bạn không khả thi đâu. Tại sao bạn không Split Database nhỉ? mọi việc nó sẽ được xử lý bài bản, chuyên nghiệp hơn.
Nói về giải pháp trên của bạn:
- Lúc đầu tôi có đề xuất bạn là Xoá các table rồi Import Table back-up vô nhưng để xuất này có vấn đề tôi không khuyên bạn dùng là vì khi xoá hết Table nó sẽ xoá hết Relationship, sau đó Import table mới vô phải tạo lại Relationship. Chuyện này phức tạp thêm mặc dù có code copy luôn Relationship nhưng phiền phức.
- Cách 2 bạn đang làm là chỉ xoá nội dung Table sau đó copy nội dung Table bên Back-up vô. Cách này cũng gặp vấn đề là đối với nhưng Table có quan hệ Cha-Con thì bạn phải copy theo thứ tự: Cha trước, Con sau nếu làm ngược lại sẽ báo lỗi. Điều này gây khó khi dùng vòng lặp duyệt các table để lấy "Tentable" (For each tbl in db.TableDefs) tự động phục vụ cho code "Ketnoi1" trên của bạn. Nó sẽ không biết được table nào là Cha, Con.
- Còn nếu bạn vẫn muốn backup Local Table thì bạn chịu khó tạo thêm 1 table (tblTableName) dùng để lưu tên tất cả các Table trong ứng dụng của bạn và đặt biệt chú ý sắp xếp thứ tự table nào là Cha thì đứng trước, table con đứng sau. Sau đó dùng vòng lặp duyệt qua table này theo thứ tự để lấy tên table đưa vô đoạn code trên của bạn.
Túm lại giải pháp tốt nhất là tách file để việc Back-up dễ dàng và chuẩn hoá hơn. Khi backup là copy nguyên file BE sang chỗ khác, khi Restore là copy back-up .mdb về đè lên file cũ.
Các bạn nào có giải pháp cho việc back-up/ restore Local table thì hỗ trợ nhé.
cpucloi > 28-08-18, 06:00 PM
doandinhtam > 28-08-18, 06:50 PM
doandinhtam > 28-08-18, 09:53 PM
ongke0711 > 28-08-18, 10:03 PM
Public Function Ketnoi1(DuongDanFile As String)
Dim TenTable As String, sSQL As String
Dim tbl As TableDef
Dim i As Integer
Set Ws = DBEngine.Workspaces(0)
'Mo ket noi Data co Pass'
Set db = Ws.OpenDatabase(DuongDanFile)
For Each tbl In db.TableDefs
If Not (tbl.Name Like "MSys*") Then 'bo qua Table he thong'
TenTable = tbl.Name
Debug.Print TenTable
CurrentDb.Execute "DELETE * FROM " & tbl.Name, dbFailOnError
Set rst = db.OpenRecordset(TenTable, dbOpenDynaset)
Set rstt = CurrentDb.OpenRecordset(TenTable, dbOpenDynaset)
If rst.ReccordCount<> 0 Then
rst.MoveFirst
Do Until rst.EOF
' Cap nhap vao table tam
rstt.AddNew
' Duyet tu cot
For i = 0 To rst.Fields.Count - 1
rstt.Fields(i) = rst.Fields(i)
Next
rstt.Update
rst.MoveNext
Loop
rst.Close
rstt.Close
End If
End If
Next
Set db = Nothing
End Function
doandinhtam > 28-08-18, 10:14 PM
(28-08-18, 10:03 PM)ongke0711 Đã viết: Code sửa đổi theo yêu cầu của bạn.
- Tôi thêm code để vòng lặp bỏ table hệ thống.
- Xoá nội dung Table trước khi Restore để tránh báo lỗi trùng dữ liệu khi lỡ bấm nhiều lần. Giải quyết luôn yêu cầu trên của bạn.
Mã PHP:Public Function Ketnoi1(DuongDanFile As String)
Dim TenTable As String, sSQL As String
Dim tbl As TableDef
Dim i As Integer
Set Ws = DBEngine.Workspaces(0)
'Mo ket noi Data co Pass'
Set db = Ws.OpenDatabase(DuongDanFile)
For Each tbl In db.TableDefs
If Not (tbl.Name Like "MSys*") Then 'bo qua Table he thong'
TenTable = tbl.Name
Debug.Print TenTable
CurrentDb.Execute "DELETE * FROM " & tbl.Name, dbFailOnError
Set rst = db.OpenRecordset(TenTable, dbOpenDynaset)
Set rstt = CurrentDb.OpenRecordset(TenTable, dbOpenDynaset)
rst.MoveFirst
Do Until rst.EOF
' Cap nhap vao table tam
rstt.AddNew
' Duyet tu cot
For i = 0 To rst.Fields.Count - 1
rstt.Fields(i) = rst.Fields(i)
Next
rstt.Update
rst.MoveNext
Loop
rst.Close
rstt.Close
End If
Next
Set db = Nothing
End Function
ongke0711 > 28-08-18, 10:51 PM
(28-08-18, 10:14 PM)doandinhtam Đã viết: Cho mình hỏi là phần code gọi này
Ketnoi1(" Ten table", "Đường dẫn file Nguồn")
Thì phần tên table phải ghi từng tên thì hơi mất công. Có code nào để tự động add tất cả table ko ạ?