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

Задача такова:
Существует aa.dbf a(c)16,n(c)100,e(c)5,c(n)10 сформированная из файла EXCEL где а - поле содержащее артиклы.В этой базе по порядку вписаны каталог(с артиклом) далее идут подкаталоги между которыми заключен список товаров , далее опять идет каталог и т. д.
Есть еще одна база содержащая только каталоги и подкаталоги в том же порядке что и в первой базе - podkat kat(c)16, pk(c)16, naz(100)c далее показываю расположение записей:
.kat...\....pk.........\...naz

3.......\................\ СУВЕНИРЫ, ИГРЫ (каталог)
3.......\.....0422.....\Слоны (подкаталог)
3.......\.....0423.....\Фоторамки (подкаталог)
4.......\.................\МЕТАЛЛ,АКСЕССУАРЫ,МЕБЕЛЬ (каталог)
4.......\...04002.....\мавмамкамка
4.......\...5401.......\нннн
4.......\..12*99......\ееееее
...

Нужно записать в базу Tovar.dbf kat(c)16, pk(c)16, atov(c)16, naz(c)100 в таком порядке:
..kat..\...pk....\....atov....\....naz

..3.....\..........\...............\ КАТАЛОГ
..3.....\...0422.\...............\ Подкаталог
..3.....\...0422.\....074343. \ первое наименование товара
...

Ниже приважу код , относящийся к кнопке в единственной формы в проекте. Жирным выделил строки формирующие новую запись в файл.
Не могу понять в чем причина? Может типы не соблюдены, может прогу не так написал, но получается не то - что надо !!!?????????????????


USE c:\assortiment\bd\data\podkat.dbf

PUBLIC recpodkat ,bazaaa,recaa,zapis,bazapodkat,;
katalog as Character ,podkatalog as Character ,nazvanie as Character ,i,i1

PUBLIC aaa as Character ,aan as Character

DIMENSION mpodkat(RECCOUNT(),2) as Character
COPY TO ARRAY mpodkat





USE c:\assortiment\bd\data\aa.dbf
recaa=RECCOUNT()

***
FOR bazaaa=1 TO recaa STEP 1
USE c:\assortiment\bd\data\aa.dbf
GO bazaaa
aaa=alltrim(aa.a)
aan=ALLTRIM(aa.n)

zapis=0
FOR bazapodkat=1 TO recpodkat STEP 1
IF aaa=ALLTRIM(mpodkat(bazapodkat,1)) AND empty(ALLTRIM(mpodkat(bazapodkat,2)))
katalog=aaa
zapis=1
endif
IF aaa=ALLTRIM(mpodkat(bazapodkat,2)) AND ALLTRIM(mpodkat(bazapodkat,1))=katalog
podkatalog=aaa
zapis=2
endif
ENDFOR

nazvanie=ALLTRIM(aa.n)

USE c:\assortiment\bd\data\tovar.dbf
WAIT bazaaa WINDOW NOWAIT
APPEND blank

IF zapis=0

replace tovar.kat WITH katalog
replace tovar.pk WITH podkatalog
replace tovar.naz WITH nazvanie
replace tovar.atov WITH aaa
else
IF zapis=1
replace tovar.naz WITH nazvanie
replace tovar.kat WITH katalog

ENDIF
IF zapis=2
replace tovar.naz WITH nazvanie
replace tovar.kat WITH katalog
replace tovar.pk WITH podkatalog

endif
endif


ENDFOR
WAIT
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35356591
Romario_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сдесь выкладываю архив с базами в том числе и прайс в aa.dbf
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35356930
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
PUBLIC recpodkat ... 

создалась переменная c логическим значением, т.е. recpodkat = .F.

Код: plaintext
for bazapodkat= 1  to recpodkat step  1 
тут ты ее в цикл подсовываешь, значение должно быть числовое, а у тебя логическое поэтому и ошибка "Not a numeric expression."

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

Думаю тебе надо для начала примеры из книжек поразбирать, разобраться как в фоксе с данными работать, как отладчиком пользоваться, а потом уж что-то писать.
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35356999
Romario_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощ.

DIMENSION mpodkat(RECCOUNT(),2) as Character
COPY TO ARRAY mpodkat

разве массив не текстового типа ?
Если нет, подскажа как его сделать в формате для сравнения с артиклами "45*66" текстового типа.
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35357027
Romario_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Dima T]
Код: plaintext
PUBLIC recpodkat ... 

