Làm thế nào để chặn thông báo lỗi của Query !

glasseggs

New Member
Hội viên mới
Các bạn giúp mình với .Khi mình chạy 1 Query nó hiện thông báo lỗi như hình :

Untitled.jpg


Lỗi này do Query Append phát hiện trùng bản ghi khi append vào bảng khác.
Có cách nào để chặn thông báo lỗi này,và để nó mặc định chon YES hoặc hiện ra 1 Msg box cho chọn Yes / No không ? Nếu chọn Yes thì nó chạy tiếp tục chạy Query ,No thì huỷ bỏ
Thanks mọi người !
 
Sửa lần cuối:
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Bạn ơi cho mình hỏi chút nhé.Cái dòng lệnh tắt thông báo của bạn thì nó tự động chọn Yes hay No thế.
Vì mình giả dụ nhé câu lệnh Query này mình append dữ liệu từ Form Khoá Học vào 1 bảng khác.Trên Form có Subform học viên.Sau đó tại Form này mình lại thêm 1 bản ghi học viên nữa.Khi đó mình chạy Query sẽ xuất hiện thông báo như trên. Nếu mình chọn Yes thì 1 bản ghi được thêm đó sẽ được lưu vào bảng.Nhưng nếu chọn No thì bản ghi đó sẽ không được lưu.
Đó chính là sự khác nhau,nên mình muốn hỏi nó sẽ chon Y hay No hay không cho chạy Q.
Thanks
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Thứ nhất mình thấy bạn ko nên tắt câu thông báo lỗi trên vì nó sẽ cho ban biết được việc append của bạn có thành công hay ko và append được bao nhiêu dòng, và trong quá trình append bị những lỗi gì.
Thứ hai, bạn có thể cho mình biết là bạn muốn làm gì ?
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Mình cám ơn bạn nhé !
Chính xác là mình không muốn tắt thông báo đó.
Vì phần mềm của mình đã gần hoàn thiện,đang bước vào quá trình bẫy lỗi.Mình không muốn hiện thị 1 câu thông báo của Access (vì như thế người dùng bình thường đâu có hiểu mô tê gì đâu ). Mình muốn hiển thị câu thông báo do mình đặt ra và vẫn giữ lại tùy chọn Yes / No của Query có được không ?
Về cơ bản mình đã thử câu lệnh tắt thông báo Query của bạn Dongnamnb ,nó đã đáp ứng được 1 phần yêu cầu của mình là tắt thông báo và tự động chọn Yes .
Tuy nhiên nếu bạn biết cách thay câu thông báo trên bằng msgbox Yes/ No thì giúp mình với.
Thanks rất nhiều
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

bình thường thì mình chặn trong code bằng on error goto.... rồi đưa ra câu thong báo msgbox...
nhưng mình vẫn chưa biết là bạn muốn làm gì?
có thể mình sẽ đưa cho bạn giải pháp khác hay hơn. ym: tuongkhanh80@yahoo.com
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Bạn à !
Đây là thông báo lỗi của Query thế nên On Error Go to khi Click là vô tác dụng.
Cũng không thể bắt lỗi sự kiện On Error trên Form được.
Đơn giản thế này thôi :
Mình muốn tạo 1 command button( Tên là Lưu Khóa Học) ,khi nhấn vào nút đó nó sẽ thực thi 1 Query Append dữ liệu trên Form vào 1 bảng khác (Dữ liệu này được lưu độc lập để làm tài liệu sau này,nên nó không có mối quan hệ với các bảng khác).
Form này có trường Tên khóa học và Subform là Tên học viên học khóa đó.
Và khi mình append xong,mình không muốn dữ liệu trên Form bị xóa đi.
Nên sẽ xảy ra tình huống,1 ai đó sau này lại nhấn Nút Lưu Khóa Học và tất nhiên sẽ xuất hiện thông báo lỗi trên.
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Trên thực tế thì người ta ko làm như vậy, Họ sẽ tạo 1 form để nhập liệu riêng cho table khóa học.
Mình có cảm giác bạn đang làm phức tạp hóa vấn đề
Nếu bạn thật sự vẫn muốn giử cấu trúc đang dùng thì ko nên dùng câu lệnh append mà dùng câu query insert into.... rồi bắt lỗi on error...

