Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hướng dẫn] Hỏi cách tạo code phục hồi dữ liệu trong table sau khi backup
#11
mình đã tìm được code modun như này:
Mã:
'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
và code để gọi như này:
 
Mã PHP:
Ketnoi1(" Ten table""Đường dẫn file Nguồn"
)
Đã hoạt động nhưng cho mình hỏi thêm:
Nếu có hơn 2 table thì phần "tên table" đó điền thông tin như nào? có cách nào để tự động mà không phải ghi rõ từng tên table không?
Muốn xóa hết dữ liệu hiện có ở table đích trước rồi mới add data từ table nguồn thì thêm lệnh gì?
Chữ ký của doandinhtam doandinhtam,gia nhập Thủ Thuật Access từ 15-12 -16.
Reply
Những người đã cảm ơn
#12
Up. Ai giúp mình với
Chữ ký của doandinhtam doandinhtam,gia nhập Thủ Thuật Access từ 15-12 -16.
Reply
Những người đã cảm ơn
#13
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é.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#14
(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é.

Thực ra mình có viết 1 ứng dụng cho mọi người sử dụng. Mà những người sử dụng lại không rành về tin học nên mình muốn làn thành câc nút để mọi người dễ sử dụng.
BẠn giúp mình theo cách 2 với vì table mình đều đọc lập, ko có quan hệ cha con với nhau
Code như ở trên mình đã cho run thành công nhưng có 2 vấn đề đó thui bạn giúp mình với
Chữ ký của doandinhtam doandinhtam,gia nhập Thủ Thuật Access từ 15-12 -16.
Reply
Những người đã cảm ơn
#15
Front End - Back End trong Acc phục vụ mục đích đa người dùng và quản trị cơ sở dữ liệu tốt hơn (như bảo mật, truy xuất dữ liệu, ...). Toàn bộ người dùng chỉ thực hiện các hành động trên FE nên dữ liệu lưu trữ trên BE sẽ an toàn hơn (đương nhiên phụ thuộc và các code khi can thiệp và dữ liệu từ FE), người dùng chỉ thực hiện các lệnh trên FE (mà các lệnh đó được viết theo một chuẩn nào đó. VD: trước khi xóa thì hỏi có xóa hay không? ....) và toàn quyền quyết định về dữ liệu (được quyền can thiệp).
>>>>> Túm lại, mình đề nghị bạn chuyển sang FE-BE để giải quyết công việc được tốt hơn.
Chữ ký của cpucloi Tôi chỉ biết mỗi một điều là những điều tôi biết được còn quá ít 021


ღღღღღTài sản của cpucloi (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#16
Biết là vậy nhưng trên tinh thần học hỏi mong bạn chỉ giúp mình 2 vấn đề trên
Chữ ký của doandinhtam doandinhtam,gia nhập Thủ Thuật Access từ 15-12 -16.
Reply
Những người đã cảm ơn
#17
Up. Ai giúp mình cái code xoá dữ liệu ở tất cả table trước khi restore dc ko ạ
Chữ ký của doandinhtam doandinhtam,gia nhập Thủ Thuật Access từ 15-12 -16.
Reply
Những người đã cảm ơn
#18
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 StringsSQL 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.NamedbFailOnError
           
           Set rst 
db.OpenRecordset(TenTabledbOpenDynaset)
           Set rstt CurrentDb.OpenRecordset(TenTabledbOpenDynaset)
           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 
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#19
(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 StringsSQL 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.NamedbFailOnError
           
           Set rst 
db.OpenRecordset(TenTabledbOpenDynaset)
           Set rstt CurrentDb.OpenRecordset(TenTabledbOpenDynaset)
           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 

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 ạ?
Chữ ký của doandinhtam doandinhtam,gia nhập Thủ Thuật Access từ 15-12 -16.
Reply
Những người đã cảm ơn
#20
(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 ạ?

Đoạn code trên tôi đã bỏ "Tên table" rồi đó bạn. Nó tự động lấy hết table có trong file .mdb lưu.

Ví dụ:

Ketnoi1 ("C:\Test\BkupData.mdb")
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] chỉ dùm bôi đen text trong form textbox bo bin 5 183 17-11-18, 06:59 PM
Bài mới nhất: bo bin
  [Hỏi] Đảm bảo tính toàn vẹn của dữ liệu mrsiro 11 606 12-10-18, 10:46 AM
Bài mới nhất: ongke0711
  [Hỏi] Lỗi khi không chọn dữ liệu khi Save As 'Invalid procedure call or argument.' doandinhtam 2 221 02-09-18, 09:48 AM
Bài mới nhất: doandinhtam
  [Hỏi] Nên dùng bảng tạm (TempTable) ngay trong file FE hay file .mdb tạm (TempTable.mdb) ongke0711 5 375 29-08-18, 09:18 PM
Bài mới nhất: ongke0711
  Hỏi về bắt lỗi trong accc thanlaem 21 4,419 07-08-18, 11:02 PM
Bài mới nhất: vdttuan

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line