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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
IF !EMPTY(m.vNewVal)
	ATAGINFO(arTag,vNewVal)
	FOR i = 1  TO ALEN(arTag, 1 )	
		IF arTag[i, 2 ]=='PRIMARY'
			this.cmaintag = arTag[i, 3 ]
			exit
		endif
	endfor
endif
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34616541
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересный подход. На каком основании и какой размерности надо создавать массив? С какой областью видимости? И почему именно массив? А может это функция с двумя парамерами?Таблицы, как я понимаю, тоже должны автоматически создаваться? А еще лучше чтоб программы послностью сами создавались.
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34616564
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov.Интересный подход. На каком основании и какой размерности надо создавать массив? С какой областью видимости? И почему именно массив? А может это функция с двумя парамерами?Таблицы, как я понимаю, тоже должны автоматически создаваться? А еще лучше чтоб программы послностью сами создавались.

Нет ну с переменными такое проканывает... Тем более что если выполнить в коммандном окне момманду:
Код: plaintext
	ADATABASES(gaDatabase)
фокс благополучно создает двумерный массив...
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34616603
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Help почитать по функции ATAGINFO() - религия не позволяет? Что будет, если указанной рабочей области не существует? А если нет индексов?

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE CURSOR test (f1 I)
?ATAGINFO(aaa)
?TYPE("aaa[1]")
INDEX ON f1 TAG f1
?ATAGINFO(aaa)
?TYPE("aaa[1]")

Кроме того, обратите внимание ЧТО возвращает эта функция. Может, лучше писать так:

Код: plaintext
1.
2.
3.
4.
5.
IF !EMPTY(m.vNewVal)
	FOR m.lnI= 1  TO ATAGINFO(arTag,vNewVal)
		...
	ENDFOR
ENDIF
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34616622
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странная логика. Функция как раз и создана для заполнения массива известным этой функции количеством информации. Потому она и может создать нужный масси при его отсутствии. И речь идет не о невозможности создать массив, а не определенности момента, когда его нужно создавать и неопределенности размеров такого массива.

В любом случае непонятна цель данного топика. Ведь такое поведение в фоксе от его рождения и вроде бы такое поведение всегда считалось вполне нормальным и логичным. Так то хотелось в итоге? Изменения поведения фокса? На каком основании?
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34616691
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov.Странная логика... В любом случае непонятна цель данного топика...

В том, чтобы разобраться и решить проблему...

А проблема в том, что по аналогии с функцией
Код: plaintext
ADATABASES(gaDatabase)
где gaDatabase - так же заренее не определено, то фокс имеет представление куда "помещать созданный массив", а в
Код: plaintext
ATAGINFO
- не имеет...

А вот на счет хелпа:

Creates an array that contains information about index files for the selected table.
ATAGINFO(ArrayName [,cCDXName [, nWorkArea | cTableAlias]])
Parameters
ArrayName
Specifies the name of the array to create. Visual FoxPro creates the array if it does not already exist.
(Конкретизирует имя массива для создания. ВФП создаст массив если такового не имеется).
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34616732
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
splaynА вот на счет хелпа:

Creates an array that contains information about index files for the selected table.
ATAGINFO(ArrayName [,cCDXName [, nWorkArea | cTableAlias]])
Parameters
ArrayName
Specifies the name of the array to create. Visual FoxPro creates the array if it does not already exist.
(Конкретизирует имя массива для создания. ВФП создаст массив если такового не имеется).
Как Вы думаете, если у таблицы НЕТ индексов, то какая размерность должна быть у создаваемого массива? А FoxPro поддерживает ТАКИЕ массивы? Имеет ли смысл в этом случае пытаться что-то создать? Вы не пробовали запустить тестовый пример приведенный мною чуть выше?
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34616756
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ splaynА вот на счет хелпа:

Creates an array that contains information about index files for the selected table.
ATAGINFO(ArrayName [,cCDXName [, nWorkArea | cTableAlias]])
Parameters
ArrayName
Specifies the name of the array to create. Visual FoxPro creates the array if it does not already exist.
(Конкретизирует имя массива для создания. ВФП создаст массив если такового не имеется).
Как Вы думаете, если у таблицы НЕТ индексов, то какая размерность должна быть у создаваемого массива? А FoxPro поддерживает ТАКИЕ массивы? Имеет ли смысл в этом случае пытаться что-то создать? Вы не пробовали запустить тестовый пример приведенный мною чуть выше?
с этим все понятно, но это не решает проблемы это недочет...
Код: plaintext
IF !EMPTY(m.vNewVal) AND USED(m.vNewVal) AND TAGCOUNT(m.vNewVal)> 0 
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34616952
kolobok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а попробуйте выполнить
CREATE TABLE ww(qq i)
LOCAL vNewVal
m.vnewval = 'ww'
INDEX on qq TAG qq
ATAGINFO(arTag,vNewVal)
?ALEN(arTag)
?arTag[1,1]

