Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Чем по умолчанию инициализируются типы данных? / 25 сообщений из 26, страница 1 из 2
04.10.2006, 09:13
    #34030478
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
К сожалению, в найденной мною литературе я не нашел ответа на этот вопрос.
Зато опытно выяснил, что, к примеру String инициализируется как .F. - почему?
Я пишу на фоксе сервер для сторонней программы, которая вызывает собственные етоды описанные в созданном классе (в фоксе).
Примерно так:

код...
LOCAL somethingValue AS String
...
obj.GetSomethingByName ('Name', @somethingValue)
...

где GetSomethingByName собственный метод внешней программы. Передаю этому методу входное значение 'Name', а вот на выходе somethingValue вместо ожидаемого мною строкового значения выдает .F., т.е. то, чем она была инициализирована по умолчанию. Метод 100% рабочий, и у меня есть сомнения, может здесь как-то замешаны типы?
При программировании в .NET похожая проблема решалась таким образом:

кодsomethingValue = Nothing

а как можно поступить в Fox Pro ?
...
Рейтинг: 0 / 0
04.10.2006, 09:34
    #34030518
Andrey Ts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Скорее всего, вам не известно, что в Фоксе у переменных нет жесткого типа данных, т.е.
a=.F. - логическая
затем можно дать
a="my text" - теперь "а" стала строковая
затем а=34.2 - ну теперь число

Поэтому ФАКТИЧЕСКИЙ тип переменной определяется при ее присвоении.
...
Рейтинг: 0 / 0
04.10.2006, 09:40
    #34030534
Чем по умолчанию инициализируются типы данных?
SibirjakК сожалению, в найденной мною литературе я не нашел ответа на этот вопрос.
Зато опытно выяснил, что, к примеру String инициализируется как .F. - почему?
Я пишу на фоксе сервер для сторонней программы, которая вызывает собственные етоды описанные в созданном классе (в фоксе).
Примерно так:

код...
LOCAL somethingValue AS String
...
obj.GetSomethingByName ('Name', @somethingValue)
...

где GetSomethingByName собственный метод внешней программы. Передаю этому методу входное значение 'Name', а вот на выходе somethingValue вместо ожидаемого мною строкового значения выдает .F., т.е. то, чем она была инициализирована по умолчанию. Метод 100% рабочий, и у меня есть сомнения, может здесь как-то замешаны типы?
При программировании в .NET похожая проблема решалась таким образом:

кодsomethingValue = Nothing

а как можно поступить в Fox Pro ?
ВладимирМ тут недавно объяснял. Но повторю еще раз кратко:
1. ВСЕ ПЕРЕМЕННЫЕ в Фоксе имеют тип Variant, т.е. любая переменная в один момент времени может быть символьной, а в другой момент - числовой или логической (булевой).
2. Гарантировать, что переменная имеет именно тот тип, который нужен программисту, можно ТОЛЬКО явным присваиванием.

Т.е. для твоего случая необходимо написать примерно так:
Код: plaintext
1.
2.
3.
4.
5.
LOCAL somethingValue AS String
...
somethingValue="" &&Гарантирует, что somethingValue будет иметь тип String
obj.GetSomethingByName ('Name', @somethingValue)
...
...
Рейтинг: 0 / 0
04.10.2006, 09:49
    #34030564
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Спасибо за ответы!

К сожаление, метод так и не хочет возвращать результат. Будет копаться дальше...
...
Рейтинг: 0 / 0
04.10.2006, 09:52
    #34030574
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
авторVariant is a special data type that can contain any kind of data except fixed-length string data. Variant data can also be the special values Empty, Error, and NULL. This data type is used in extrinsic clients to Visual FoxPro applications because Visual FoxPro is not a strongly typed language .

Поэтому, надо явно присвоить

Код: plaintext
1.
LOCAL somethingValue AS String
somethingValue  = ''

что бы получить нужный тип инициализация должна пройти через явное присвоение

Код: plaintext
1.
2.
3.
PRIVATE aa as String 
aa = '' && без этого тип будет всегда L
aa = null
?TYPE('aa')

