Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Thủ Thuật] update nhiều record trong bảng với 1 query
#1
cái này mình mới nghĩ ra, muốn chia sẻ cho mọi người một chút happy

hiện tại mình có một tblDonGia gồm các trường (TenKH; DonGia)
và một qryDonGia gồm các trường (TenKH; DonGia123) trong truy vấn này có tất cả các đơn giá bán của từng khách hàng.
-Và mình muốn cập nhập(update chứ không phải thêm append nha) toàn bộ đơn giá trong qryDonGia vào bảng tblDonGia
Mình tạo 1 module chứa đoạn code và cho chạy nó:

Mã:
Sub AB()
    Dim db As DAO.Database
    Dim rcd As DAO.Recordset
    Dim aoTenKH As String
    Dim aoDonGia As Single
    Set db = CurrentDb
    Set rcd = db.OpenRecordset("qryDonGia")
    Do Until rcd.EOF
        aoTenKH = rcd!TenKH
        aoDonGia = rcd!DonGia123
        db.Execute "UPDATE tblDonGia " _
        & "SET [DonGia] = '" & aoDonGia & "' " _
        & "WHERE TenKH = '" & aoTenKH & "';"
        rcd.MoveNext
    Loop
    db.Close
End Sub
cái này mới nghĩ, và làm thử thành công, mừng quá nên muốn share cho mọi người vì mình tìm trên mạng không thấy. hy vọng là nó hữu ích với mọi người
Lưu ý: bạn nên cẩn thận nếu khối lượng record cần update quá lớn mà máy yếu thì hơi có chút vấn đề ^^!
Chữ ký của ht03 Xin chào, mình là ht03, Tham gia http://thuthuataccess.com/forum từ ngày 08-06 -12.
Reply
Những người đã cảm ơn Noname , Xuân Thanh
#2
Cũng có thể dùng Seek để làm nếu đặt trường TenKH trong tblDonGia là PrimaryKey
Thân
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#3
Mã PHP:
Sub SeekUpdate()
    
Dim rs As Recordset
    Dim qr 
As QueryDef
    Dim rsup 
As Recordset
    Set qr 
CurrentDb.QueryDefs("qryDonGia")
    
Set rs qr.OpenRecordset()
    
Set rsup CurrentDb.OpenRecordset("tblDonGia")
    
rsup.Index "Primarykey" 'Primarykey cua tblDonGia la TenKH
    If rs.RecordCount > 0 Then
    rs.MoveFirst
    Dountil rs.EOF
        rsup.Seek "=", rs!TenKH
        If rsup.NoMatch Then
            rsup.AddNew
            rsup!TenKH = rs!TenKH
            rsup!DonGia = rs!DonGia
            rsup.Update
        Else
            rsup.Edit
            rsup!DonGia = rs!DonGia
            rsup.Update
        End If
        rs.MoveNext
    Loop
    rs.Close: rsup.Close
End Sub 

Update kiểu này thì khi bên qry có khách hàng mới nó sẽ tự động thêm mới tên khách hàng và đơn giá của khách hàng đó. Ngược lại nó chỉ sửa đơn giá của khách hàng đã tồn tại trong table
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn ht03 , Noname
#4
(21-06-12, 12:32 PM)Xuân Thanh Đã viết:
Mã PHP:
Sub SeekUpdate()
    
Dim rs As Recordset
    Dim qr 
As QueryDef
    Dim rsup 
As Recordset
    Set qr 
CurrentDb.QueryDefs("qryDonGia")
    
Set rs qr.OpenRecordset()
    
Set rsup CurrentDb.OpenRecordset("tblDonGia")
    