создалась переменная c логическим значением, т.е. recpodkat = .F.


---------------------------------
recpodkat=RECCOUNT()
Разве не записывает количество записей в базе podkat.dbf !!!??????????????
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35357048
Romario_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
USE c:\assortiment\bd\data\podkat.dbf

PUBLIC recpodkat as Number ,bazaaa,recaa,zapis,bazapodkat,;
katalog as Character ,podkatalog as Character ,nazvanie as Character ,i,i1

PUBLIC aaa as Character ,aan as Character

DIMENSION mpodkat(RECCOUNT(),2) as Character
COPY TO ARRAY mpodkat

* zapis =0

recpodkat=RECCOUNT()
*FOR i=1 TO 2
*FOR i1=1 TO recpodkat
*mpodkat(i1,i)=""
*ENDFOR
*ENDFOR
*COPY TO ARRAY mpodkat




USE c:\assortiment\bd\data\aa.dbf
recaa=RECCOUNT()

***
FOR bazaaa=1 TO recaa STEP 1
USE c:\assortiment\bd\data\aa.dbf
GO bazaaa
aaa=alltrim(aa.a)
aan=ALLTRIM(aa.n)

zapis=0
FOR bazapodkat=1 TO recpodkat STEP 1
IF aaa=ALLTRIM(mpodkat(bazapodkat,1)) AND empty(ALLTRIM(mpodkat(bazapodkat,2)))
katalog=aaa
zapis=1
endif
IF aaa=ALLTRIM(mpodkat(bazapodkat,2)) AND ALLTRIM(mpodkat(bazapodkat,1))=katalog
podkatalog=aaa
zapis=2
endif
ENDFOR

*cena=ALLTRIM(podkat.pk)
nazvanie=ALLTRIM(aa.n)

USE c:\assortiment\bd\data\tovar.dbf
WAIT bazaaa WINDOW NOWAIT
APPEND blank

IF zapis=0

***replace tovar.kat WITH katalog
replace tovar.pk WITH podkatalog
replace tovar.naz WITH nazvanie
replace tovar.atov WITH aaa
else
IF zapis=1
replace tovar.naz WITH nazvanie
replace tovar.kat WITH katalog
*zapis=0
ENDIF
IF zapis=2
replace tovar.naz WITH nazvanie
replace tovar.kat WITH katalog
replace tovar.pk WITH podkatalog
*zapis=0
endif
endif

ENDFOR
WAIT
***ENDDO
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35357051
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romario_rusDIMENSION mpodkat(RECCOUNT(),2) as Character
После этого все элементы имеют значение .F.
в фоксе нельзя жестко задать тип переменной или элемента массива.
as Character введено только для работы IntelliSence подсказок при написании кода, при работе проги это игнорируется.

Romario_rusCOPY TO ARRAY mpodkat
А после этого каждый элемент имеет тот тип, который был у поля туда сопированного.

PS Массивы тут вовсе не нужны, они почти никогда не нужны, разве что кроме очень малого круга чисто алгоритмических задач. Для решения твоей задачи есть более удобные и мощные средства.
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35357053
Romario_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин. В торопях напутал...
Вот вариант на данный момент - и всеравно бред.


USE c:\assortiment\bd\data\podkat.dbf

PUBLIC recpodkat as Number ,bazaaa,recaa,zapis,bazapodkat,;
katalog as Character ,podkatalog as Character ,nazvanie as Character ,i,i1

PUBLIC aaa as Character ,aan as Character

DIMENSION mpodkat(RECCOUNT(),2) as Character
COPY TO ARRAY mpodkat

* zapis =0

recpodkat=RECCOUNT()
*FOR i=1 TO 2
*FOR i1=1 TO recpodkat
*mpodkat(i1,i)=""
*ENDFOR
*ENDFOR
*COPY TO ARRAY mpodkat




USE c:\assortiment\bd\data\aa.dbf
recaa=RECCOUNT()

***
FOR bazaaa=1 TO recaa STEP 1
USE c:\assortiment\bd\data\aa.dbf
GO bazaaa
aaa=alltrim(aa.a)
aan=ALLTRIM(aa.n)

zapis=0
FOR bazapodkat=1 TO recpodkat STEP 1
IF aaa=ALLTRIM(mpodkat(bazapodkat,1)) AND empty(ALLTRIM(mpodkat(bazapodkat,2)))
katalog=aaa
zapis=1
endif
IF aaa=ALLTRIM(mpodkat(bazapodkat,2)) AND ALLTRIM(mpodkat(bazapodkat,1))=katalog
podkatalog=aaa
zapis=2
endif
ENDFOR

