2013-05-10 3 views
3

Можно ли проверить, находится ли именованное поле в пределах набора записей?Определить, существует ли поле имен в наборе записей

EG ID, field1, field2, field3 выбраны. Возможно ли, чтобы VBScript обнаружил, выбрано ли поле2. Я также надеюсь, что это возможно без цикла

Пожалуйста, предположите, что я не знаю и не могу увидеть фактический SELECT. Мне нужно обнаружить это после выполнения запроса.

Это как его сделать с помощью цикла, я также надеюсь, что это возможно без зацикливания:

dim rs,field,foundField 
sql = "SELECT * from table;" 
set rs = conn.execute(sql) 
For Each field in rs.Fields 
    if field.Name = "someFieldName" then 
     foundField = true 
    exit for 
    else 
     foundField = false 
    end if 
next 

TYIA

+0

Просто для подтверждения инструкции SELECT выполняется на сервере и данные возвращаются в ADO Recordset? –

+0

Я не уверен, что «Коллекции», подобные «Полям», выставляют для этого метод, но вы всегда можете создать свою собственную функцию. Также обратите внимание, что ваш код завершится неудачно, если поле, которое вы ищете, является последним (удалите это еще, чтобы исправить его) – bfavaretto

+0

Я добавил выход, поскольку @bfavaretto отметил, что он никогда не будет работать, если поле, которое было поиск был последним полем. Да, это ADO RS.Я не хочу, чтобы это можно было сделать без цикла, но хотелось бы знать, можно ли это сделать? – Mat41

ответ

0

Я думаю, что вам нужен цикл. Найдено на MSDN (выделено мной):

Большинство встроенных объектов ASP предоставляют коллекции. Коллекции - это структуры данных, подобные массивам, которые хранят строки, числа, объекты и другие значения. В отличие от массивов, коллекции расширяются и автоматически сжимаются , поскольку элементы извлекаются или сохраняются. Позиция элемента также будет перемещаться по мере изменения коллекции. Вы можете получить доступ к элементу в коллекции по его уникальному строковому ключу, по его индексу (положению) в коллекции или путем итерации по всем предметам в коллекции .

В любом случае, вы могли бы попробовать это (непроверенные):

dim rs,field,foundField 
sql = "SELECT * from table;" 
set rs = conn.execute(sql) 
if rs.Fields("someFieldName") then 
    ' ... if this doesn't crash, it may return 
    ' false negatives for columns containing null or 0 
end if 
+0

Танки для вас информации, но нет, что не работает. Кажется, что цикл необходим. – Mat41

7

Я использую ту же функцию (в VB6) к предложенному bfavaretto ... Мне интересно, почему OP говорит, что он не работает?

Public Function FieldExists(ByVal rs As Recordset, ByVal fieldName As String) As Boolean 

    On Error GoTo merr 

    FieldExists = rs.Fields(fieldName).name <> "" 
    Exit Function 

merr: 
    FieldExists = False 

End Function 

Эта функция работает для меня ... и она не возвращает ложных негативов, насколько я знаю. Кроме того, он работает быстрее, чем выполнение цикла для полей, включенных в коллекцию; для полей, которые на самом деле отсутствуют, времена выполнения обоих методов кажутся эквивалентными.


EDIT

Для VBScript, выше функция будет выглядеть следующим образом:

Function FieldExists(ByVal rs, ByVal fieldName) 

    On Error Resume Next 
    FieldExists = rs.Fields(fieldName).name <> "" 
    If Err <> 0 Then FieldExists = False 
    Err.Clear 

End Function 

И код отвечал в вопрос будет выглядеть так:

dim rs,field,foundField 
sql = "SELECT * from table;" 
set rs = conn.execute(sql) 
foundField = FieldExists(rs, "someFieldName") 
+0

Благодарим вас за ввод. Я и другие коллеги исследовали это до смерти. Наш вывод состоит в том, что его просто невозможно в классическом мире ASP идентифицировать отдельное поле (как описано в первоначальном сообщении), если оно не будет первым в коллекции без цикла. Назад, когда эта цель была в моем списке дел, была также размещена на других форумах. Это не просто наш вывод, это все. Вы отправили функцию, которая выглядит так, будто ее нужно вызывать из цикла, чтобы быть честным? – Mat41

+0

Я вижу ... Ради правильности, однако, я редактирую свой ответ, так как в последнее время я делаю много VB6, и мой мозг решил игнорировать ту часть, где вы прямо указываете, что вам нужно это работать в VBScript ... Функция, которую я написал, не будет даже «компилироваться» в VBScript. – ferc

+1

Это отлично работает. Поймать ошибку, если этого поля нет. –

Смежные вопросы