TRANG CHỦ


TGVT - Công nghệ Máy tính và Mạng
 

Xử lý lỗi ‘3146’ trong chương trình VB

ID: A1001_108
Thực hiện: Nguyễn Anh Tuấn
       
1348


Lỗi run-time 3146 (ODBC Call failed) là một thông báo khá “tù mù”, vì vậy nó xuất hiện trong khá nhiều diễn đàn VB. Khi được người sử dụng thông báo lỗi này, lập trình viên không biết lỗi gì đã xảy ra với các thao tác cơ sở dữ liệu để có cách giải quyết. Gốc của vấn đề là ở chỗ ODBC trả về một chuỗi các lỗi nhưng chương trình chỉ hiển thị lỗi đầu tiên là 3146 "ODBC Call Failed".

Điều đầu tiên mà các lập trình viên thường nghĩ tới là tại sao chương trình không hiển thị được thông báo lỗi cụ thể và cần phải sửa chương trình. Mặc dù cách làm rất đơn giản nhưng ít người để ý (cách làm này đã có từ VB4). Lập trình viên cần duyệt Errors collection để lấy đủ thông tin chi tiết trước khi hiển thị cho người dùng bằng cách thay câu lệnh cụt lủn MsgBox Err.Number &" " & Err.Description trong phần bẫy lỗi bằng đoạn mã dưới đây:

Dim sError As String
Dim nI As Integer
Dim sTitle As String
sError = ""
' Determine whether or not this is a database error
If DBEngine.Errors.Count > 0 Then
If DBEngine.Errors(DBEngine.Errors.Count-1)._
Number = Err.Number Then
sTitle = "Database Error"
For nI = 0 To DBEngine.Errors.Count - 1
sError = sError & DBEngine.Errors(nI) & vbCrLf
Next
sError = sError & vbCrLf
End If
End If
If sError = "" Then
sTitle = "Error"
' add the error string
sError = sError & Err.description & vbCrLf
End If
MsgBox sError, , sTitle

Lưu ý: nếu truy cập cơ sở dữ liệu bằng RDO, các bạn cần thay DBEngine.Errors trong đoạn mã trên bằng rdoEngine.rdoErrors.

Nhưng sửa chương trình không phải là cách duy nhất và cũng không phải là cách hay nhất trong mọi trường hợp. Chỉnh sửa chương trình là cần thiết cho những lần sau, nhưng nếu đang gấp hay không thể gửi ngay chương trình cập nhật cho người dùng, bạn làm thế nào để xác định nguyên nhân lỗi. Ngay cả khi không có chương trình nguồn trong tay, bạn vẫn có thể xác định được nguyên nhân thực sự gây lỗi để tìm cách khắc phục. Để làm được điều đó, hãy hướng dẫn người dùng bật tính năng ODBC tracing trên máy khách theo các bước sau. Trước tiên gọi Control Panel, mở mục Administrative Tools rồi gọi Data Sources (ODBC), chuyển sang thẻ Tracing và nhấn vào nút Start Tracing Now (xem hình). Hãy nhớ thư mục chứa tệp log để có thể xem chi tiết lỗi (tất nhiên bạn có thể đổi lại thư mục đó theo ý mình). Sau cùng, khi đã chạy lại ứng dụng để sinh lỗi 3146 và đọc thông tin chi tiết lỗi từ tệp log, bạn đừng quên quay lại ODBC Data Source Administrator để tắt tính năng tracing.

Nguyễn Anh Tuấn
nguyen_anh_tuan@yahoo.com

    URL bài viết        
    Facebook Facebook        Twitter Twitter        Myspace Myspace        Digg Digg        del.icio.us del.icio.us
   Ý kiến
    Họ và tên:          Email:  
    Nội dung (câu hỏi hay ý kiến không liên quan đến bài viết vui lòng gửi ở trang Cộng đồng)

Các bài viết khác:
    Tăng tốc mọi thứ (TGVT A  2/2010, tr.86)
    Tiện ích cho nền tảng S60 (TGVT A  1/2010, tr.109)
    Tạo ActiveX và ứng dụng bằng VC++ (TGVT A  1/2010, tr.103)
    5 chương trình chống virus tốt nhất (TGVT A  1/2010, tr.97)
    Lỗi tương thích ứng dụng với Windows 7 (Phần 2) (TGVT A  1/2010, tr.95)
    SSL VPN - Bảo mật truy cập nội bộ từ xa (TGVT A  1/2010, tr.92)
    Kiểm tra tính tương thích ứng dụng với Windows 7 (TGVT A  12/2009, tr.132)
    Tối ưu hoá với MDOP 2009 (TGVT A  12/2009, tr.131)
    Chương trình chống virus miễn phí có đủ sức bảo vệ? (TGVT A  12/2009, tr.125)
    Quảng bá kinh doanh qua video trực tuyến (TGVT A  11/2009, tr.104)

Ấn phẩm:  Số:  

Được đọc nhiều nhất
 5 chương trình chống virus tốt nhất
 Chương trình chống virus miễn phí có đủ sức bảo vệ?
 Kiểm tra tính tương thích ứng dụng với Windows 7
 Tối ưu hoá với MDOP 2009
 Đánh giá tốc độ trình duyệt web
 Các nhãn đánh giá nội dung ESRB & Định nghĩa
 SSL VPN - Bảo mật truy cập nội bộ từ xa
 Lỗi tương thích ứng dụng với Windows 7 (Phần 2)
 Tiện ích cho nền tảng S60
 Tạo ActiveX và ứng dụng bằng VC++
Quảng cáo
Dành cho quảng cáo
THUẬT NGỮ CÔNG NGHỆ
Tra từ :