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

Код: plaintext
1.
2.
3.
4.
5.
6.
DIMENSION my_year[ 12 ] 
god= 1 
FOR i= 1999  TO  2010  STEP  1 
my_year(god)=i
god=god+ 1 
ENDFOR

Код: plaintext
vartype(my_year(i)) 
возвращает N, всё нормально
Далее из комбо выбираю значение, которое потом надо использовать в запросе, но дело в том, что
теперь
Код: plaintext
vartype(thisform.combo1.value)
возвращает С,а
Код: plaintext
len(thisform.combo1.value)
возвращает 10 (добавляются пробелы). Не могу понять в чем причина.
помогите пожалуйста
...
Рейтинг: 0 / 0
сомбо и тип данных
    #34996434
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любая колонка combo может содержать только текст.
Combo.value может возвращать содержимое колонки в виде текста, если в ControlSource текстовое поле, или номер элемента списка в виде числа, если в ControlSource числовое поле.
Если Вас устроит:
В combo1.rowsourcetype=0
Код: plaintext
1.
2.
3.
LOCAL lnI
FOR lni= 1  TO  12 
THISform.combo1.ADDLISTITEM(ALLTRIM(STR(lni+ 1998 )))
ENDFOR

Если в запросе нужен год в числовом виде, используйте:
Код: plaintext
val(thisform.combo1.value)
...
Рейтинг: 0 / 0
сомбо и тип данных
    #34996435
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Combo работает со строками и твой массив преобразовывается в строки. Не надо никаких массивов. Все делается проще:
Код: plaintext
1.
2.
3.
PROC Combo.Init()
FOR i= 1999  TO  2010 
     This.AddItem(str(i,  4 ))
ENDFOR

А когда читаешь преобразуй обратно в число:
Код: plaintext
val(thisform.combo1.value)
...
Рейтинг: 0 / 0
сомбо и тип данных
    #34996533
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дизайнере или программно сделай настройку

Код: plaintext
Combo.BoundTo = .T.

И ничего переписывать не надо.

Хотя с массивом будут проблемы из-за его области видимости. Надо создавать не переменную памяти массив, а свойство формы типа массив. Признаком того, что свойство формы это массив, является указание размерности.
...
Рейтинг: 0 / 0
сомбо и тип данных
    #34996868
VetAnd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем большое, с этим разобрался. сделал так как посоветовал Dima_T.
Что касается добавления свойства, то не хотелось бы его использовать.
Дело в том, что пишу app-шник для приложения, проверить его работу могу только в самом приложении (форму потом сохраню как класс), хотелось бы использовать как можно меньше свойств и методов, т.к. отловить ошибки в готовой программе для меня проблематично. То что работает в среде разработки может не работать в приложении. Вобщем умею мало.
НО опять же к массивам. Для выбора месяца в комбо сделал такой массив(возвращать надо номер месяца

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DIMENSION my_month[ 12 , 2 ] 
my_month[ 1 , 1 ]="Январь"
my_month[ 1 , 2 ]= 1 
my_month[ 2 , 1 ]="февраль"
my_month[ 2 , 2 ]= 2 
my_month[ 3 , 1 ]="Март"
my_month[ 3 , 2 ]= 3 
...
my_month[ 12 , 1 ]="Декабрь"
my_month[ 12 , 2 ]= 12 

При выборе:

Код: plaintext
1.
my_month_s=my_month(ASCAN(my_month,thisform.combo1.value)+ 1 )

Нутром чую, что такой подход не очень, просто в будующем придется использовать данные, где не 12 значений, а намного больше. Как поступить?
PS Прошу простить за глупые вопросы.
...
Рейтинг: 0 / 0
сомбо и тип данных
    #34997292
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VetAndДля выбора месяца в комбо сделал такой массив(возвращать надо номер месяца
ThisForm.Combo1.ListItemID - возвращает номер выбранного элемента. Месяцы заполни через AddItem()

VetAndНутром чую, что такой подход не очень, просто в будующем придется использовать данные, где не 12 значений, а намного больше. Как поступить?
PS Прошу простить за глупые вопросы.
Если намного больше - осваивай грид. В комбо из большого кол-ва выбирать не удобно.

В более сложных случаях удобней курсоры использовать:
Код: plaintext
1.
2.
3.
4.
5.
6.
create cursor combodata (nItem i, cText c( 20 ))
for i =  100  to  1  step - 1 
	insert into combodata (nItem, cText) values (i, "Запись " + str(i,  3 ))
endfor
this.Style =  2 
this.RowSourceType =  2 
this.RowSource = 'combodata.cText'

Получать значение так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
if !ThisForm.Combo1.Value == combodata.cText
	sele combodata
	locate for cText = ThisForm.Combo1.Value
endif
if ThisForm.Combo1.Value == combodata.cText
	MessageBox('Выбрана запись  ' + str(combodata.nItem,  3 ))
else
	MessageBox('Ничего не выбрано')
endif

При этом еще один существенный момент - форма желательно должна быть с PrivateDataSession - Form.DataSession = 2
иначе сложно уследить чтобы курсоры на разных формах не пересеклись или если одна форма дважды будет запущена.
...
Рейтинг: 0 / 0
сомбо и тип данных
    #34997395
VetAnd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Dima T , еще раз большое спасибо. Переделал всё через курсоры, в моем слечае это представляется оптимальным вариантом, от массивов отказался(неудобно).
Успехов.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / сомбо и тип данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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