2012-04-18 2 views
2

Я создал классическую страницу жерех с функцией, как следующее:ошибка «переменная не определена» при вызове функции

<%@ Language=VBScript %> 
<% Option Explicit %> 

<% 
     <!--#INCLUDE file='ADOVBS.inc'--> 
     Response.Buffer = True 

%> 
<% 
     Function Lettergrade(lg) 

      Dim lgs 
      if lg>50 then 
      set lgs="P" 
       else 
      set lgs="F" 
      end if 
      set Lettergrade= lgs 
     End Function 
    %> 
<% 
set strlettergrade=Lettergade(strgrade) 
... other code goes here 
%> 

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

Microsoft VBScript runtime error '800a01f4'

Variable is undefined: 'Lettergade'

У кого-нибудь есть идеи?

ответ

2

Попробуйте избавиться от Set внутри вызова функции и просто назначьте Lettergrade = lgs.

+0

Я попробовал и снова я ошибка .. –

1

Функция, кажется, называется Lettergrade не Lettergade - может просто быть вопрос опечатка

Попробуйте изменить:

strlettergrade=Lettergade(strgrade)

в

strlettergrade=Lettergrade(strgrade)

+0

Это правильно. Огромное спасибо. С этой ошибкой прошлой ночью. –

+1

После смены кода ваш код работал? Вау, вы, конечно, вставили много ошибок приманки в свои вопросы, тогда;). –

0

Вы набрали Lettergrade при вызове функции. Переменная не определена: 'Lettergade' Также я бы взял совет SLaks. Набор не должен использоваться для строк.

1

Есть несколько проблем с этим скриптом, некоторые из которых уже указываются Крисом и Райаном.

  1. Нужно только Set, когда вы назначаете объект переменной. Строки не являются объектами в VBScript. Избавьтесь от всех Set в вашем скрипте.

  2. Очевидная опечатка, о которой упоминал Крис. Изменить Lettergade на Lettergrade.

  3. Вы, кажется, не объявляете переменную strlettergrade или strGrade. При включенном Option Explicit (что является хорошей практикой), обязательно объявлять все переменных. Используйте для этого Dim (как внутри вашей функции).

  4. Вы, кажется, используете строку в качестве параметра для своей функции Lettergrade. Поскольку имя переменной равно strgrade. В рамках функции вы сравниваете integer. Это может вызвать проблемы. Сначала преобразуйте строку в целое число, используя функцию cInt.

  5. Включает в себя необходимость выйти за рамки <% %> тегов. Перемещение <!--#INCLUDE file='ADOVBS.inc'--> линии ниже Option Explicit

Выполните следующие действия, или копировать вставить скрипт из @Cape Cod рогожка. После этого ваш скрипт должен работать как ожидалось;). За исключением пункта 4, вам все равно нужно исправить это.

4
  1. Option Explicit означает, что вы должны DIM переменные, прежде чем они могут быть использованы.
  2. <! - # INCLUDE файл = 'ADOVBS.inc' -> не VBScript, поэтому не включать их между <%% > сценария разделителей тегами.
  3. Вы должны DIM strgrade
  4. вам нужно DIM strlettergrade, прежде чем использовать его
  5. Закрепить опечатка Lettergade (strgrade)

<%@ Language=VBScript %> 
<% Option Explicit %> 
<% Response.Buffer = True %> 

<!--#INCLUDE file='ADOVBS.inc'--> 

<% 
Dim strlettergrade 
Dim strgrade 

%> 

<% 
Function Lettergrade(lg) 

if lg > 50 then 
    Lettergrade ="P" 
else 
    Lettergrade ="F" 

End Function 
%> 

<% 
strgrade = 75 
strlettergrade=Lettergrade(strgrade) 
... other code goes here 
%> 
Смежные вопросы