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

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

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

кодsomethingValue = Nothing

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

Поэтому ФАКТИЧЕСКИЙ тип переменной определяется при ее присвоении.
...
Рейтинг: 0 / 0
Чем по умолчанию инициализируются типы данных?
    #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
Чем по умолчанию инициализируются типы данных?
    #34030564
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы!

К сожаление, метод так и не хочет возвращать результат. Будет копаться дальше...
...
Рейтинг: 0 / 0
Чем по умолчанию инициализируются типы данных?
    #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
Чем по умолчанию инициализируются типы данных?
    #34031356
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
надо работать с типами данных полей курсоров

каким образом?
...
Рейтинг: 0 / 0
Чем по умолчанию инициализируются типы данных?
    #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
Чем по умолчанию инициализируются типы данных?
    #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
Чем по умолчанию инициализируются типы данных?
    #34031618
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot S866]
если ваш метод требует переменную в 20 символов то лучше определить ее так[quot]

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

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

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

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

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

вот что ему на вход подашь, то на выходе получишь.
...
Рейтинг: 0 / 0
Чем по умолчанию инициализируются типы данных?
    #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
Чем по умолчанию инициализируются типы данных?
    #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
Чем по умолчанию инициализируются типы данных?
    #34033374
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да return я позже вставил, без него тож не возвращается.
А вот насчет кода метода - буду писать в саппорт :))
...
Рейтинг: 0 / 0
Чем по умолчанию инициализируются типы данных?
    #34033501
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sibirjakда return я позже вставил, без него тож не возвращается.
А вот насчет кода метода - буду писать в саппорт :))
Как все "запущено" в очень простой программе

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

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

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

Код: plaintext
fldsObj.GetFldByName fldIndex, fieldValue

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

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

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

ну дык одно значение и возвращается - lcValue ...
А первый аргумент метод просто должен схавать...
Так Вы пробовали мой код или alex11100 ?
...
Рейтинг: 0 / 0
Чем по умолчанию инициализируются типы данных?
    #34034084
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sibirjakв VB этот метод используется так...
В FoxPro немного другой синтакс...
...
Рейтинг: 0 / 0
Чем по умолчанию инициализируются типы данных?
    #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
Чем по умолчанию инициализируются типы данных?
    #34034576
Sibirjak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch Sibirjak
Код: plaintext
toForm.GetFldByName ("City",@lcValue)

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

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

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

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


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