НО как уже сказал Andrey Ts переопределить переменную ничего не стоит, если это критично, то надо работать с типами данных полей курсоров.
...
Рейтинг: 0 / 0
04.10.2006, 13:08
    #34031356
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
надо работать с типами данных полей курсоров

каким образом?
...
Рейтинг: 0 / 0
04.10.2006, 13:26
    #34031458
S866
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
добавлю еще один момент который здесть упустили про переменные:

a='' не гарантирует что размер этой переменной например 20 символов

если ваш метод требует переменную в 20 символов то лучше определить ее так

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL somethingValue AS String

store space( 20 ) to somethingValue && somethingValue - стала  20  символов

...
obj.GetSomethingByName ('Name', @somethingValue)
...
...
Рейтинг: 0 / 0
04.10.2006, 13:33
    #34031499
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
DEFINE CLASS MeClass AS form OLEPUBLIC
Procedure init
create cursor test (f1 c(254), f2 i, f3 M)
append blank in test
endproc
Procedure GetName
return test.f1 && вернет символьное значение
endproc
ENDDEF
...
Рейтинг: 0 / 0
04.10.2006, 13:56
    #34031618
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
[quot S866]
если ваш метод требует переменную в 20 символов то лучше определить ее так[quot]

метод не требует, он возвращает, но в любом случае размер здесь не критичен
...
Рейтинг: 0 / 0
04.10.2006, 13:59
    #34031639
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
PaulWistDEFINE CLASS MeClass AS form OLEPUBLIC
...

все здорово, но только здесь вызывается собственный метод, а в моем случае используется внешний метод.
...
Рейтинг: 0 / 0
04.10.2006, 14:12
    #34031717
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Sibirjak PaulWistDEFINE CLASS MeClass AS form OLEPUBLIC
...

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

Ну определи в собственном методе фокс-обьекта принимаемый параметр

Код: plaintext
1.
2.
3.
procedure SomeMethod
LPARAMETERS Name
return Name
endproc 

вот что ему на вход подашь, то на выходе получишь.
...
Рейтинг: 0 / 0
04.10.2006, 15:07
    #34031991
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
DEFINE CLASS A2FORM AS session OLEPUBLIC

nForm_Cnt =  0 

PROCEDURE  Export_Data (toForm AS Object)
LOCAL lnFields as Integer
LPARAMETERS lcValue

This.nForm_Cnt = This.nFORM_CNT+ 1 

lnFields = toForm.GetFldsCnt() && тут внешний метод все возвращает
MESSAGEBOX(lnFields) 

lcValue=''
&&lcValue = null
toForm.GetFldByName ("City",@lcValue) && метод внешней программы

RETURN lcValue

MESSAGEBOX (lcValue) && а lcValue то и не возвращается!

ENDPROC
ENDDEFINE
...
Рейтинг: 0 / 0
04.10.2006, 16:18
    #34032377
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
lcValue=''
&&lcValue = null
toForm.GetFldByName ("City",@lcValue) && метод внешней программы

* Ну так давай код этого внешнего метода, твой класс-то тут причем

RETURN lcValue

* А сюда как lcValue попадет, если  выше стоит RETURN

MESSAGEBOX (lcValue) && а lcValue то и не возвращается!
...
Рейтинг: 0 / 0
05.10.2006, 07:44
    #34033374
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
да return я позже вставил, без него тож не возвращается.
А вот насчет кода метода - буду писать в саппорт :))
...
Рейтинг: 0 / 0
05.10.2006, 09:33
    #34033501
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Sibirjakда return я позже вставил, без него тож не возвращается.
А вот насчет кода метода - буду писать в саппорт :))
Как все "запущено" в очень простой программе

Никогда не делал так как пытаетесь Вы. Всегда писал стандартно как в Help:
Код: plaintext
1.
2.
3.
...
lcValue=toForm.GetFldByName ("City") && метод внешней программы
RETURN NVL(lcValue,'')
В FoxPro стандартно внешний метод может вернуть только одно значение...
...
Рейтинг: 0 / 0
05.10.2006, 09:47
    #34033528
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
????

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
loObject = createobject('tt')

