Type Mismatch

Тема в разделе "Lotus - Программирование", создана пользователем allex, 26 авг 2010.

Статус темы:
Закрыта.
  1. allex

    allex Гость

    Предыстория:
    Сделал я одну процедуру, которая получала данные и выгружала их в ООО. Все работает замечательно, но те данные что получаются внутри этой процедуры будут использоватья в будущем, поэтому решил я отделить мух от коклет.

    Суть так называемой проблемки:
    Функция, которая получает маасив данных не хочет присваивать этот массив, пишет что <Type mistmach>
    Public Function array_data(doc As NotesDocument,manual_select_docchar As Boolean) As Variant
    Массив данных представляет собой набор List As Variant
    И вот на этой строке - array_data = arr_val - <Type mistmach>
    Public Sub print_otchet (doc As NotesDocument,arrval As Variant)
    Процедура выгрузки полученных данных в ООО
    call print_otchet (doc,array_data)

    Что это может быть ?

    Да, кстати...
    Print "arr_val - " & TypeName(arr_val) = Variant
    Print "yarray_data - " & TypeName(array_data) = Empty
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Нельзя просто так возвратить массив массивов или список массивов. Используй классы.
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    а если возвращать List As Variant как Variant ?
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Если это список массивов, то нельзя. Если в списке не массивы, то можно. :)
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    дело в том что массивы можно создавать не Dim/Redim ...
    например
    Dim v As Variant
    v=split("","")
    далее
    v=ArrayAppend(v,nextvalue)
     
  6. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Это понятно.
    Но если Variant - это массив, то List As Variant вернуть нельзя.
    Т.е. такой код выдаст ошибку:
    Код (Text):
    function test() As Variant
    Dim a list As Variant
    a("1") = Split("", "")
    test = a
    end function
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Надо переписать циклом из одной переменной в другую
     
  8. allex

    allex Гость

    Массив представляет собой вот какой вид
    b("zxc")="12"
    b("zxcv")="14"
    a(0)=b

    Задачу решил через объявление глобальной переменной
     
  9. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Можно и когда массивы. И без классов.
    Просто передать через параметр:
    Код (Text):
    Dim tmp List As Variant
    If test("afa sf", tmp) Then
    Print "Аля-улю!.."
    End If
    Код (Text):
    Function test(pStr As String, plst List As Variant) As Boolean
    arrTmp = Split(pStr, " ")
    If Ubound(arrTmp) > 0 Then      'например такая логика
    plst(Cstr(Now)) = arrTmp
    test = True
    End If
    End Function
    Лучше без глобальной переменной - массивы легко возвращаются функцией через Variant.
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    VladSh
    если лист создавать/перебирать - то да
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей