• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Function

  • Автор темы motogarri
  • Дата начала
M

motogarri

Функция не возвращает переменные определенного мной Type?

Function GetArray(doc As NotesDocument) As MyType

Ругается. Говорит, что неправильный тип возвращаемого значения.
 
M

motogarri

Неа. Когда я на выходе из функции пишу:

Arr = MyArr

Говорит про несоответствие типов. У меня многомерный массив, но не (1, 1, 3), а (2, DocName, Field)
 
N

nvyush

Опишите класс
Код:
Function MyFunction(...) As MyClass
Dim ret As New MyClass

Set MyFunction = ret
End Function
 
M

motogarri

ну, если писать так:

Код:
Function GetArray(db as NotesDatabase, doc As NotesDocument) As Variant

dim view as notesview
dim doc2 as notesdocument

dim arr() as MyType
Dim k As Integer
Dim i As Integer

Set view = db.GetView("View")
Set dc = view.GetAllDocumentsByKey(doc.ID(0))
Set doc = dc.GetFirstDocument
i = 1
k = dc.Count
Redim arr(1 To k) 
For i = 1 To k
arr(i).Field = doc2.Field(0)
Set doc2 = dc.GetNextDocument(doc2)
Next

GetArray = arr

end Function
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
У меня есть подобная реализация, только переменная собственного типа на входе функции. Проблем нет
 
M

motogarri

Лучше Type заменить на Class. Меньше ограничений. Лишний New для создания экземпляра не страшно.
Да, с классом проблем нет, кроме одной. Получается набрать массив объектов класса, но не получается классом сделать сам массив.
А что мешает сделать
dim arr as Variant
и
Redim arr(1 To k) As MyType
и соответствующую обработку результата ф-ции?
Ничего не мешает. Попробую, спасибо)

Вчера полдня просидел над этими типами, и решил этот цикл вообще не выносить в библиотеку. Оставил на потом пока.

Добавлено: А у массивов есть строковое представление, как у полей в документе? По типу:
doc.GetItemValue("Field" & Cstr(i))
Как-то можно такое проделать с полем из моего типа? arr(i).mytype.field1
 
T

TIA

Да, с классом проблем нет, кроме одной. Получается набрать массив объектов класса, но не получается классом сделать сам массив.
Не понял, что значит "классом сделать сам массив"? А как на LS можно Type'ом сделать сам массив?
Массив объектов как и типов понятно:
Redim arrC(1 To k) As MyClass
Redim arrT(1 To k) As MyType
 
N

nvyush

garri
У Вас есть некая задача. Вы решили реализовать её таким-то образом и задаёте уточняющие вопросы по конкретно Вашей реализации. Было бы лучше обнародовать саму задачу, тогда, возможно, Вам бы посоветовали другие, более оптимальные реализации. В частности, может быть и такое решение:

Код:
Class MyClass
Public MyArr As Variant

Sub New(db as NotesDatabase, doc As NotesDocument)
'...
End Sub
End Class

'использование
Dim Myvar As New MyClass(db, doc)
Forall element In Myvar.MyArr
'...
End Forall

P.S. Прошу не пинать ногами — это на уровне идеи
 
M

motogarri

Я понял, спасибо за пинок в нужную сторону))
Задача оптимизировать вложенные циклы, где перебираются документы. На локале работает отлично, по внутренней сети похуже, через интернет вообще труба. Пытаюсь сократить количество обращений к базе. Один раз обратился, засунул нужные поля из нужных документов в массивы и потом работаю с массивами. Подозреваю, что будет быстрее.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!