|
|
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Добрый день всем! Прошу сразу не бить, т.к. почитал найденное поиском на форуме и статьи по фоксу, но вопросы тем не менее остались... Т.к. с фоксом приходилось сталкиваться считанные разы, то память меня услужливо подводит и хочу попросить вашей помощи либо советов. Разбираясь с чужой программкой, понял, что многое подзабыл. 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... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 12:59 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
И вот еще вдогонку - зачем эти собачки используются перед переменными когда они используются в качестве аргумента? ... @laFields ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 13:10 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
зачем - это Вы спросите у того, кто придумывал метод GetFldsNms а собачка- это затем, чтобы как раз заслать массив и вернуть назад не возвращает - быть не могет set step on и смотрите почитайте еще SET UDFPARMS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 13:45 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
я то знаю, что изначально lcValue и laFields инициализировать не нужно, но может это такая специфика фокса, что он без инициализации жить не может? авторlcValue у нас заявлена как Variant, а ниже она инициализируется .F. а такое вообще возможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 13:50 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
SibirjakВ частности, обязательно ли нужно инициализировать массивы? Нет. Не обязательно. SibirjakНафига например laFields сначала проинициализировали 'None'? Если массив не инициализировать, то все его элементы, по умолчанию, будут иметь значение .F. SibirjaklcValue у нас заявлена как Variant, а ниже она инициализируется .F. На самом деле, вообще все переменные FoxPro имеют тип Variant. Это означает, что любая переменная памяти может иметь любой тип данных. Более того, она может в любой момент изменить свой собственный тип: Код: plaintext 1. 2. 3. 4. Использование опции AS Variant не имеет никакого отношения к определению типа переменной. Это "фишка" режима отладки приложения. Так реализуется механизм раннего связывания в FoxPro, чтобы можно было увидеть набор свойств и методов определенного объекта. Это "симуляция" строгой типизации в FoxPro. Хотя в таком синтаксисе особого смысла не имеет. Sibirjakзачем эти собачки используются перед переменными когда они используются в качестве аргумента? Они обозначают, что передача параметра идет по сылке, а не по значению. Если такой собачки нет, то по умолчанию, передача параметров в функцию (метод) осуществляется по значению, а в процедуры по ссылке. Впрочем, это может регулироваться глобальной настройкой SET UDFPARMS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 13:53 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Спасибо, Владимир! Вот такой еще вопрос: Если массив не инициализировать, то все его элементы, по умолчанию, будут иметь значение .F. это чем-то плохо? Если мне без разницы, что там по умолчанию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 14:32 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Уважаемый сибиряк поставьте перед методом set step on запусстите программу когда она дойдет до сет степа - вывалится дебужер войдите в метод и постепте в окошко вочь затяните ваш массив и параметр, который объеявлен в методе постепте код и посмотрите, что у Вас изменяется в окошке вочь и тогда, Вы поймете, что и к чему. только Вы и только Вы при наличии у Вас этого кода можете разобраться что там или чего там легко может быть ассайн метод на свойтво nForm_Cnt да все, что угодно, все зависит от фантазии разработчика Сет степ Вам поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 14:40 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
alex, спасибо за рекомендацию! Однако данная программа представляет собой автомэйшн сервер, предназначенный для экспорта данных основного приложения. Сет степ то я поставил, но при запуске функции экспорта основного приложения он не помогает, что то ничего не вываливается. Вот тут то еще вопрос, как я могу посмотреть, чем инициализируется и инициализируется ли вообще массив laFields и переменная lcValue. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:09 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
пишите лог strtofile(.....,1) расставляйте в разных местах потом почитайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:12 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
а как в фоксе выглядит аналог MsgBox из VB. туда что вывести значения посмотреть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:13 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Sibirjakа как в фоксе выглядит аналог MsgBox из VB. туда что вывести значения посмотреть... Код: plaintext Код: plaintext 1. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:17 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
SibirjakВот такой еще вопрос: Если массив не инициализировать, то все его элементы, по умолчанию, будут иметь значение .F. это чем-то плохо? Если мне без разницы, что там по умолчанию... Вообще-то, Вам лучше знать, что произойдет, если вместо символьного значения в элементе массива будет записано логическое значение. Сможет Ваша программа "разобрать" подобный массив. А получить массив, содержащий элементы разного типа сможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:30 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
А в фоксе индексация массивов начинается с 0 или 1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:43 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Как и в нормальном натуральном исчислении с 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:44 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Да, и , Aleksey-K, спасибо за рекомендацию по отладочному мэседж боксу :) Вот он то мне и показывает, что , не смотря на то, что toForm.GetFldsNms(@laFields) должна возвращать laFields - массив значений (текстовых), путем их перебора после работы метода в отладочном окошке я увидел, что ни фига не возвращается, т.е. возвращается только 'None', которым был изначально проинициирован массив :( Но метод то рабочий, просто на фоксе ще не опробован... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:50 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Вот так я это определил: toForm.GetFieldsNames(@laFields) FOR lni = 1 TO lnFields WAIT WINDOW "laFields[2]=" + laFields [lni] ENDFOR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:51 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
проходящийКак и в нормальном натуральном исчислении с 1. ну, ладно, мож не так выразился... вот в С первый элемент имеет 0 индекс. я к тому, что: FOR lni = 1 TO lnFields не правильнее было бы заменить на FOR lni = 0 TO lnFields-1 ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 15:57 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Еще раз повторяю - с 1. Без всяких извратов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 16:19 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
проходящийЕще раз повторяю - с 1. Без всяких извратов. Ок, уяснил, пасиб! :) Но такой вот еще вопрос, в нем то видимо сама соль топика-то и будет: в начале обсуждения я привел пример программы, которая выступает в роли автомэйшн-сервера для основного приложения, т.е. использует его рабочие методы. Но, что-то видимо не то... Очевидно здесь виновата какая-то специфика фокса возникающая при написании подобных программ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 10:16 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
Ну так и где код GetFldsNms который по замыслу должен возвращать некий массив aFields, а он его не возвращает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 10:48 |
|
||
|
Вопросы простые, но требуют разъяснения - типы данных, массивы, OLE...
|
|||
|---|---|---|---|
|
#18+
проходящийНу так и где код 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 11:06 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=232&tid=1590653]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 337ms |

| 0 / 0 |