rsup.Index "Primarykey" 'Primarykey cua tblDonGia la TenKH
    If rs.RecordCount > 0 Then
    rs.MoveFirst
    Dountil rs.EOF
        rsup.Seek "=", rs!TenKH
        If rsup.NoMatch Then
            rsup.AddNew
            rsup!TenKH = rs!TenKH
            rsup!DonGia = rs!DonGia
            rsup.Update
        Else
            rsup.Edit
            rsup!DonGia = rs!DonGia
            rsup.Update
        End If
        rs.MoveNext
    Loop
    rs.Close: rsup.Close
End Sub 

Update kiểu này thì khi bên qry có khách hàng mới nó sẽ tự động thêm mới tên khách hàng và đơn giá của khách hàng đó. Ngược lại nó chỉ sửa đơn giá của khách hàng đã tồn tại trong table
Thân mến

Bài viết của Xuân Thanh rất bổ ích. Cảm ơn nhiều !

Tôi có một vấn đề nhỏ liên quan đến bài này nhờ Xuân Thanh giúp đỡ.
Theo nội dung bài viết. Nếu trong QryDongia ta đặt điều kiện 1 trường nào đó trong Query (Chẳng hạn đặt trường Dongia với điều kiện = forms!form!txtgia) thì chương trình báo lỗi tại dòng:
Set rs = qr.OpenRecordset()
Không biết để khắc phục lỗi này cần khai báo như thế nào ?
Rất mong Xuân Thanh cùng các Ac chỉ giúp. Thanks!
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn Noname
#5
(07-03-13, 05:44 PM)tmtien261 Đã viết: Bài viết của Xuân Thanh rất bổ ích. Cảm ơn nhiều !

Tôi có một vấn đề nhỏ liên quan đến bài này nhờ Xuân Thanh giúp đỡ.
Theo nội dung bài viết. Nếu trong QryDongia ta đặt điều kiện 1 trường nào đó trong Query (Chẳng hạn đặt trường Dongia với điều kiện = forms!form!txtgia) thì chương trình báo lỗi tại dòng:
Set rs = qr.OpenRecordset()
Không biết để khắc phục lỗi này cần khai báo như thế nào ?
Rất mong Xuân Thanh cùng các Ac chỉ giúp. Thanks!

1/ Bài viết trên khi query QryDonGia không có Parameter. Khi đó mới Update được nhiều Record. Làm như bạn thì có sẵn đơn giá rồi thì cần gì Update nữa, cho nó bằng ngay cái giá trị mặc định của bạn trên form luôn
2/ Nếu muốn sử dụng thì thêm mấy câu lệnh sau:
Mã PHP:
....
Dim DK As String
DK 
forms!formXYZ!txtgia
...
Set qr CurrentDb.QueryDefs(qryDonGia)
qr.Parameter("DonGia") = DK
Set rs 
qr.OpenRecordset()
... 

Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Minh Tiên
#6
(08-03-13, 10:39 AM)Xuân Thanh Đã viết:
(07-03-13, 05:44 PM)tmtien261 Đã viết: Bài viết của Xuân Thanh rất bổ ích. Cảm ơn nhiều !

Tôi có một vấn đề nhỏ liên quan đến bài này nhờ Xuân Thanh giúp đỡ.
Theo nội dung bài viết. Nếu trong QryDongia ta đặt điều kiện 1 trường nào đó trong Query (Chẳng hạn đặt trường Dongia với điều kiện = forms!form!txtgia) thì chương trình báo lỗi tại dòng:
Set rs = qr.OpenRecordset()
Không biết để khắc phục lỗi này cần khai báo như thế nào ?
Rất mong Xuân Thanh cùng các Ac chỉ giúp. Thanks!

1/ Bài viết trên khi query QryDonGia không có Parameter. Khi đó mới Update được nhiều Record. Làm như bạn thì có sẵn đơn giá rồi thì cần gì Update nữa, cho nó bằng ngay cái giá trị mặc định của bạn trên form luôn
2/ Nếu muốn sử dụng thì thêm mấy câu lệnh sau:
Mã PHP:
....
Dim DK As String
DK 
forms!formXYZ!txtgia
...
Set qr CurrentDb.QueryDefs(qryDonGia)
qr.Parameter("DonGia") = DK
Set rs 
qr.OpenRecordset()
... 

