2009-02-04 7 views
6

Bah, vbscript.vbscript: test na istnienie kolumny w zestawie rekordów

Próbuję dowiedzieć się, jak dostać się do pracy to stwierdzenie:

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

Gdzie rsObject jest zestaw rekordów i columnNameThatDoesntExist jest ... no wiesz. Szukam czegoś takiego jak rsObject.Columns.Contains (string). Ale oczywiście nie może tego znaleźć.

Edycja: Wygląda jak zapętlenie rsObject.Fields jest opcją, czy to jedyny sposób na zrobienie tego?

Odpowiedz

6

Jestem pewien, że masz swoje powody, ale jeśli nie wiesz, które pola wywołujesz z bazy danych, zawsze możesz użyć On Error Resume Next and On Error Goto 0, aby zignorować podany błąd. Wygląda na to zły sposób do mnie, ale to działa

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 

Ale z tym powiedział, myślę, że można byłoby bardziej zaniepokojeni rekordów tajemnicy jesteś wracając.

lub stworzyć własną funkcję

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, wiem jakie kolumny wracają, ale I” Robię jakieś dziwne rzeczy na zapleczu, aby poradzić sobie z zestawem kolumn, które mogą rosnąć w przyszłości, a następnie wyciągając wartości dla tych nazw kolumn. Jest kludgy, arcane i brzydki. Ale nie można go zmienić na tyle, aby było dobrze. – jcollum

+0

Czy zapoznałeś się z GetRows? rs.GetRows zwróci tablicę, którą możesz pokonać. Użyłem go z wieloma zmiennymi Dim, ale myślę, że mógłbyś użyć indeksu jak magiczne liczby? http://www.w3schools.com/ado/met_rs_getrows.asp – MrChrister

+0

Właściwie to działa na to, czego potrzebuję, ponieważ ten fragment kodu zniknie za około godzinę (coś w rodzaju proof of concept, nie musi działaj poprawnie) – jcollum

0

Tak czy looooop i sprawdzić, czy jest tam, albo po prostu spróbować go złapać:

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