Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Xin hỏi cách so sánh để nâng cấp dữ liệu
#1
Tôi có 2 dữ liệu DB1 và DB2 : DB1 là dữ liệu cũ, DB2 là dữ liệu nâng cấp
Trong dữ liệu DB2 có them 01 bảng C và them ở bảng A 2 trường là 4(Fomat dạng số)  và 5 (Format dạng ngày tháng)
 
Câu hỏi :
1-     Muốn so sánh 2 dữ liệu DB1 và DB2 để biết sự khác biệt và lên thông báo.
2-     Nếu có sự khác biệt thì có nút chọn : Nâng cấp (Copy và update những sự khác biệt giữa 2 dữ liệu) Không (Không copy update dữ liệu)
3-     Nếu có RelationShips.. tạo theo DB2 thì nâng cấp theo (Câu hỏi này them thôi)
 
Mong các bạn giúp đỡ, xin cảm ơn

http://www.mediafire.com/file/mpzuqx8u7i...angcap.rar
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#2
Có bác nào giúp tôi với  040 040 040
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
(29-04-18, 10:49 AM)ledangvan Đã viết: Tôi có 2 dữ liệu DB1 và DB2 : DB1 là dữ liệu cũ, DB2 là dữ liệu nâng cấp
Trong dữ liệu DB2 có them 01 bảng C và them ở bảng A 2 trường là 4(Fomat dạng số)  và 5 (Format dạng ngày tháng)
 
Câu hỏi :
1-     Muốn so sánh 2 dữ liệu DB1 và DB2 để biết sự khác biệt và lên thông báo.
2-     Nếu có sự khác biệt thì có nút chọn : Nâng cấp (Copy và update những sự khác biệt giữa 2 dữ liệu) Không (Không copy update dữ liệu)
3-     Nếu có RelationShips.. tạo theo DB2 thì nâng cấp theo (Câu hỏi này them thôi)
 
Mong các bạn giúp đỡ, xin cảm ơn

http://www.mediafire.com/file/mpzuqx8u7i...angcap.rar

Trong Access có 1 table hệ thống (table ẩn) là "MySysObjects" lưu tất cả các thông tin liên quan Table. 
- Code để lấy thông tin table này ở 2 database rồi so sánh tìm sự khác biệt thì ok rồi.

[Hình: 27981993478_d088b83d8d_o.png]

- Code để update lên thì chưa  014
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
#4
(02-05-18, 10:53 PM)ongke0711 Đã viết: ...
- Code để update lên thì chưa  014

update thì đơn giản là copy và paste thui  014  (dùng FSO )
Chữ ký của MTNQ Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn
#5
update thì đơn giản là copy và paste thui  014  (dùng FSO )
[/quote]

He he, cái này anh làm mãi rồi  014 nhưng muốn nó chuyên nghiệp hơn cơ  005 005 005
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#6
Cái dữ liệu bên db1 không đuợc chép đè lên từ db2 phải ko a? Chỉ có thể tạo thêm truờng mới nếu có thay đổi bên db2? Nếu có table mới hoàn toàn thì copy qua db1?
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
#7
(03-05-18, 05:08 PM)ongke0711 Đã viết: Cái dữ liệu bên db1 không đuợc chép đè lên từ db2 phải ko a? Chỉ có thể tạo thêm truờng mới nếu có thay đổi bên db2? Nếu có table mới hoàn toàn thì copy qua db1?

Đúng rồi ongke0711, công việc thủ công của anh là mở 2 dữ liệu DB1 và DB2 ra nhớ nhớ quên quên, vào design.. copy, dán như MTNQ nói nhưng nó thiếu "chuyên nghiệp"  014  . Vì dữ liệu thì nó chứa ở DB1 còn cái DB2 nó chỉ là cái MẪU thôi chứ không có dữ liệu.
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
Code nâng cấp kiểu "chuyên nghiệp" như bên dưới. Ý bạn MTNQ là dùng FileSystemObject (FSO) để code cho việc Copy/Paste chứ không phải là copy/paste = tay  007 anh ledangvan.