strSQL = "INSERT INTO......"
DoCmd.RunSQL (strSQL)
 
Sửa lần cuối:
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Uh, thì mình có 1 Form để nhập khoá học riêng và 1 Form nhập thông tin khách hàng.Nhưng mình muốn khi khoá học đó tổ chức xong thì sẽ lưu khoá học đó lại để làm tư liệu sau này.
Và đương nhiên bảng lưu này sẽ không quan hệ với các bảng khác để đảm bảo dữ liệu không bị thay đổi khi thêm hay xoá từ bảng khác
Còn câu lệnh thì mình không rõ lắm vì mình chưa học lập trình VB.
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Thực ra, bạn phải hiểu muốn chặn thông báo khi chạy Query có 2 dạng:
Dạng 1: Lỗi như bạn miêu tả theo hình chụp là do tính toàn vẹn của dữ liệu. VD bạn đặt khóa chính trong table HOCSINH trong đó có mã MaHS là khóa chính. VD table Hocsinh của bạn đã có mã học sinh là HS002, vây mà bạn lại tiếp tục Append Query để thêm vào những học sinh trong đó cũng có mã là HS002 thì lỗi sẽ xảy ra như hình vẽ
Dạng 2: Thông báo đối với các Action Query (như Delele, Update, Append..)
Bạn nên thêm đoạn code sau
Docmd.set Warning false
docmd.Open Query
Docmd.set Warning true

Chúc bạn thành công!
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Bạn không hiểu ý mình rồi.
Mình không hỏi lý do nó hiện thông báo trên.
Vấn đề ở đây là mình cần bắt lỗi để hiển thị tiếng việt.
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

bạn nên kết hợp với VBA. Nếu ko rất khó viết chương trình theo ý muốn của mình được vì những macro trong access ko thể nào đáp ứng hết nhu cầu của mình được. Vấn đề của bạn thực ra rất đơn giản. Nếu bạn chạy câu query bằng lệnh VBA
strSQL = "INSERT INTO......" (hoặc append....)
DoCmd.RunSQL (strSQL)

thì bạn có thể chặn lỗi và cho hiện câu thông báo tùy theo ý muốn của mình.
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Uh, thì mình có 1 Form để nhập khoá học riêng và 1 Form nhập thông tin khách hàng.Nhưng mình muốn khi khoá học đó tổ chức xong thì sẽ lưu khoá học đó lại để làm tư liệu sau này.
Và đương nhiên bảng lưu này sẽ không quan hệ với các bảng khác để đảm bảo dữ liệu không bị thay đổi khi thêm hay xoá từ bảng khác
Còn câu lệnh thì mình không rõ lắm vì mình chưa học lập trình VB.

sao bạn ko tạo thêm 1 field status cho table khoa hoc ma tạo them 1 table nua cũng có cấu trúc y chang vậy để làm gì.
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

sao bạn ko tạo thêm 1 field status cho table khoa hoc ma tạo them 1 table nua cũng có cấu trúc y chang vậy để làm gì.