у меня в 8\9 на ура.
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34617061
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolobokа попробуйте выполнить
CREATE TABLE ww(qq i)
LOCAL vNewVal
m.vnewval = 'ww'
INDEX on qq TAG qq
ATAGINFO(arTag,vNewVal)
?ALEN(arTag)
?arTag[1,1]

у меня в 8\9 на ура.

спасибо выполняется...
а я придумал вот что:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF !EMPTY(m.vNewVal) AND USED(m.vNewVal) AND TAGCOUNT(m.vNewVal)> 0 
	LOCAL array arTag( 1 , 1 )
	ATAGINFO(m.arTag,m.vNewVal)
	FOR i = 1  TO ALEN(m.arTag, 1 )	
		IF m.arTag[i, 2 ]=='PRIMARY'
			this.cmaintag = m.arTag[i, 3 ]
			exit
		endif
	endfor
endif
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34617671
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
splaynа я придумал вот что:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF !EMPTY(m.vNewVal) AND USED(m.vNewVal) AND TAGCOUNT(m.vNewVal)> 0 
	LOCAL array arTag( 1 , 1 )
	ATAGINFO(m.arTag,m.vNewVal)
	FOR i = 1  TO ALEN(m.arTag, 1 )	
		IF m.arTag[i, 2 ]=='PRIMARY'
			this.cmaintag = m.arTag[i, 3 ]
			exit
		endif
	endfor
endif

Извините, конечно, но Вы вообще-то читали, то что я Вам приводил в качестве примера в самом начале?

ATAGINFO() возвращает количество строк в создаваемом массиве. Из этого следует, что если Вы хотите убедится, что массив вообще был создан НАДО ПРОВЕРИТЬ (!) что вернет эта функция.

Цикл FOR...ENDFOR выполняет свою работу до тех пор, пока значение счетчика не превысит максимально допустимого значения указанного в опции TO.

Если ATAGINFO() не смог создать массив, то он вернет значение 0. Начальное значение счетчика цикла равно 1. В случае, если массив не был создан, получим, что начальное значение счетчика цикла больше конечного значения. Т.е. цикл не выполнится ни разу.

В результате, имеем такую логику

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF !EMPTY(m.vNewVal) AND USED(m.vNewVal) 
	LOCAL array arTag( 1 , 1 )
	FOR i = 1  TO ATAGINFO(m.arTag,m.vNewVal)	
		IF m.arTag[i, 2 ]=='PRIMARY'
			this.cmaintag = m.arTag[i, 3 ]
			exit
		endif
	endfor
endif

Хотя, вообще-то, существуют еще такие функции, как ASCAN() и PRIMARY().
...
Рейтинг: 0 / 0
Ошибка при создании массива...
    #34618350
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ splaynа я придумал вот что:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF !EMPTY(m.vNewVal) AND USED(m.vNewVal) AND TAGCOUNT(m.vNewVal)> 0 
	LOCAL array arTag( 1 , 1 )
	ATAGINFO(m.arTag,m.vNewVal)
	FOR i = 1  TO ALEN(m.arTag, 1 )	
		IF m.arTag[i, 2 ]=='PRIMARY'
			this.cmaintag = m.arTag[i, 3 ]
			exit
		endif
	endfor
endif

Извините, конечно, но Вы вообще-то читали, то что я Вам приводил в качестве примера в самом начале?

ATAGINFO() возвращает количество строк в создаваемом массиве. Из этого следует, что если Вы хотите убедится, что массив вообще был создан НАДО ПРОВЕРИТЬ (!) что вернет эта функция.

Цикл FOR...ENDFOR выполняет свою работу до тех пор, пока значение счетчика не превысит максимально допустимого значения указанного в опции TO.

Если ATAGINFO() не смог создать массив, то он вернет значение 0. Начальное значение счетчика цикла равно 1. В случае, если массив не был создан, получим, что начальное значение счетчика цикла больше конечного значения. Т.е. цикл не выполнится ни разу.

В результате, имеем такую логику

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF !EMPTY(m.vNewVal) AND USED(m.vNewVal) 
	LOCAL array arTag( 1 , 1 )
	FOR i = 1  TO ATAGINFO(m.arTag,m.vNewVal)	
		IF m.arTag[i, 2 ]=='PRIMARY'
			this.cmaintag = m.arTag[i, 3 ]
			exit
		endif
	endfor
endif

Хотя, вообще-то, существуют еще такие функции, как ASCAN() и PRIMARY().

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


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