- Như em nói là sẽ dùng query để kiểm tra trong table hệ thống MSysObject để kiếm thông tin Tables nào thay đổi.
- Chú ý: Code này chạy trực tiếp trên file database cần nâng cấp (hoặc file database back-end cần nâng cấp). Nếu muốn chạy từ file FE thì phải code khác chút trong phần khai báo db1, db2, các hàm thêm table, field.

Link file demo: http://www.mediafire.com/file/mtinmdrw7j...angcap.rar

[Hình: 40978152445_06b5d4384b_o.png]

[Hình: 40069668100_d9a049ebd6_o.png]


- Code hàm SoSanhCapNhatDB():

Mã PHP:
Option Explicit

Public Function SoSanhCapNhatDB(strDBSource As String)

   Dim dbDes As DAO.Database     'File database can nâng cap
   Dim fldDes As DAO.Field
   Dim dbSource As DAO.Database  '
File database nang cap
   Dim rst1 
As ADODB.Recordset
   Dim rst2 
As ADODB.Recordset
   Dim fldSource 
As DAO.Field
   Dim strSQL 
As String
   Dim blnFound 
As Boolean

   Set rst1 
= New ADODB.Recordset
   Set rst2 
= New ADODB.Recordset

   Set dbDes 
CurrentDb
   Set dbSource 
DBEngine.Workspaces(0).OpenDatabase(strDBSourceTrue)

   'Loop qua tung Table trong database Source - Database nâng câp
   strSQL = "SELECT * FROM msysobjects IN """ & strDBSource & """" & " WHERE type IN (1,6) AND name NOT LIKE ""MSys*"""
   rst1.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockReadOnly

   '
---------------
   'Doan code nay dung kiem tra co su thay doi Field, Table hay không? ->Code còn hoi ruom ra khi phai goi lai o GoTo CapNhat
   Dim blnCapNhat As Boolean
   blnCapNhat = False
   If Not rst1.EOF Then
       rst1.MoveFirst
       Do Until rst1.EOF
           '
