powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
22 сообщений из 22, страница 1 из 1
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012381
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!

Прошу сразу не бить, т.к. почитал найденное поиском на форуме и статьи по фоксу, но вопросы тем не менее остались...
Т.к. с фоксом приходилось сталкиваться считанные разы, то память меня услужливо подводит и хочу попросить вашей помощи либо советов.
Разбираясь с чужой программкой, понял, что многое подзабыл.


DEFINE CLASS A2FORM AS Session OLEPUBLIC
nForm_Cnt = 0

PROCEDURE Export_Data(toForm AS Object) LOCAL lnFields, lni PRIVATE lcValue AS Variant

This.nForm_Cnt = This.nFORM_CNT+1
lnFields = toForm.GetFldCnt()
IF lnFields >0
LOCAL ARRAY laFields[lnFields] as Variant
COMARRAY(toForm,10)
laFields = 'None'
toForm.GetFldsNms(@laFields) &&

FOR lni = 1 TO lnFields
lcValue = .F.
toForm.GetFldByInd(lni,@lcValue) &&
ENDFOR
ENDIF
ENDPROC
ENDDEFINE



В частности, обязательно ли нужно инициализировать массивы? Нафига например laFields сначала проинициализировали 'None'?
lcValue у нас заявлена как Variant, а ниже она инициализируется .F. :(
Собственно, проблема то какая - автомэйшн метод GetFldsNms по замыслу должен возвращать некий массив aFields, а он его не возвращает. Соответсвенно, не возвращается значение lcValue...
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012424
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И вот еще вдогонку - зачем эти собачки используются перед переменными когда они используются в качестве аргумента?

...
@laFields
...
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012597
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зачем - это Вы спросите у того, кто
придумывал метод GetFldsNms

а собачка- это затем, чтобы как раз заслать массив
и вернуть назад


не возвращает - быть не могет
set step on
и смотрите

почитайте еще SET UDFPARMS
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012618
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я то знаю, что изначально lcValue и laFields инициализировать не нужно, но может это такая специфика фокса, что он без инициализации жить не может?

авторlcValue у нас заявлена как Variant, а ниже она инициализируется .F.

а такое вообще возможно?
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012633
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SibirjakВ частности, обязательно ли нужно инициализировать массивы?
Нет. Не обязательно.

SibirjakНафига например laFields сначала проинициализировали 'None'?
Если массив не инициализировать, то все его элементы, по умолчанию, будут иметь значение .F.

SibirjaklcValue у нас заявлена как Variant, а ниже она инициализируется .F.
На самом деле, вообще все переменные FoxPro имеют тип Variant. Это означает, что любая переменная памяти может иметь любой тип данных. Более того, она может в любой момент изменить свой собственный тип:

Код: plaintext
1.
2.
3.
4.
aa =  1 
?TYPE("m.aa")
aa = STR(m.aa)
?TYPE("m.aa")

Использование опции AS Variant не имеет никакого отношения к определению типа переменной. Это "фишка" режима отладки приложения. Так реализуется механизм раннего связывания в FoxPro, чтобы можно было увидеть набор свойств и методов определенного объекта. Это "симуляция" строгой типизации в FoxPro. Хотя в таком синтаксисе особого смысла не имеет.

Sibirjakзачем эти собачки используются перед переменными когда они используются в качестве аргумента?
Они обозначают, что передача параметра идет по сылке, а не по значению.

Если такой собачки нет, то по умолчанию, передача параметров в функцию (метод) осуществляется по значению, а в процедуры по ссылке. Впрочем, это может регулироваться глобальной настройкой SET UDFPARMS
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012810
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Владимир!

Вот такой еще вопрос:

Если массив не инициализировать, то все его элементы, по умолчанию, будут иметь значение .F.

это чем-то плохо? Если мне без разницы, что там по умолчанию...
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012837
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый сибиряк

поставьте перед методом

set step on

запусстите программу
когда она дойдет до сет степа - вывалится дебужер
войдите в метод и постепте

в окошко вочь затяните ваш массив
и параметр, который объеявлен в методе

постепте код
и посмотрите, что у Вас изменяется
в окошке вочь

и тогда, Вы поймете, что и к чему.
только Вы и только Вы при наличии у Вас этого кода
можете разобраться что там или чего


там легко может быть ассайн метод на свойтво nForm_Cnt
да все, что угодно, все зависит от фантазии разработчика

Сет степ Вам поможет.
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012956
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex, спасибо за рекомендацию!

Однако данная программа представляет собой автомэйшн сервер, предназначенный для экспорта данных основного приложения.
Сет степ то я поставил, но при запуске функции экспорта основного приложения он не помогает, что то ничего не вываливается.
Вот тут то еще вопрос, как я могу посмотреть, чем инициализируется и инициализируется ли вообще массив laFields и переменная lcValue.
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012969
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишите лог
strtofile(.....,1)
расставляйте в разных местах
потом почитайте
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012972
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как в фоксе выглядит аналог MsgBox из VB. туда что вывести значения посмотреть...
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34012985
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sibirjakа как в фоксе выглядит аналог MsgBox из VB. туда что вывести значения посмотреть...
Код: plaintext
MESSAGEBOX(eMessageText [, nDialogBoxType ][, cTitleBarText][, nTimeout])
Но проще для отладки использовать WAIT:
Код: plaintext
1.
WAIT [cMessageText] [TO VarName] [WINDOW [AT nRow, nColumn]] [NOWAIT]
   [CLEAR | NOCLEAR] [TIMEOUT nSeconds]
Типа:
Код: plaintext
WAIT WINDOW "laFields[2]=" + CAST(laFields[ 2 ] AS V( 200 ))
С уважением, Алексей.
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34013035
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SibirjakВот такой еще вопрос:

Если массив не инициализировать, то все его элементы, по умолчанию, будут иметь значение .F.

это чем-то плохо? Если мне без разницы, что там по умолчанию...
Вообще-то, Вам лучше знать, что произойдет, если вместо символьного значения в элементе массива будет записано логическое значение. Сможет Ваша программа "разобрать" подобный массив. А получить массив, содержащий элементы разного типа сможет?
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34013082
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в фоксе индексация массивов начинается с 0 или 1?
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34013085
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как и в нормальном натуральном исчислении с 1.
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34013104
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, и , Aleksey-K, спасибо за рекомендацию по отладочному мэседж боксу :)
Вот он то мне и показывает, что , не смотря на то, что
toForm.GetFldsNms(@laFields)
должна возвращать laFields - массив значений (текстовых), путем их перебора после работы метода в отладочном окошке я увидел, что ни фига не возвращается, т.е. возвращается только 'None', которым был изначально проинициирован массив :( Но метод то рабочий, просто на фоксе ще не опробован...
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34013106
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так я это определил:

toForm.GetFieldsNames(@laFields)

FOR lni = 1 TO lnFields
WAIT WINDOW "laFields[2]=" + laFields [lni]
ENDFOR
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34013144
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящийКак и в нормальном натуральном исчислении с 1.

ну, ладно, мож не так выразился... вот в С первый элемент имеет 0 индекс.
я к тому, что:

FOR lni = 1 TO lnFields

не правильнее было бы заменить на

FOR lni = 0 TO lnFields-1

???
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34013245
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз повторяю - с 1. Без всяких извратов.
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34014604
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящийЕще раз повторяю - с 1. Без всяких извратов.

Ок, уяснил, пасиб! :)

