Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
cần giúp về code xóa record
#1
Các bác diễn đàn giúp tôi với, tôi có tạo 1 code dùng để xóa những record không có
Trong table 1 có danh sách các sô phiếu cần xóa.
Trong table 2 là những record mình cần xóa, với điều kiện là số phiếu table 1 = số phiếu table 2

CODE của mình :
Dim I As Byte
Dim SQL As String
Dim TB1, TB2 As DAO.Recordset

SQL = "SELECT [T06 - NHAT KY BH KHACH HANG].SOPHIEU " & _
"FROM [T06 - NHAT KY BH KHACH HANG] LEFT JOIN [T07 - NHAT KY BH MODEL] ON [T06 - NHAT KY BH KHACH HANG].SOPHIEU = [T07 - NHAT KY BH MODEL].SOPHIEU " & _
"WHERE ((([T07 - NHAT KY BH MODEL].SOPHIEU) Is Null)) " & _
"GROUP BY [T06 - NHAT KY BH KHACH HANG].SOPHIEU;"
Set TB1 = CurrentDb.OpenRecordset(SQL)
Set TB2 = CurrentDb.OpenRecordset("T2")

TB1.MoveFirst
For I = 0 To TB1.RecordCount - 1
TB2.Index = "PrimaryKey"
TB2.Seek "=", TB1!SOPHIEU
TB2.Delete
TB1.MoveNext
Next I

TB1.Close
TB2.Close
Set TB1 = Nothing
Set TB2 = Nothing
End Sub

mình bị vứng mắc chõ này :
Khi cái table 2 là table của database hiện hành thì code trên OK, những table 2 của tôi lại là table được link từ 1 database khác.
Khi chạy code trên nó báo lỗi ở dòng TB2.Index = "PrimaryKey", tôi bỏ dòng này luôn thì vẫn báo lỗi, có báo nào chỉ giáo giúp tôi với

Cảm ơn nhiều

Chữ ký của uyvu Xin chào, mình là uyvu, Tham gia http://thuthuataccess.com/forum từ ngày 05-08 -11.
Reply
Những người đã cảm ơn
#2
Mình thấy vấn đề của bạn đâu cần phải làm cho phức tạp vạy nhỉ hjhjhhj.
Chỉ cần thiết kế 1 query Delet thiết kế quan hệ chỉ cho hiện những số phiếu có trương Tables 1 thôi và chạy thì ok chứ có gì đâu mà . ( chưa thử nên ko biết đúng ko) hjhjhhj
Chữ ký của muaphonui_2010 "Cần cù bù thông minh"
Reply
Những người đã cảm ơn
#3
* Nếu bạn giữ code như của bạn mình bày 1 cách như thế này nhé :
- Table 2 là table bạn link từ databse khác, bạn tạo thêm 1 table (table 3 chẳng hạn ) có cấu trúc y chang như table 2, ở trước đoạn code của bạn thực hiện câu lệnh :
dim msql
docmd.RunSql "delete * from table3"
docmd.runSql "INsert into table3 select * from table2"
rùi bạn lấy table3 mà xài code của mình vô tư nhé ^^!
* Mà bạn xóa những record không có là sao nhỉ, không hỉu cho lắm, không phải sử dụng câu lệnh delete hoặc insert sang table khác nếu mún giữ lại "sơ cua" là đc sao ^^!
- Góp ý thế thui ^^!
Chữ ký của hoanglonglangtu Chiều tắt nắng trên con đường quen thuộc
Mưa rơi buồn qua ngõ vắng không em
Từng hạt ngọc rơi đùa qua kẽ lá
Những giọt tràn đầy ngõ ngách tâm tư
Em có biết chiều nay anh vẫn nhớ
Ở nơi nào em có nhớ chăng anh

Trên đời có quá nhiều chữ nếu,đáng tiếc là đều đã qua,việc đã xảy ra,hối hận cũng vô dụng
ღღღღღTài sản của hoanglonglangtu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
(23-03-12, 05:06 PM)hoanglonglangtu Đã viết: * Nếu bạn giữ code như của bạn mình bày 1 cách như thế này nhé :
- Table 2 là table bạn link từ databse khác, bạn tạo thêm 1 table (table 3 chẳng hạn ) có cấu trúc y chang như table 2, ở trước đoạn code của bạn thực hiện câu lệnh :
dim msql
docmd.RunSql "delete * from table3"
docmd.runSql "INsert into table3 select * from table2"
rùi bạn lấy table3 mà xài code của mình vô tư nhé ^^!
* Mà bạn xóa những record không có là sao nhỉ, không hỉu cho lắm, không phải sử dụng câu lệnh delete hoặc insert sang table khác nếu mún giữ lại "sơ cua" là đc sao ^^!
- Góp ý thế thui ^^!

ví dụ:
table 1 là thông tin khách hàng, mình có số phiếu là 1,2,3,4,5,6,7
table 2 là thông tin khách hàng đó gởi bao nhiêu món hàng cho mình, có số phiếu là 1,2,3
Do quá trình nhập liệu tạo dự liệu rỗng, những số phiếu 4,5,6,7 chỉ có thông tin khách hàng, không có chi tiết từng khác hàng đó gởi gì, do vậy mình tạo code để xóa 4,5,6,7 mà