Kiem tra xem có Table trong Database Source không?
           strSQL "SELECT * FROM msysobjects WHERE type IN (1,6) AND name = """ rst1!Name """"  'Type 1: Local tables; 6: Linked tables
           rst2.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockReadOnly
           If rst2.EOF Then
               '
Chua co Table nay trong Database cân nâng câp.
               blnCapNhat True
           Else
               
'Có table trong file database nâng câp
               For Each fldSource In dbSource.TableDefs(rst1!Name).Fields
                   '
Kiem tra Field này có tôn tai trong Table o database cân nâng câp hay không?
                   blnFound False
                   For Each fldDes In dbDes
.TableDefs(rst1!Name).Fields
                       If fldSource
.Name fldDes.Name Then
                           blnFound 
True
                       End 
If
                   Next
                   
'Neu khong có Field nay
                   If Not blnFound Then
                       blnCapNhat = True
                   End If
               Next
           End If
           rst2.Close
           rst1.MoveNext
       Loop
   End If

   If blnCapNhat Then
       If msgBoxUni("Có c" & ChrW(7853) & "p nh" & ChrW(7853) & "t h" & ChrW(7879) & " th" & ChrW(7889) & "ng m" & ChrW(7899) & "i." & vbCrLf & _
                    "B" & ChrW(7841) & "n có mu" & ChrW(7889) & "n c" & ChrW(7853) & "p nh" & ChrW(7853) & "t không?" & vbCrLf & _
                    "Ch" & ChrW(7885) & "n [Yes] " & ChrW(273) & ChrW(7875) & " c" & ChrW(7853) & "p nh" & ChrW(7853) & "t, ch" & ChrW(7885) & "n [No] " & ChrW(273) & ChrW(7875) & " h" & ChrW(7911) & "y.", vbYesNo, "Tin vui") = vbYes Then
           GoTo CapNhat
       Else
           Exit Function
       End If
   Else
       msgBoxUni "Chúng tôi " & ChrW(273) & "ang r" & ChrW(7845) & "t b" & ChrW(7853) & "n" & ChrW(8230) & "." & ChrW(273) & "i ch" & ChrW(417) & "i L" & ChrW(7877) & vbCrLf & _
                 "Nên s" & ChrW(7869) & " không có b" & ChrW(7843) & "n c" & ChrW(7853) & "p nh" & ChrW(7853) & "t nào nhé" & ChrW(8230) & "!!!", vbInformation, "Tin bu" & ChrW(7891) & "n"
       Exit Function
   End If

   '
---------------

CapNhat:
   rst1.MoveFirst
   If Not rst1
.EOF Then
       
'rst1.MoveFirst
       Do Until rst1.EOF
           '
Kiem tra xem có Table trong Database Source không?
           strSQL "SELECT * FROM msysobjects WHERE type IN (1,6) AND name = """ rst1!Name """"
           rst2.Open strSQLCurrentProject.ConnectionadOpenDynamicadLockReadOnly
           If rst2
.EOF Then
               
'Them Table này vào database cân nâng câp - dbDes
               DoCmd.TransferDatabase acImport, "Microsoft Access", strDBSource, acTable, rst1!Name, rst1!Name, False
           Else
               '
Có table trong file database nâng câp
               For Each fldSource In dbSource
.TableDefs(rst1!Name).Fields
                   
'Kiem tra Field này có tôn tai trong Table o database cân nâng câp hay không?
                   blnFound = False
                   For Each fldDes In dbDes.TableDefs(rst1!Name).Fields
                       If fldSource.Name = fldDes.Name Then
                           blnFound = True
                       End If
                   Next
                   '
Neu khong có Field nay -> Thêm vào Table bên database cân nâng câp.
                   If Not blnFound Then
                       AddFieldToTable rst1
!NamefldSource.NamefldSource.Type
                   End 
If
               Next

           End 
If
           rst2.Close
           rst1
.MoveNext
       Loop
       rst1
.Close
   End 
If


   Set rst2 Nothing
   Set rst1 
Nothing
   Set fldDes 
Nothing
   Set fldSource 
Nothing
   Set dbDes 
Nothing
   Set dbSource 
Nothing

End 
Function

Public 
Sub AddFieldToTable(strTable As StringstrField As StringnFieldType As Integer)

   Dim db As DAO.Database
   Dim tdf 
As DAO.TableDef
   Dim fld 
As DAO.Field

   On Error 
GoTo ErrorHandler

   Set db 
CurrentDb
   Set tdf 
db.TableDefs(strTable)
   Set fld tdf.CreateField(strFieldnFieldType)
   tdf.Fields.Append fld

   Set tdf 
Nothing
   Set db 
Nothing

   Exit Sub

ErrorHandler
:
       MsgBox "An error has occurred. Number: " Err.Number ", description: " Err.Description
       Exit Sub

End Sub 

- Gọi hàm cập nhật Table:

Mã PHP:
Private Sub cmdCapNhat_Click()
 
   Dim S2 As String
   S2 
CurrentProject.Path "\db2.mdb"
   SoSanhCapNhatDB S2
End Sub 
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 ledangvan , maidinhdan
#9
(04-05-18, 10:30 AM)ongke0711 Đã viết: Code nâng cấp kiểu "chuyên nghiệp" như bên dưới. Ý bạn MTNQ là dùng FileSystemObject (FSO) để code cho việc Copy/Paste chứ không phải là copy/paste = tay  007 anh ledangvan.

- Như em nói là sẽ dùng query để kiểm tra trong table hệ thống MSysObject để kiếm thông tin Tables nào thay đổi.
- Chú ý: Code này chạy trực tiếp trên file database cần nâng cấp (hoặc file database back-end cần nâng cấp). Nếu muốn chạy từ file FE thì phải code khác chút trong phần khai báo db1, db2, các hàm thêm table, field.

Link file demo: http://www.mediafire.com/file/mtinmdrw7j...angcap.rar

[Hình: 40978152445_06b5d4384b_o.png]

[Hình: 40069668100_d9a049ebd6_o.png]


- Code hàm SoSanhCapNhatDB():

Mã PHP:
Option Explicit

Public Function SoSanhCapNhatDB(strDBSource As String)

   Dim dbDes As DAO.Database     'File database can nâng cap
   Dim fldDes As DAO.Field
   Dim dbSource As DAO.Database  '
File database nang cap
   Dim rst1 
As ADODB.Recordset
   Dim rst2 
As ADODB.Recordset
   Dim fldSource 
As DAO.Field
   Dim strSQL 
As String
   Dim blnFound 
As Boolean

   Set rst1 
= New ADODB.Recordset
   Set rst2 
= New ADODB.Recordset

   Set dbDes 
CurrentDb
   Set dbSource 
DBEngine.Workspaces(0).OpenDatabase(strDBSourceTrue)

   'Loop qua tung Table trong database Source - Database nâng câp
   strSQL = "SELECT * FROM msysobjects IN """ & strDBSource & """" & " WHERE type IN (1,6) AND name NOT LIKE ""MSys*"""
   rst1.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockReadOnly

   '