Thế này nhé,bảng CourseDetail của mình có quan hệ m - 1 với bảng Customer . Mà bảng Customer luôn biến đổi,ví dụ ông khách đó chuyển Cty hoặc Cty đó thay GD. Lúc đó dữ liệu trên bảng CourseDetail sẽ thay đổi theo bảng Customer mà như vậy sẽ sai dữ liệu về học viên cũ.
Thế nên mình cần phải append sang bảng khác không có quan hệ để giữ nguyên thông tin về học viên cũ.
Mình muốn khi append dữ liệu từ CourseDetail sang bảng khác thì sẽ xoá dữ liệu trên CourseDetail đi nhưng lại không thể xoá được vì CourseId mình để Autonumber,nếu mình xoá đi thì có nhược điểm là khi Compact Database thì CourseID sẽ trở về 1 như thế lúc lưu dữ liệu vào bảng khác sẽ xuất hiện lỗi trùng mã ID. Bạn có cách giải quyết nào để làm trường mã ID tự tăng theo ý mình mà không dùng Autonumber không.
Ví như mình muốn tự tăng theo kiểu :
ETB1
ETB2
ETB3...
Thanks
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

mình thường giải guyết vấn đề đó bằng VBA. Nhưng thực tế người ta ko xóa dữ liệu của bất cứ record nào mà họ dùng field status để xác định tình trạng của record đó. Phần mềm của bạn bao giờ nộp. Nếu được thì cho mình biết đề tài của bạn là gì để mình tư vấn cho. Dùng macro thì mình ko rành lắm, chủ yếu là viết VBA thôi.

Nếu bạn cũng là dân lập trình thì nên dùng VBA. Nó cũng đơn giản lắm, có gì mình hỗ trợ code cho.

Bạn phải viết code thì mới thực sự sử dụng hết tính năng của access, ko thì cũng giống như cưỡi ngựa xem hoa thôi.
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Mình theo Quản trị mạng.Giờ mới dang học SQL 2005 thôi nên không biết VB.
Mình viết phần mềm này cho công ty,nó là phần mềm quản lý thông tin khách hàng.Nếu theo như bạn dữ liệu chỉ thêm vào mà không xoá thì theo thời gian dung lượng file Access sẽ tăng lên mà giới hạn file Access chỉ có 2 Gb.Mà nếu không xoá thì cứ để thừa ra là không cần thiết.
Mình muốn khi tổ chức xong một khoá học thì toanf bộ thông tin học viên và khoá học sẽ được lưu sang bảng khác.Còn dữ liệu trên Form CourseDetail sẽ được xoá đi.Nhưng vấp phải vấn đề mã ID là Autonumber,nên sau khi xoá mà Compact dữ liệu nó sẽ đưa ID trở về 1.Như vậy lần sau mình lưu khoá học tiếp sẽ báo lỗi trùng mã ID
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Biết đến khi nào bạn mới dùng hết 2GB. Chưa đến lúc đó bạn đã chuyển DB thành SQL2005 rồi, lúc đó tốc độ phần mềm rất nhanh, hơn hẵn dùng access làm DB, khi đó access chỉ đóng vai trò front-end và link DB đến SQL2005, toàn bộ code, form, report.. đều như cũ ngoại trừ Table có thay đổi một chút.

Mình nói bạn đừng buồn chứ thực tế ko ai dùng cách của bạn hết, append sang table khác, xóa dữ liệu table cũ... sẽ nãy sinh ra nhiều vấn đề lúc run time và khi lập báo cáo quản trị cũng khó.
 
