2016-08-17 1 views
2

Я пытаюсь получить левые 7 символов столбца и весь второй столбец из таблицы в моей базе данных. Код, который я использую для этого, выглядит так (за вычетом строки подключения, не хочу его отдать).Классический ASP Как сослаться на поле, которое я изменил с помощью LEFT

Set conn=Server.CreateObject("ADODB.Connection") 
conn.Provider="Microsoft.Jet.OLEDB.4.0" 
conn.Open "myConnectionString" 
Set rs=Server.CreateObject("ADODB.Recordset") 

rs.Open "SELECT DISTINCT LEFT(Location,7), StopID FROM LocStop", conn 

do until rs.eof 
    Response.Write(rs("Location")) 
    Response.Write(rs("StopID")) 
    rs.movenext 
loop 

Это дает ошибку «ADODB.Recordset ошибка„800a0cc1“ Элемент не может быть найден в коллекции, соответствующей запрашиваемое имя или порядковый номер.» на линии Response.Write(rs("Location")). Сбой rs.fields("Location")

Когда я запускаю этот код без вызова LEFT, он работает нормально. Я предполагаю, что имя столбца «Местоположение» либо не принято, либо изменено, когда я использую LEFT на нем. Я в недоумении относительно того, как теперь я должен получить эту информацию. Кто-нибудь знает, правильно ли было мое предположение, и как получить необходимую информацию?

+0

После того, как вы включите столбец в вычисляемый столбец * (не применять какую-либо функцию к нему, чтобы изменить результат) * вы больше не ссылающейся на этот конкретный столбец, но в настоящее отдельный вычисляемый столбец, который должен быть совмещенным , Однако нет причин не использовать существующее имя столбца. Например, 'LEFT (Location, 7) [Location]' будет работать. – Lankymart

+0

Еще один возможный дубликат [ASP Classic recordset не может видеть столбцы с форматом «table.column_name» после преобразования MySQL] (http://stackoverflow.com/q/33263086/692942) * (игнорируйте часть MySQL, эта же проблема по-прежнему применяется несколько поставщиков, использующих ADODB) *. – Lankymart

ответ

2

Пара способов:

  • Дайте ему псевдоним:

    SELECT DISTINCT LEFT(Location,7) as Location, StopID 
    FROM LocStop 
    

    А затем передать его, используя имя псевдонима:

    Response.Write(rs("Location")) 
    
  • Или вы могли бы ссылаться по его индексу: (имя поля не имеет значения)

    Response.Write(rs(0)) 
    
+0

Это не что-то новое и об этом ответили много раз. – Lankymart

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