---------------
   'Doan code nay dung kiem tra co su thay doi Field, Table hay không? ->Code còn hoi ruom ra khi phai goi lai o GoTo CapNhat
   Dim blnCapNhat As Boolean
   blnCapNhat = False
   If Not rst1.EOF Then
       rst1.MoveFirst
       Do Until rst1.EOF
           '
Kiem tra xem có Table trong Database Source không?
           strSQL "SELECT * FROM msysobjects WHERE type IN (1,6) AND name = """ rst1!Name """"  'Type 1: Local tables; 6: Linked tables
           rst2.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockReadOnly
           If rst2.EOF Then
               '
Chua co Table nay trong Database cân nâng câp.
               blnCapNhat True
           Else
               
'Có table trong file database nâng câp
               For Each fldSource In dbSource.TableDefs(rst1!Name).Fields
                   '
Kiem tra Field này có tôn tai trong Table o database cân nâng câp hay không?
                   blnFound False
                   For Each fldDes In dbDes
.TableDefs(rst1!Name).Fields
                       If fldSource
.Name fldDes.Name Then
                           blnFound 
True
                       End 
If
                   Next
                   
'Neu khong có Field nay
                   If Not blnFound Then
                       blnCapNhat = True
                   End If
               Next
           End If
           rst2.Close
           rst1.MoveNext
       Loop
   End If

   If blnCapNhat Then
       If msgBoxUni("Có c" & ChrW(7853) & "p nh" & ChrW(7853) & "t h" & ChrW(7879) & " th" & ChrW(7889) & "ng m" & ChrW(7899) & "i." & vbCrLf & _
                    "B" & ChrW(7841) & "n có mu" & ChrW(7889) & "n c" & ChrW(7853) & "p nh" & ChrW(7853) & "t không?" & vbCrLf & _
                    "Ch" & ChrW(7885) & "n [Yes] " & ChrW(273) & ChrW(7875) & " c" & ChrW(7853) & "p nh" & ChrW(7853) & "t, ch" & ChrW(7885) & "n [No] " & ChrW(273) & ChrW(7875) & " h" & ChrW(7911) & "y.", vbYesNo, "Tin vui") = vbYes Then
           GoTo CapNhat
       Else
           Exit Function
       End If
   Else
       msgBoxUni "Chúng tôi " & ChrW(273) & "ang r" & ChrW(7845) & "t b" & ChrW(7853) & "n" & ChrW(8230) & "." & ChrW(273) & "i ch" & ChrW(417) & "i L" & ChrW(7877) & vbCrLf & _
                 "Nên s" & ChrW(7869) & " không có b" & ChrW(7843) & "n c" & ChrW(7853) & "p nh" & ChrW(7853) & "t nào nhé" & ChrW(8230) & "!!!", vbInformation, "Tin bu" & ChrW(7891) & "n"
       Exit Function
   End If

   '
---------------

CapNhat:
   rst1.MoveFirst
   If Not rst1
.EOF Then
       
'rst1.MoveFirst
       Do Until rst1.EOF
           '
Kiem tra xem có Table trong Database Source không?
           strSQL "SELECT * FROM msysobjects WHERE type IN (1,6) AND name = """ rst1!Name """"
           rst2.Open strSQLCurrentProject.ConnectionadOpenDynamicadLockReadOnly
           If rst2
.EOF Then
               
'Them Table này vào database cân nâng câp - dbDes
               DoCmd.TransferDatabase acImport, "Microsoft Access", strDBSource, acTable, rst1!Name, rst1!Name, False
           Else
               '
Có table trong file database nâng câp
               For Each fldSource In dbSource
.TableDefs(rst1!Name).Fields
                   
'Kiem tra Field này có tôn tai trong Table o database cân nâng câp hay không?
                   blnFound = False
                   For Each fldDes In dbDes.TableDefs(rst1!Name).Fields
                       If fldSource.Name = fldDes.Name Then
                           blnFound = True
                       End If
                   Next
                   '
Neu khong có Field nay -> Thêm vào Table bên database cân nâng câp.
                   If Not blnFound Then
                       AddFieldToTable rst1
!NamefldSource.NamefldSource.Type
                   End 
If
               Next

           End 
If
           rst2.Close
           rst1
.MoveNext
       Loop
       rst1
.Close
   End 
If


   Set rst2 Nothing
   Set rst1 
Nothing
   Set fldDes 
Nothing
   Set fldSource 
Nothing
   Set dbDes 
Nothing
   Set dbSource 
Nothing

End 
Function

Public 
Sub AddFieldToTable(strTable As StringstrField As StringnFieldType As Integer)

   Dim db As DAO.Database
   Dim tdf 
As DAO.TableDef
   Dim fld 
As DAO.Field

   On Error 
GoTo ErrorHandler

   Set db 
CurrentDb
   Set tdf 
db.TableDefs(strTable)
   Set fld tdf.CreateField(strFieldnFieldType)
   tdf.Fields.Append fld

   Set tdf 
Nothing
   Set db 
Nothing

   Exit Sub

ErrorHandler
:
       MsgBox "An error has occurred. Number: " Err.Number ", description: " Err.Description
       Exit Sub

End Sub 

- Gọi hàm cập nhật Table:

Mã PHP:
Private Sub cmdCapNhat_Click()
   Dim S2 As String
   S2 
CurrentProject.Path "\db2.mdb"
   SoSanhCapNhatDB S2
End Sub 

Quá chuẩn luôn ongke0711 à, nhưng anh muốn là từ một File khác ấn nút so sánh 2 dữ liệu đấy, ĐƯA RA BẢNG SO SÁNH, rồi mới update. Nhưng cũng rất cảm ơn ongke0711 vì đã giải quyết rất lớn phần câu hỏi của anh.  034 034 034
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
(04-05-18, 11:56 AM)ledangvan Đã viết: Quá chuẩn luôn ongke0711 à, nhưng anh muốn là từ một File khác ấn nút so sánh 2 dữ liệu đấy, ĐƯA RA BẢNG SO SÁNH, rồi mới update. Nhưng cũng rất cảm ơn ongke0711 vì đã giải quyết rất lớn phần câu hỏi của anh.  034 034 034

Trường hợp này anh chỉ cần đổi chút khai báo trong hàm là được rồi (có thể chạy từ file 'khác', file db3).
- Khai báo file db1 như file db2.
- Sửa câu lệnh SQL.

Mã PHP:
Public Function SoSanhCapNhatDB(strDBDes As StringstrDBSource As String)

   Dim dbDes As DAO.Database     'File database can nâng cap
   Dim fldDes As DAO.Field
   Dim dbSource As DAO.Database  '
File database nang cap
   Dim rst1 
As ADODB.Recordset
   Dim rst2 
As ADODB.Recordset
   Dim fldSource 
As DAO.Field
   Dim strSQL 
As String
   Dim blnFound 
As Boolean

   Set rst1 
= New ADODB.Recordset
   Set rst2 
= New ADODB.Recordset

   
'Set dbDes = CurrentDb
   Set dbDes = DBEngine.Workspaces(0).OpenDatabase(strDBDes, True)
   Set dbSource = DBEngine.Workspaces(0).OpenDatabase(strDBSource, True)

   '
Loop qua tung Table trong database Source Database nâng câp
   strSQL 
"SELECT * FROM msysobjects IN """ strDBSource """" " WHERE type IN (1,6) AND name NOT LIKE ""MSys*"""
   rst1.Open strSQLCurrentProject.ConnectionadOpenDynamicadLockReadOnly

   
