2009-02-04 39 views
6

Bah, vbscript.vbscript: kiểm tra sự tồn tại của một cột trong một recordset

Tôi đang cố gắng để tìm ra cách để có được bản Tuyên Bố này để làm việc:

if (not rsObject("columnNameThatDoesntExist") is nothing) then 
' do some stuff 
end if 
' else do nothin 

đâu rsObject là một RecordSet và columnNameThatDoesntExist là ... bạn cũng biết. Tôi đang tìm một cái gì đó như rsObject.Columns.Contains (string). Nhưng tất nhiên không thể tìm thấy nó.

Chỉnh sửa: Hình như vòng lặp rsObject.Fields là một tùy chọn, đó là cách duy nhất để thực hiện việc này?

Trả lời

6

Tôi chắc chắn bạn có lý do, nhưng nếu bạn không biết bạn đang gọi lại trường nào từ cơ sở dữ liệu, bạn luôn có thể sử dụng Lỗi khi tiếp tục và lỗi trên Goto 0 để bỏ qua lỗi được gửi. Có vẻ như một cách xấu đối với tôi, nhưng nó sẽ hoạt động

blnItWasntThere = True 
On Error Resume Next 
If (rsObject("columnNameThatDoesntExist") <> "") Then 
    blnItWasntThere = False 
    ... 
    ... 
    ... 
End If 
On Error Goto 0 

If blnItWasntThere Then 
'handle this error' 
End If 

Nhưng với điều đó, tôi nghĩ bạn sẽ lo lắng hơn về bản ghi bí ẩn mà bạn đang quay trở lại.

Hoặc thực hiện chức năng của riêng bạn

Function ColumnExists(objRS, Column) 
    Dim blnOutput, x 
    blnOutput = True 
    On Error Resume Next 
    x = objRS(Column) 
    If err.Number <> 0 Then blnOutput = False 
    On Error Goto 0 
    ColumnExists = blnOutput 
End Function 
+0

Nah, tôi biết những gì các cột đang trở lại, nhưng tôi m làm một số công cụ kỳ lạ trên chương trình phụ trợ để xử lý một tập hợp các cột có thể phát triển trong tương lai, sau đó kéo các giá trị cho các tên cột đó. Đó là kludgy, arcane và xấu xí. Nhưng không thể thay đổi nó đủ để làm cho nó đúng. – jcollum

+0

Bạn đã xem xét GetRows chưa? rs.GetRows sẽ trả về một mảng mà bạn có thể roi qua. Tôi đã sử dụng nó với một loạt các biến Dim, nhưng tôi đoán bạn có thể sử dụng chỉ mục như số ma thuật? http://www.w3schools.com/ado/met_rs_getrows.asp – MrChrister

+0

Thực ra điều này phù hợp với những gì tôi cần, vì đoạn mã này sẽ biến mất sau khoảng một giờ (bằng chứng về loại khái niệm, không cần phải làm việc đúng) – jcollum

0

Hoặc looooop và kiểm tra xem nó ở đó, hoặc chỉ cố gắng lấy nó:

Dim oRs:Set oRs = Nothing 
On Error Resume Next 
Set oRs = rsObject("columnNameThatDoesntExist") 
On Error Goto 0 
If Not rsObject("columnNameThatDoesntExist" Is Nothing Then 
    ' ... 
End If 
Các vấn đề liên quan