Thân mến

Cảm ơn Xuân Thanh nhiều !
Thực ra mình chỉ lấy ví dụ là lấy "đơn giá" làm ví dụ thôi !
Hôm qua để Update mình đã dùng cách chuyển từ Query (Có điều kiện) sang table (Bằng Make Table) và Update từ table vào table Ok rồi. Nhưng hơi dài dòng quá !

Mình test theo cách của bạn sẽ đỡ dài dòng ! Thanks
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#7
Xuân Thanh giúp với !
Tôi đã làm theo cách bạn hướng dẫn nhưng khi chạy Update thì báo lỗi:
"Item not found in this colection"

Nếu bỏ điều kiện thì chạy Update OK !

File demo
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#8
(09-03-13, 01:21 PM)tmtien261 Đã viết: Xuân Thanh giúp với !
Tôi đã làm theo cách bạn hướng dẫn nhưng khi chạy Update thì báo lỗi:
"Item not found in this colection"

Nếu bỏ điều kiện thì chạy Update OK !

File demo

1/ Không biết bạn làm như thế nào nên không góp ý được vì file demo không thể hiện
2/ Xem cái trưởng bạn muốn update là kiểu gì mà định nghĩa biến DK cho phù hợp. Nếu là chuỗi thì String, nếu là số thì Double...
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#9
(11-03-13, 02:37 PM)Xuân Thanh Đã viết: 1/ Không biết bạn làm như thế nào nên không góp ý được vì file demo không thể hiện
2/ Xem cái trưởng bạn muốn update là kiểu gì mà định nghĩa biến DK cho phù hợp. Nếu là chuỗi thì String, nếu là số thì Double...
Thân mến

tmtien261 đặt điều kiện: DKien là trường số Long Integer. Và cũng đã đổi sang Number (Khai báo Double), đổi thử sang text (Khai báo string) nhưng vẫn ko chạy được. Không biết lỗi chỗ nào.

Trong DEMO là Private Sub CapnhatXuathangban_Chitiet()

tmtien261 gửi lại file demo. XT giúp nhé !
Cảm ơn nhiều !


File đính kèm
.zip   UpdateTable_TuQryCodieukien.zip (Kích cỡ: 32.32 KB / Tải về: 99)
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#10
(11-03-13, 05:22 PM)tmtien261 Đã viết: tmtien261 đặt điều kiện: DKien là trường số Long Integer. Và cũng đã đổi sang Number (Khai báo Double), đổi thử sang text (Khai báo string) nhưng vẫn ko chạy được. Không biết lỗi chỗ nào.

Trong DEMO là Private Sub CapnhatXuathangban_Chitiet()

tmtien261 gửi lại file demo. XT giúp nhé !
Cảm ơn nhiều !

Trong query của bạn đâu có đặt Parameter? Lỗi là cái chắc
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (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
  [Thủ Thuật] [Shared Code- PhầnII]Chọn ngày tháng bằng click chuột [No Calendar] maidinhdan 13 534 30-11-16, 11:45 AM
Bài mới nhất: ongke0711
  [Thủ Thuật] Demo_Chọn ngày tháng bằng nút (No Calender Tiếng việt) maidinhdan 7 1,398 25-06-16, 12:44 AM
Bài mới nhất: zinzin8x
  Lấy về số seri CPU, ổ cứng MainBoard trong Access Noname 33 12,286 08-06-16, 11:23 PM
Bài mới nhất: maidinhdan
  [Thủ Thuật] Ẩn record trong table theo ngày tháng tvn_hut 6 486 24-04-16, 01:00 AM
Bài mới nhất: tvn_hut
  Hàm đọc số dùng mã Unicode trong Access Noname 28 11,696 23-03-16, 11:45 PM
Bài mới nhất: thiennamlong

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ơ