2009-03-19 77 views
12

Tôi có một trường tùy chọn trong một cơ sở dữ liệu mà tôi đang rút ra bằng cách sử dụng một Bộ Ghi DAO. Tôi cần kiểm tra xem trường có được đặt trước khi tôi nối nó với các trường khác không. Cho đến nay tôi có đoạn mã sau mà tôi đã thử với cả hai số Is= (đó là cú pháp rõ ràng sai [[Is | =]]) không có kết quả. Có vẻ như nếu tôi sử dụng =, nó sẽ không được so sánh chính xác với Null và nếu tôi sử dụng Is thì nó sẽ phàn nàn rằng nó không so sánh với một đối tượng.Làm thế nào bạn có thể kiểm tra null trong một bản ghi VBA DAO?

Nếu có cách đơn giản hơn để làm điều này, tôi hoàn toàn cởi mở với nó. prettyName lấy 3 chuỗi làm tham số và ban đầu tôi chỉ cố gắng chuyển rs.Fields ("MiddleName") trực tiếp nhưng nó ném lên với giá trị Null. Tôi muốn làm một cái gì đó trực tiếp hơn như thế nhưng đây là điều tốt nhất tôi có thể nghĩ ra.

Trả lời

27

Làm thế nào về:

IsNull(rs.Fields("MiddleInitial").Value) 

Bạn cũng có thể có một cái nhìn tại this article trong đó có một số giải thích về giá trị Null trong các ứng dụng truy cập VBA và làm thế nào để xử lý chúng.

7

Đối với ví dụ bạn thấy, Nz sẽ làm việc:

thisMiddleInitial = Nz(rs!MiddleInitial,"") 

Hoặc đơn giản là concatenating chuỗi với một chuỗi rỗng:

thisMiddleInitial = rs!MiddleInitial & "" 
2

Câu hỏi của bạn đã được trả lời bởi Remou, dường như đối với tôi, nhưng nó xảy ra với tôi rằng bạn chỉ có thể cố gắng để có được nối thích hợp của các lĩnh vực tên. Trong trường hợp đó, bạn có thể sử dụng Mid() và Null propagation trong VBA để có được kết quả.

tôi không sử dụng các trường đệm riêng biệt, vì vậy thường thức tên nối của tôi là:

Mid(("12" + LastName) & (", " + FirstName), 3) 

Các "12" chuỗi ngay từ đầu sẽ được vứt đi nếu LastName là Không Null và phớt lờ nếu nó null, bởi vì toán tử nối + truyền Null.

Để mở rộng này bao gồm intials giữa sẽ trông như thế này:

Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3) 

Giả sử UDF của bạn không làm một số loại dọn dẹp phức tạp của nickname/chữ viết tắt/etc, điều này có thể thay thế nó hoàn toàn, dường như. tôi.

+0

Thủ thuật thông minh, nhưng dựa vào sự khác biệt khá mơ hồ giữa các nhà khai thác + và & là mạo hiểm, imo. Nếu ai đó quay lại sau và cố gắng dọn sạch mã, họ có thể quyết định thay thế tất cả các nút bằng & 's, hoặc ngược lại, để đảm bảo tính thống nhất, mà không nhận ra rằng nó thay đổi hành vi. –

+0

Tôi không thực sự lo lắng quá nhiều về khả năng của một người không hiểu những điều cơ bản của các nhà khai thác nối của Jet SQL làm rối tung mọi thứ. Họ có thể dễ dàng làm hỏng UDF được tạo ra cho cùng một mục đích đơn giản chỉ vì họ không hiểu nó hoạt động như thế nào. –

+0

Đồng ý, biết cách hoạt động của các toán tử là những thứ khá cơ bản. – onedaywhen

0

If rst.Fields("MiddleInitial").Value = "Null" Then

Điều này phù hợp với tôi. Tôi sử dụng cơ sở dữ liệu MS SQL.

Các vấn đề liên quan