Проблемы с несоответствием типов VB - inArray () - PullRequest
1 голос
/ 13 февраля 2009

Я не большой программист на VB, но что-то вроде этого должно быть достаточно простым ... Хотя я действительно в тупике.

У меня есть веб-приложение, которое много работает с электронной почтой и PDF-файлами. Я добавляю в него несколько новых функций и столкнулся с двумя очень основными ошибками «Несоответствие типов» и не смог их решить.

Первое происходит, когда я вызываю inArray () в простом сценарии поиска / замены. Я создаю массив имен полей в базе данных и сравниваю содержимое электронного письма с этими именами, чтобы $ * %% P1FirstName можно было заменить действительным именем в БД. Достаточно просто.

Этот точный код работает в других местах сайта, но на этой новой странице я получаю сообщение об ошибке несоответствия типов в строке, содержащей вызов inArray ():


strOut = ""
strIn = strEmail
arrString = split(strIn,"$*")
'make an array of all the fields in the recordset to compare the fields in the email against
strTmp = ""
for each f in rs2.fields
    strTmp = strTmp & f.name & "x%x"
next
arrFields = split(strTmp,"x%x")
for i = lbound(arrString) to ubound(arrString)
    'if the current word in the array is a DB field name (as indicated by the leading '%%' then get the data
    'from the recordset and drop it into the email, otherwise it is a generic term
    if left(arrString(i),2) = "%%" then
        arrString(i) = replace(arrString(i),"%%","")
        if not trim(arrString(i)) = "" then
            if inArray(arrFields, arrString(i)) then
                strOut = strOut & rs2(arrString(i))
            end if
        end if
    else
        strOut = strOut & arrString(i)
    end if
next

Я не могу понять, почему нельзя сравнивать два массива строк (или почему этот же вызов работает в другом месте). Кажется, ничего не отключается, когда я что-то выводю (например, имена полей), и чрезмерное использование CStr () не помогает.

Другой - просто вызов функции:

WritePDF (iformID, TemplateFile, Appfile, подписанный, rsProc ("fontSize"), passwordProtect)

где подпись и защита паролем - логические значения. Это сложнее, потому что ошибка не говорит мне конкретно, какое поле выключено. Я только что попробовал несколько перефразировок и cbool () и вручную установил каждое поле и никуда не попал. Опять же, этот же код работает на всех остальных страницах сайта.

Я уверен, что есть очень простой ответ на это, и это сводит меня с ума, что я не нашел его. Если есть что-то, что вы сразу заметите, я бы хотел получить отзыв.

Ответы [ 3 ]

1 голос
/ 09 марта 2009

В vbscript нет встроенной функции InArray (). У вас есть функция?

0 голосов
/ 30 мая 2009

Как насчет этого:

strOut = ""
strIn = strEmail

strTmp = ""
For Each f In rs2.fields
    If Instr(strIn, "$*%%" & f.name) > 0 Then
        strIn = Replace(strIn, "$*%%" & f.name, rs2(f.Name).Value)
    End If
Next

strOut = strIn
0 голосов
/ 13 февраля 2009

Этот точный код работает в других местах? Вы уверены, что передаете аргументы функции inArray () в правильном порядке? Массив строк и строка, переданная в неправильном порядке, может привести к ошибке несоответствия типов.

...