Но такой вот еще вопрос, в нем то видимо сама соль топика-то и будет:
в начале обсуждения я привел пример программы, которая выступает в роли автомэйшн-сервера для основного приложения, т.е. использует его рабочие методы. Но, что-то видимо не то... Очевидно здесь виновата какая-то специфика фокса возникающая при написании подобных программ.
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34014768
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и где код GetFldsNms который по замыслу должен возвращать некий массив aFields, а он его не возвращает?
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34014859
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящийНу так и где код GetFldsNms который по замыслу должен возвращать некий массив aFields, а он его не возвращает?

Вообще, это методы программы, которая вызывает автомэйшн-сервер, написанный на фоксе.
Аналоги на VB и Дельфи работают без проблем...

Примерно так это выглядит на VB


Public Sub ExportMethod(ByVal fieldsObj As Object)
Dim fieldIndex As Integer
Dim fieldValue As Variant
Dim fieldsNames As Variant ' массив из fieldValue

fieldsObj.GetFldsNms fieldsNames

For fieldIndex = 0 To fieldsObj.GetFldsCnt - 1
fieldsObj.GetFldByInd fieldIndex, fieldValue ' где fieldValue - возвр-е знач-е
...
...

End Sub
...
Рейтинг: 0 / 0
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
    #34028417
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а что такое вообще это

авторnForm_Cnt

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


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