local ln1,ln2,ln3,lnResult

? ln1
? ln2
? ln3


lnResult = loObject.SetValue(@ln1,@ln2,@ln3)

? ln1
? ln2
? ln3

?lnResult

DEFINE CLASS tt AS custom
	Name = "tt"

	PROCEDURE SetValue
		lparameters t1,t2,t3

		t1= 1 
		t2= 2 
		t3= 3 

		return  125 
	ENDPROC
ENDDEFINE



2Sibirjak. какой саппорт, Вы о чем?
...
Рейтинг: 0 / 0
05.10.2006, 10:04
    #34033586
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
авторВ FoxPro стандартно внешний метод может вернуть только одно значение...

Код: plaintext
toForm.GetFldByName ("City",@lcValue)

ну дык одно значение и возвращается - lcValue ...
А первый аргумент метод просто должен схавать...
...
Рейтинг: 0 / 0
05.10.2006, 10:13
    #34033618
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
в VB этот метод используется так:

Код: plaintext
fldsObj.GetFldByName fldIndex, fieldValue

fldIndex - передается в метод

fieldValue - возвращаемое значение

Я говорю, либо тут какие то неучтенные OLE-тонкости фокса, либо метод исходной программы по каким-то причинам не хочет работать именно с фоксом...
...
Рейтинг: 0 / 0
05.10.2006, 12:04
    #34034081
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Sibirjak
Код: plaintext
toForm.GetFldByName ("City",@lcValue)

ну дык одно значение и возвращается - lcValue ...
А первый аргумент метод просто должен схавать...
Так Вы пробовали мой код или alex11100 ?
...
Рейтинг: 0 / 0
05.10.2006, 12:05
    #34034084
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Sibirjakв VB этот метод используется так...
В FoxPro немного другой синтакс...
...
Рейтинг: 0 / 0
05.10.2006, 12:22
    #34034170
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
create cursor Test (ляля i,тополя i)
insert into test values ( 1 , 2 )

local lcAlias
lcAlias = 'Test'
? evaluate(lcAlias+'.ляля')
? evaluate(lcAlias+'.тополя')

SET MULTILOCKS ON 
= CURSORSETPROP("Buffering", 5 )  
? curval('ляля'  ,'Test')
? curval('тополя','Test')

local loObject
loObject = createobject('tt')
local ln1,ln2,ln3,lnResult

? loObject.GetValueWithCurVal(lcAlias,'ляля')
? loObject.GetValueWithCurVal(lcAlias,'тополя')

? loObject.GetValueWithEvaluate(lcAlias,'ляля')
? loObject.GetValueWithEvaluate(lcAlias,'тополя')

DEFINE CLASS tt AS custom
	Name = "tt"

	PROCEDURE GetValueWithCurVal
		lparameters tcAlias, tcFieldName
		return curval(tcFieldName,tcAlias)
	ENDPROC

	PROCEDURE GetValueWithEvaluate
		lparameters tcAlias, tcFieldName
		return evaluate(tcAlias+'.'+tcFieldName)
	ENDPROC

ENDDEFINE


2Sibirjak?

что здесь не так?? или нужно как в VB?
...
Рейтинг: 0 / 0
05.10.2006, 13:29
    #34034576
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Sergey Ch Sibirjak
Код: plaintext
toForm.GetFldByName ("City",@lcValue)

ну дык одно значение и возвращается - lcValue ...
А первый аргумент метод просто должен схавать...
Так Вы пробовали мой код или alex11100 ?

ваш
...
Рейтинг: 0 / 0
05.10.2006, 13:39
    #34034634
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
2alex11100

пардон, а где OLEPUBLIC?
...
Рейтинг: 0 / 0
05.10.2006, 14:01
    #34034748
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Sibirjak ваш
Работало?
...
Рейтинг: 0 / 0
05.10.2006, 14:02
    #34034751
Sibirjak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем по умолчанию инициализируются типы данных?
Sergey Ch Sibirjak ваш
Работало?

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


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