*cena=ALLTRIM(podkat.pk)
nazvanie=ALLTRIM(aa.n)

USE c:\assortiment\bd\data\tovar.dbf
WAIT bazaaa WINDOW NOWAIT
APPEND blank

IF zapis=0

replace tovar.kat WITH katalog
replace tovar.pk WITH podkatalog
replace tovar.naz WITH nazvanie
replace tovar.atov WITH aaa
else
IF zapis=1
replace tovar.naz WITH nazvanie
replace tovar.kat WITH katalog
*zapis=0
ENDIF
IF zapis=2
replace tovar.naz WITH nazvanie
replace tovar.kat WITH katalog
replace tovar.pk WITH podkatalog
*zapis=0
endif
endif

ENDFOR
WAIT
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35357071
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romario_rus...
recpodkat=RECCOUNT()
Разве не записывает количество записей в базе podkat.dbf !!!??????????????

А где эта строка в коде из первого поста

Извини, но больше отвечать не буду, нет ни времени ни желания писать вводный курс программирования на фоксе. Для этого есть книги где все вопросы разжеваны на примерах. Судя по твоим листингам - что-то писать самому тебе еще рано. Фокс не бейсик, тут почти все по другому, и это сначало надо изучать, а потом пользовать.
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35357079
Romario_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T Romario_rusDIMENSION mpodkat(RECCOUNT(),2) as Character
После этого все элементы имеют значение .F.
в фоксе нельзя жестко задать тип переменной или элемента массива.
as Character введено только для работы IntelliSence подсказок при написании кода, при работе проги это игнорируется.

Romario_rusCOPY TO ARRAY mpodkat
А после этого каждый элемент имеет тот тип, который был у поля туда сопированного.

PS Массивы тут вовсе не нужны, они почти никогда не нужны, разве что кроме очень малого круга чисто алгоритмических задач. Для решения твоей задачи есть более удобные и мощные средства.

Неужеле прейдется оперировать тремя базами одновременно - тоесть открывать по очереди use переходить на нужную запись GO x !!!
Можно открыть все таблицы и переходить между ними без use чтобы номер записи не перемещался в начало ?
И если есть можно этим способом изобразить это:

zapis=0
FOR bazapodkat=1 TO recpodkat STEP 1
IF aaa=ALLTRIM(mpodkat(bazapodkat,1)) AND empty(ALLTRIM(mpodkat(bazapodkat,2)))
katalog=aaa
zapis=1
endif
IF aaa=ALLTRIM(mpodkat(bazapodkat,2)) AND ALLTRIM(mpodkat(bazapodkat,1))=katalog
podkatalog=aaa
zapis=2
endif
ENDFOR
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35357091
Romario_rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T Romario_rus...
recpodkat=RECCOUNT()
Разве не записывает количество записей в базе podkat.dbf !!!??????????????

А где эта строка в коде из первого поста

Извини, но больше отвечать не буду, нет ни времени ни желания писать вводный курс программирования на фоксе. Для этого есть книги где все вопросы разжеваны на примерах. Судя по твоим листингам - что-то писать самому тебе еще рано. Фокс не бейсик, тут почти все по другому, и это сначало надо изучать, а потом пользовать.

Прошу прощения за беспокойство.
10 лет назад писал проги. Похоже все забыл...
...
Рейтинг: 0 / 0
помогите подправитс код в Fox'е
    #35358237
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Прошу прощения за беспокойство.
> 10 лет назад писал проги. Похоже все забыл...

Похоже. Я думаю такие вещи ты бы не забыл!!!

>Можно открыть все таблицы и переходить между ними без use чтобы номер
>записи не перемещался в начало ?

Можно. Но все таки лучше для начала что-нибудь почитать.
Например Базияна по VFP6.0 Там наиболее удачно расписана работа с данными.

К чтению тебя отсылают не потому что никто не хочет объяснить, а потому, что
подобную задачу можно решить многими способами. Причем все они будут более
оптимальные, чем твои.

Но и выбор одного из них, наиболее оптимального будет сводится к знанию как
структур, индексов, контекста использования (что ты знаешь лучше нас) , так
и ЗНАНИЮ СРЕДСТВ, которыми будут эти данные оперироваться (а вот это тебе
уже надо почитать)


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


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