Chữ ký của uyvu Xin chào, mình là uyvu, Tham gia http://thuthuataccess.com/forum từ ngày 05-08 -11.
Reply
Những người đã cảm ơn
#5
Vậy thì bạn xài code đơn giản này nhé, sẽ đơn giản hơn đó bạn :
docmd.runsql "DELETE Table1.MaPhieu FROM Table1 where Table1.MaPhieu not in (select MaPhieu from Table2); "

Còn không thì như ở trên tớ đã nói cũng oki.
Thân.
Chữ ký của hoanglonglangtu Chiều tắt nắng trên con đường quen thuộc
Mưa rơi buồn qua ngõ vắng không em
Từng hạt ngọc rơi đùa qua kẽ lá
Những giọt tràn đầy ngõ ngách tâm tư
Em có biết chiều nay anh vẫn nhớ
Ở nơi nào em có nhớ chăng anh

Trên đời có quá nhiều chữ nếu,đáng tiếc là đều đã qua,việc đã xảy ra,hối hận cũng vô dụng
ღღღღღTài sản của hoanglonglangtu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#6
(23-03-12, 05:53 PM)hoanglonglangtu Đã viết: Vậy thì bạn xài code đơn giản này nhé, sẽ đơn giản hơn đó bạn :
docmd.runsql "DELETE Table1.MaPhieu FROM Table1 where Table1.MaPhieu not in (select MaPhieu from Table2); "

Còn không thì như ở trên tớ đã nói cũng oki.
Thân.

- Cách này của bạn thì câu lệnh đơn giản thật nhưng lên tới mấy ngàn record mỗi lần chạy query này là khoảng 5 đến 10 phút
- Còn cách của mình thì nhanh hơn nhiều, nhưng không biết giải quyết tình huống index sao đây, còn cách của bạn hoanglonglangtu chỉ là cách ăn gian, có bác nào biết cách sửa lại câu lệnh của mình không
Cảm ơn diễn dàn rất nhiều
Chữ ký của uyvu Xin chào, mình là uyvu, Tham gia http://thuthuataccess.com/forum từ ngày 05-08 -11.
Reply
Những người đã cảm ơn
#7
(23-03-12, 11:55 PM)uyvu Đã viết: - Còn cách của mình thì nhanh hơn nhiều, nhưng không biết giải quyết tình huống index sao đây, còn cách của bạn hoanglonglangtu chỉ là cách ăn gian, có bác nào biết cách sửa lại câu lệnh của mình không
Cảm ơn diễn dàn rất nhiều

Mình nghĩ cách của bạn sẽ chậm hơn vì dùng vòng lặp duyệt qua từng mẫu tin.
Cách khắc phục index thì bạn thử vào relationships thiết lập lại mối quan hệ cho trường số phiếu của 2 bảng, lưu ý nhớ chọn vào mục "Cascade Delete Related Records" nhé.
Chữ ký của domfootwear Xin chào Guest, nếu Guest biết thủ thuật nào thì nên chia sẻ cho cộng đồng nhé.
ღღღღღTài sản của domfootwear (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
mình thấy cách của domfootwear hay hơn. bởi vì khi bạn chỉnh sửa relationship trong các bạng nếu quan hệ khóa chính với 1 khóa phụ là 1_n, bạn nhấp chuột vào đường liên kết đó và click vào 2 opton ở dưới cascade update related file và cascade delete related recods. sau đó save mối quan hệ đó là được. sau khi bạn lựa chọn xóa dữ liệu ở bảng chính ( chứa khóa chính) . thì dữ liệu ở bảng có khóa phụ xe tự động bị xóa đi. dù cho bạn xóa trực tiếp trên form hay trên table cũng như vậy cả. chúc bạn vui vẻhappy
Chữ ký của quanghoasla Hãy chia sẻ kinh nghiệm cùng mình trênThuThuatAccess nhé! Chúc vui vẻ rose
My site: My site hoặc My site
ღღღღღTài sản của quanghoasla (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#9
Mình cũng bị lỗi trong phần Index. Khi chọn xóa một mẫu tin thì xuất hiện thông báo: 'PrimaryKey' is not an index in the table.
Mình đã thử chỉnh sửa relationship nhưng vẫn báo lỗi đó. Có bạn nào biết chỉ giáo cho mình với.
Thanks!
Chữ ký của sunflowers_0607 Xin chào, mình là sunflowers_0607, Tham gia http://thuthuataccess.com/forum từ ngày 16-04 -13.
Reply
Những người đã cảm ơn
#10
Bạn chạy link table nên khi khai báo Set db= currentdb ... sẽ báo lỗi ngay.
Bạn khai báo lại địa chỉ tuyệt đối của database mà bạn link xem thế nào nhé !
Chúc bạn thành công !
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


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Chỉnh giúp Form thống kê hoanghai902 2 124 28-10-16, 06:15 PM
Bài mới nhất: hoanghai902
  Xin giúp tạo 1 trường trong table đánh số tự động thay cho autonumber trungminh 7 450 16-09-16, 05:17 PM
Bài mới nhất: maidinhdan
  Giúp đỡ về form với trungminh 9 492 10-09-16, 09:17 PM
Bài mới nhất: trungminh
  Lưu Record honglv157 6 211 15-07-16, 10:56 AM
Bài mới nhất: honglv157
  [Lỗi] Lỗi code event! toancvp 18 1,037 07-07-16, 01:36 AM
Bài mới nhất: maidinhdan

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ơ