Tôi có tình huống này những không thực hiện bẩy lỗi để hiển thị bằng Tiếng Việt được. Nhờ các Pro chỉ giáo giúp.
Tình huống:
1. Tôi thực hiện Import dữ liệu từ file Excel vào table bằng lệnh: "DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, TenTable, TenFileExcel, True"
2. Trong file Excel có trường "Số lượng" định dạng bằng Số (Integer). Xong khi nhập vào, User nhập nhầm ở 1 dòng trong trường này bằng chữ.
Khi thực hiện báo lỗi như hình đính kèm !
[img]
[/img]
Xin các Pro chỉ giáo cách bắt lỗi Tiếng Việt của Lỗi này ! Cảm ơn nhiều !
Sao bạn không sử dụng dạng bẫy lỗi kiểu này đặt ơ
Sub DOITNOW()
'để tắt cảnh báo của access
DoCmd.SetWarnings false
Application.DisplayAlerts = false
On Error GoTo ErrHandler
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, TenTable, TenFileExcel, True
ErrHandler:
If err.number <>0 then
msgbox err.description
end if
DoCmd.SetWarnings true
Application.DisplayAlerts = true
End sub
Cảm ơn "paulsteigel". Mình làm như bạn HD thì báo lỗi ở dòng "Application.DisplayAlerts = false"
Mình đang dùng Acc of2007.
Theo như "Ngu ý" của mình thì lỗi mình nói ở trên ko có "Err.Number" nên không bẩy theo cách hướng dẫn của bạn được.
Hơn nữa nếu đã dùng lệnh: DoCmd.SetWarnings false là đã tắt toàn bộ "cảnh báo" rồi thì làm sao hiển thị lỗi được.
Bạn cho mình xin Demo hoặc HD dẫn kỹ hơn được ko ? Cảm ơn nhiều !
tmtien261 đã làm được rồi. Đoạn code:
DoCmd.SetWarnings False
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, TenTable, FileExcel, True
If Not IsNull(Err.Description) Then
Msgbox "Thông báo nội dung lỗi !"
Gọi lệnh: "Xóa dữ liệu nhập lỡ dỡ trong TenTable"
End If
DoCmd.SetWarnings True
Tuy nhiên cách này không thông qua Err.Number để gọi Function_Err chung được.
Chào bạn Tiến,
Mình thành thật xin lỗi vì bài trả lời lãng nhách. Mình không kiểm tra và cũng chưa nghiên cứu kỹ nên trả lời hơi vội và làm bạn thất vọng.
Thực tế thì ta nên phân biệt một chút. Các cảnh báo của Access không được gọi là lỗi thực thi vì thế ta sẽ không có cách nào bẫy lỗi được. Chính vì thế đa phần người ta hay tắt các cảnh báo đó khi cần thực thi điều gì đó.
Về yêu cầu của bạn, mình đề nghị 2 giải pháp.
1. Cứ thực thi lệnh transfer như thường vào một bảng với kiểu dữ liệu là text sau đó sẽ xử lý đưa số liệu vào bảng chuẩn với các thuật toán đánh giá số liệu. Cách này an toàn và cũng dễ làm. Cách này đảm bảo an toàn nhưng cần nhớ là file excel phải đóng khi thực thi. Tốc độ thực hiện cách này là khá nhanh.
2. Thực hiện việc tương tác trực tiếp với Excel sau đó kiểm tra số liệu và thực thi các lệnh truy vấn thêm số liệu vào bảng trong access. Cách này nguy cơ treo hoặc lỗi không xác định thường nhiều. Nhưng bạn có thể xử lý số liệu được ngay.
Còn mong đợi bẫy lỗi của bạn thì không làm được đâu nhé (theo giải thích ở phần đầu bài). Cách làm của bạn sẽ luôn có thông điệp báo lỗi trong mọi trường hợp, bạn thử đi nhé (đơn giản vì mô tả lỗi Err.Description nó không phải là null mà là "" - blank).
Một lần nữa, xin lỗi bạn!
03-10-13, 01:31 AM (Được chỉnh sửa: 03-10-13, 01:53 AM bởi quanghoasla.)
Bạn cũng có thể làm một bảng cảnh báo lỗi bằng tiếng việt sau đó bẫy nó nếu người sử dụng không nhập đúng kiểu định dạng thì sẽ báo lỗi đó và yêu cầu nhập lại là được. cái này bạn có thể tham khảo bài viết của diễn đàn theo link này; thuthuataccess.com/forum/thread-4692.html. chúc bạn vui vẻ
Cảm ơn "quanghoasla" và "paulsteigel".
1. Đúng là không thực hiện bẫy lỗi được trong khi lỗi err.Number không có.
2. Bạn "quanghoasla đã hiểu chưa đúng ý Tiên rồi. Vì nếu nhập sai trường dữ liệu trong Form thì dùng Form_Error bẫy lỗi được. Nhưng nếu là truyền File từ Excel vào thì không bẫy được !
3. Tiên cũng đã nghĩ theo "cách 1" của "paulsteigel" nhưng không biết "code thuật toán" kiểm tra đánh giá số liệu trước khi thực hiện các bước tiếp.
Hơn nữa nếu trong dữ liệu Excel có nhiều dòng, nhưng ở 1 dòng nào đó format sai kiểu dữ liệu thì khi truyền file, Access tự động cắt bỏ các dữ liệu sai đó. Vì vậy thuật toán kiểm tra table sau khi đã truyền vào là ko ổn.
"paulsteigel" có cách nào hay có thể hướng dẫn thêm giúp Tiên không ? Cảm ơn nhiều !
Bạn nên dùng tiếp cận 1 như tôi đề cập trong bài trước. Cách đó ổn về tốc độ và bảo toàn dữ liệu! Access sẽ không cắt bỏ cái gì cả. Excel rất kém trong việc kiểm soát định dạng số liệu. Cách làm như thế này:
1. Chuyển số liệu Excel vào 1 bảng phụ/ tạm thời với tất cả các cột có kiểu số liệu là Text.
2. Kiểm tra số liệu trong bảng phụ đó và thực thi các lênh truy vấn đưa số liệu vào bảng chính thức.
3. Xóa bảng phụ,
Cách này an toàn và nhanh.
Cảm ơn "paulsteigel" ! Hiện mình đã và đang làm như PA1 của bạn. Tuy nhiên mình đang gặp rắc rối:
Nếu trong "Bảng chính" khai báo kiểu trường là Integer hoặc Number thì trong "Bảng phụ" cũng phải khai báo là Integer hoặc Number thì mới Update được.
Xong nếu trong bảng phụ khai báo là Integer hoặc Number mà trong file Excel nhập kiểu Text thì khi truyền sẽ bị cắt bỏ. Còn nếu để truyền được vào thì phải khai báo kiểu Text trong "bảng phụ" ---> Không Update được.
Có cách nào khi truyền vào "Bảng phụ" thì khai báo kiểu text, sau đó chuyển đổi kiểu từ Text sang Number và thực hiện Update vào "Bảng chính" được không ?
Rất mong các Pro chỉ giáo ! Thanks