Đá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ề: 102)
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 24 2,637 21-09-17, 10:17 PM
Bài mới nhất: maidinhdan
Lightbulb [Hỏi] Ghi lại mọi thay đổi diễn ra trong access toidjtjmtoi 2 150 19-09-17, 11:06 AM
Bài mới nhất: toidjtjmtoi
  [Thủ Thuật] Demo_Compact & Repaire nhiều file Back End maidinhdan 18 2,814 07-07-17, 07:35 PM
Bài mới nhất: ongke0711
  Hướng Dẫn Xin cách xổ list kết quả khi đánh chữ trong form datasheet tien1505 10 372 02-07-17, 01:23 PM
Bài mới nhất: tranthanhan1962
  [Hỏi] Lấy dữ liệu bảng A mà ko trùng dữ liệu bảng B duynamvnn1208 6 378 02-07-17, 09:34 AM
Bài mới nhất: duynamvnn1208

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ơ