Sửa lần cuối:
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Nhưng bạn ơi ! Vậy bạn thử bày cho mình cách làm thế nào để dữ liệu luôn chính xác với.
Thế này nhé,mình có 3 bảng : Customer ,Course và CourseDetail .
Công ty mình chuyên về tổ chức khóa học cho các GĐ doanh nghiệp.
Dữ liệu trên Customer đòi hỏi phải chính xác tuyệt đối,sai đâu sửa đấy.Bởi NV tư vấn sẽ dựa vào đó để gọi điện tư vấn trực tiếp.Thế nên sẽ xuất hiện trường hợp 1 ông GĐ làm cho Cty A trước đây đã tham gia vào 1 khóa học của mình,nay ông đó chuyển sang Cty B thì dữ liệu trên bảng Customer phải được thay đổi.Khi đó dữ liệu trên bảng CourseDetail theo quan hệ 1-m cũng sẽ thay đổi theo.
Như vậy xuất hiện trường hợp sai dữ liệu học viên như sau :
1.Ngày 15/5/2009 khóa học Phong thủy trong kinh doanh :
Học viên là Vũ Hữu Kháng cty Trung Tâm TT Tin học TP.
2. Đến ngày 1/2/2010 NV tư vấn thông báo A Kháng chuyển Cty An Biên Software và thông tin về khách hàng này phải được thay đổi trên Customer (Không lẽ thêm 1 bản ghi ông Kháng nữa à).
===> SAI DỮ LIỆU VỀ THÔNG TIN HỌC VIÊN CŨ CỦA KHÓA HỌC.Vậy là thông tin trên bảng CourseDetail trở nên vô giá trị,sai lệch.
Vậy có cách nào để không phải up sang bàng khác mà dữ liệu không xảy ra như trên không.Hôm nào để mình hỏi thày giáo vụ này xem thế nào .Đấy chỉ là 1 ví dụ,còn thực tế rất nhiều tình huống xảy ra.
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Nhưng bạn ơi ! Vậy bạn thử bày cho mình cách làm thế nào để dữ liệu luôn chính xác với.
Thế này nhé,mình có 3 bảng : Customer ,Course và CourseDetail .
Công ty mình chuyên về tổ chức khóa học cho các GĐ doanh nghiệp.
Dữ liệu trên Customer đòi hỏi phải chính xác tuyệt đối,sai đâu sửa đấy.Bởi NV tư vấn sẽ dựa vào đó để gọi điện tư vấn trực tiếp.Thế nên sẽ xuất hiện trường hợp 1 ông GĐ làm cho Cty A trước đây đã tham gia vào 1 khóa học của mình,nay ông đó chuyển sang Cty B thì dữ liệu trên bảng Customer phải được thay đổi.Khi đó dữ liệu trên bảng CourseDetail theo quan hệ 1-m cũng sẽ thay đổi theo.
Như vậy xuất hiện trường hợp sai dữ liệu học viên như sau :
1.Ngày 15/5/2009 khóa học Phong thủy trong kinh doanh :
Học viên là Vũ Hữu Kháng cty Trung Tâm TT Tin học TP.
2. Đến ngày 1/2/2010 NV tư vấn thông báo A Kháng chuyển Cty An Biên Software và thông tin về khách hàng này phải được thay đổi trên Customer (Không lẽ thêm 1 bản ghi ông Kháng nữa à).
===> SAI DỮ LIỆU VỀ THÔNG TIN HỌC VIÊN CŨ CỦA KHÓA HỌC.Vậy là thông tin trên bảng CourseDetail trở nên vô giá trị,sai lệch.
Vậy có cách nào để không phải up sang bàng khác mà dữ liệu không xảy ra như trên không.Hôm nào để mình hỏi thày giáo vụ này xem thế nào .Đấy chỉ là 1 ví dụ,còn thực tế rất nhiều tình huống xảy ra.

Vậy với ví dụ trên thì bạn làm thế nào? Nếu bạn muốn thay đổi thông tin A Kháng thì sao không gọi query update mà nhất thiết phải là append cho sinh lỗi!
 
Ðề: Làm thế nào để chặn thông báo lỗi của Query !

Bạn hiểu nhầm ý mình rồi .Khi thông tin về A Kháng thay đổi thì mình sẽ vào Table Customer để sửa trực tiếp chứ có dùng Q Append nào đâu. Query Append là để chuyển toàn bộ khóa học (Sau khi đã tổ chức xong) vào 1 bảng khác (Gọi là Old Course),bảng này không có mối quan hệ với bảng nào để giữ nguyên dữ liệu không bị thay đổi theo thời gian.
Vấn đề bạn Khanh1202 đang hỏi mình tại sao phải chuyển dữ liệu sang bảng khác là thế.
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Kỹ thuật giải trình thanh tra BHXH

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top