'---------------
   '
Doan code nay dung kiem tra co su thay doi FieldTable hay không? ->Code còn hoi ruom ra khi phai goi lai o GoTo CapNhat
   Dim blnCapNhat 
As Boolean
   blnCapNhat 
False
   If Not rst1
.EOF Then
       rst1
.MoveFirst
       Do Until rst1
.EOF
           
'Kiem tra xem có Table trong Database Source không?
           strSQL = "SELECT * FROM msysobjects IN """ & strDBDes & """" & " WHERE type IN (1,6) AND name = """ & rst1!Name & """"  '
Type 1Local tables6Linked tables
           rst2
.Open strSQLCurrentProject.ConnectionadOpenDynamicadLockReadOnly
           If rst2
.EOF Then
               
'Chua co Table nay trong Database cân nâng câp.
               blnCapNhat = True
           Else
               '
Có table trong file database nâng câp
               For Each fldSource In dbSource
.TableDefs(rst1!Name).Fields
                   
'Kiem tra Field này có tôn tai trong Table o database cân nâng câp hay không?
                   blnFound = False
                   For Each fldDes In dbDes.TableDefs(rst1!Name).Fields
                       If fldSource.Name = fldDes.Name Then
                           blnFound = True
                       End If
                   Next
                   '
Neu khong có Field nay
                   If Not blnFound Then
                       blnCapNhat 
True
                   End 
If
               Next
           End 
If
           rst2.Close
           rst1
.MoveNext
       Loop
   End 
If

   If blnCapNhat Then
       If msgBoxUni
("Có c" ChrW(7853) & "p nh" ChrW(7853) & "t h" ChrW(7879) & " th" ChrW(7889) & "ng m" ChrW(7899) & "i." vbCrLf _
                    
"B" ChrW(7841) & "n có mu" ChrW(7889) & "n c" ChrW(7853) & "p nh" ChrW(7853) & "t không?" vbCrLf _
                    
"Ch" ChrW(7885) & "n [Yes] " ChrW(273) & ChrW(7875) & " c" ChrW(7853) & "p nh" ChrW(7853) & "t, ch" ChrW(7885) & "n [No] " ChrW(273) & ChrW(7875) & " h" ChrW(7911) & "y."vbYesNo"Tin vui") = vbYes Then
           GoTo CapNhat
       Else
           Exit 
Function
       End If
   Else
       msgBoxUni 
"Chúng tôi " ChrW(273) & "ang r" ChrW(7845) & "t b" ChrW(7853) & "n" ChrW(8230) & "." ChrW(273) & "i ch" ChrW(417) & "i L" ChrW(7877) & vbCrLf _
                 
"Nên s" ChrW(7869) & " không có b" ChrW(7843) & "n c" ChrW(7853) & "p nh" ChrW(7853) & "t nào nhé" ChrW(8230) & "!!!"vbInformation"Tin bu" ChrW(7891) & "n"
       Exit Function
   End If

   '---------------

CapNhat:
   rst1.MoveFirst
   If Not rst1.EOF Then
       '
rst1.MoveFirst
       Do Until rst1
.EOF
           
'Kiem tra xem có Table trong Database Source không?
           strSQL = "SELECT * FROM msysobjects IN """ & strDBDes & """" & " WHERE type IN (1,6) AND name = """ & rst1!Name & """"
           rst2.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockReadOnly
           If rst2.EOF Then
               '
Them Table này vào database cân nâng câp dbDes
               CurrentDb
.Execute "SELECT * INTO " rst1!Name " IN """ strDBDes """" " FROM " rst1!Name " IN """ strDBSource """"dbFailOnError
           Else
               
'Có table trong file database nâng câp
               For Each fldSource In dbSource.TableDefs(rst1!Name).Fields
                   '
Kiem tra Field này có tôn tai trong Table o database cân nâng câp hay không?
                   blnFound False
                   For Each fldDes In dbDes
.TableDefs(rst1!Name).Fields
                       If fldSource
.Name fldDes.Name Then
                           blnFound 
True
                       End 
If
                   Next
                   
'Neu khong có Field nay -> Thêm vào Table bên database cân nâng câp.
                   If Not blnFound Then
                       AddFieldToTable dbDes, rst1!Name, fldSource.Name, fldSource.Type
                   End If
               Next

           End If
           rst2.Close
           rst1.MoveNext
       Loop
       rst1.Close
   End If


   Set rst2 = Nothing
   Set rst1 = Nothing
   Set fldDes = Nothing
   Set fldSource = Nothing
   Set dbDes = Nothing
   Set dbSource = Nothing

End Function 

- Sửa hàm AddFieldToTable():

Mã PHP:
Public Sub AddFieldToTable(db As DAO.DatabasestrTable As StringstrField As StringnFieldType As Integer)

   Dim tdf As DAO.TableDef
   Dim fld 
As DAO.Field

   On Error 
GoTo ErrorHandler

   Set tdf 
db.TableDefs(strTable)
   Set fld tdf.CreateField(strFieldnFieldType)
   tdf.Fields.Append fld

   Set tdf 
Nothing

   Exit Sub

ErrorHandler
:
       MsgBox "An error has occurred. Number: " Err.Number ", description: " Err.Description
       Exit Sub

End Sub 

- Gọi hàm:

Mã PHP:
Private Sub cmdCapNhat_Click()
   Dim S1 As StringS2 As String
   S1 
CurrentProject.Path "\db1.mdb"
   S2 CurrentProject.Path "\db2.mdb"
   SoSanhCapNhatDB S1S2
End Sub 

Chú ý: các file db1, db2 phải đóng chứ không sẽ báo lỗi.
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 maidinhdan


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] lấy dữ liệu từ query sang Text box minhminh25767 3 127 13-11-18, 04:01 PM
Bài mới nhất: ongke0711
Lightbulb [Hỏi] Cách tạo Table/Query từ nhiều Table/Query khác shinichikuto 16 1,339 30-08-18, 03:36 PM
Bài mới nhất: shinichikuto
  [Lỗi] Lỗi mất dự liệu trong table thanhtruong 3 377 08-08-18, 02:52 PM
Bài mới nhất: Xuân Thanh
  [Help] Khóa sổ không cho phép thay đổi số liệu! NguyenDungAnh 4 409 05-08-18, 10:58 PM
Bài mới nhất: NguyenDungAnh
  [Hỏi] Ghép dữ liệu nhiều table vào 1 table vietanh283 1 456 27-06-18, 08:06 PM
Bài mới nhất: ongke0711

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