Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Bẫy lỗi bằng Tiếng Việt
#1
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][Hình: Capture.PNG]
[/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 !
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
#2
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
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn
#3
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 !
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
#4
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ữ 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
#5
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!
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn
#6
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ẻ
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
#7
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 !
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
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.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn
#9
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
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
Khi đã up vào phụ được (text) thì dùng hàm Val dể chuyển từ text sang số
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


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Cập nhật combobox 2 từ combobox 1 (dữ liệu ở nhiều bảng) votinh.tq 6 197 22-11-16, 11:34 PM
Bài mới nhất: votinh.tq
  Không nhập liệu được bằng Form ChiMai 8 375 23-07-16, 11:01 PM
Bài mới nhất: hungefi
  Tạo Menu dạng TreeView bằng Query (không dùng ActiveX) ongke0711 2 233 05-07-16, 11:50 AM
Bài mới nhất: nam8384
  [Hỏi] Gõ dấu tiếng Việt trong code cannguyen 2 133 25-05-16, 02:41 PM
Bài mới nhất: cpucloi
  GIẢI THÍCH CÁC LỆNH KHI VIẾT CODE huynhbahoc 3 2,940 26-03-16, 09:19 PM
Bài mới nhất: phuc_thanhtien

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ơ