Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вернуть массив из com-сервера / 8 сообщений из 8, страница 1 из 1
20.06.2007, 16:33
    #34608398
Вернуть массив из com-сервера
вобщем не сам массив, а объект со свойством типа "массив" конечно же....
закралось у меня сомнение, а такое вообще возможно? а то может я зря мучаюсь?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PUBLIC ox
ox = CreateObject("prodazi")
LOCAL loObject AS Custom
loObject = ox.sel_values()
* функция VARTYPE(loObject.aArray[ 1 ])  возвращает L, значит всё-таки чего-то возвращается,
* а вот перебор элементов FOR i =  1  TO ALEN(m.loObject.aArray) не возможен: фокс ругается на 
* размерность массива

метод sel_values() на com-сервере
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Local loCustom as Custom 
loCustom = CreateObject('Custom')
loCustom.AddProperty("aArray[1,1]")
SELECT *;
 FROM (m.tcTabName);
 WHERE INTO ARRAY loCustom.aArray
RETURN m.loCustom

вот я никак и не пойму, а чего в результате всех этих фрикций мне возвращает com-сервер :))
...
Рейтинг: 0 / 0
20.06.2007, 18:29
    #34608817
i__one
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть массив из com-сервера
автора вот перебор элементов FOR i = 1 TO ALEN(m.loObject.aArray) не возможен: фокс ругается на

если масив не одномерный, то ошибка вполне объяснима. Вы выходите за рамки масива. Т.е. ALEN возвращаем общее число элементов. Т.е. если масив двумерный, то нужно:
FOR i = 1 TO ALEN(m.loObject.aArray)/2

и т.д.

может в этом дело :)

P.S. лучше перебздеть чем не добздеть :)
...
Рейтинг: 0 / 0
20.06.2007, 23:34
    #34609211
Вернуть массив из com-сервера
вот хотел опустить конструкцию FOR...ENDFOR, зная, что кто-то придерётся именно к ней, хотя написана она здесь образно и специально закомментирована... всё же думаю, что людям, которые могут посоветовать, что-нибудь дельное по теме "возвращение массива из com-сервера клиенту" и так понятно, как надо перебирать элементы массива.....

а основной вопрос темы не то как перебирать элементы массива, а собсно вообще возможно вернуть массив из com-сервера? (вобщем-то делаю по аналогии возращения массива из функции)
...
Рейтинг: 0 / 0
21.06.2007, 11:43
    #34610105
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть массив из com-сервера
КонецЦикла
* функция VARTYPE(loObject.aArray[1]) возвращает L, значит всё-таки чего-то возвращается,

L - означает, что переменная логического типа. Применительно к массивам, это происходит, если массив только был создан, но еще не заполнен. Может, по команде Select просто ничего не было выбрано?

КонецЦикла
* а вот перебор элементов FOR i = 1 TO ALEN(m.loObject.aArray) не возможен: фокс ругается на
* размерность массива

Как ругается-то? Каким словами?

КонецЦиклавот я никак и не пойму, а чего в результате всех этих фрикций мне возвращает com-сервер :))
А в принципе, какой-либо объект из Com-сервера можно вернуть? Ну, например, тот же Custom с кучей свойств? Пусть эти свойства НЕ массивы.

В этом же примере можно, например, прочитать

Код: plaintext
?m.loObject.name

Что-то у меня сомнения, что такое возможно в принципе...


Кроме всего прочего, я не понимаю зачем это все надо? Ведь можно обратится напрямую к свойствам Com-сервера и прочитать все что надо:

метод sel_values() на com-сервере

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
* Создать свойство самого Com-сервера
This.AddProperty("aArray[1,1]")

SELECT *;
 FROM (m.tcTabName);
 WHERE INTO ARRAY This.aArray

RETURN _TALLY

Обращение к Com-серверу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PUBLIC ox
ox = CreateObject("prodazi")
if ox.sel_values()> 0 
	FOR m.lnI =  1  TO ALEN(m.ox.aArray)
		?m.ox.aArray[m.lnI]
	ENDFOR
endif
...
Рейтинг: 0 / 0
21.06.2007, 12:03
    #34610221
Вернуть массив из com-сервера
разобрался, действительно селект просто ничего не отбирал...
но ругается вот на что
alen(loObject.aArray)

Function argument value,type,or count is invalid

не пойму, чем функция alen() не нравиться фоксу (VFP6)

а вот обратиться к элементам по индексам даёт, т.е. loObject.aArray(1,1), loObject.aArray(1,2) заполнены нужными значениями....

ЗЫ. действительно, сделаю-ка напрямую..... Спасибо за наводку.
...
Рейтинг: 0 / 0
21.06.2007, 12:17
    #34610289
Вернуть массив из com-сервера
2 ВладимирМ

сделал так
Код: plaintext
1.
2.
3.
4.
5.
if ox.sel_values()> 0 
    FOR m.lnI =  1  TO ALEN(m.ox.aArray)
        ?m.ox.aArray[m.lnI]
    ENDFOR
endif

опять сначала 6-ой фокс ругается на ALEN(m.ox.aArray)
Function argument value,type,or count is invalid

ставлю FOR m.lnI = 1 TO 10
ругается уже по-другому
OLE error code.....:Неизвестное имя
...
Рейтинг: 0 / 0
21.06.2007, 12:26
    #34610337
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть массив из com-сервера
КонецЦикларугается уже по-другому
OLE error code.....:Неизвестное имя
Так свойство-то создал? Точнее, существует ли это свойство в момент обращения к нему?

Думаю, здесь проблема в том, что Com-объект - это все-таки внешний объект. А функция ALEN() предполагает работу с некоторой внутренней структурой именно среды FoxPro.

Т.е. FoxPro просто не может "перевести" структуру внешнего объекта под свои потребности. С его точки зрения, это действительно некорректный аргумент функции. Т.е. аргумент, неизвестной структуры. Ведь структура известна только самому объекту, но не среде FoxPro.

Хотя, это только мои предположения. Точно не уверен...
...
Рейтинг: 0 / 0
21.06.2007, 13:01
    #34610543
Вернуть массив из com-сервера
с "Неизвестным именем" похоже вот в чём дело:

при таком создании нового свойства This.AddProperty("aArray[1,1]")
появляется OLE error code.....:Неизвестное имя

а вот если в самом прокте добавить свойство aArray[1,1], и потом скомпилировать, то такого сообщения нет....
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вернуть массив из com-сервера / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]