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

Задача такова:
Существует 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
05.06.2008, 13:51
    #35356591
Romario_rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите подправитс код в Fox'е
сдесь выкладываю архив с базами в том числе и прайс в aa.dbf
...
Рейтинг: 0 / 0
05.06.2008, 15:08
    #35356930
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите подправитс код в Fox'е
Код: plaintext
PUBLIC recpodkat ... 

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

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

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

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

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

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

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


---------------------------------
recpodkat=RECCOUNT()
Разве не записывает количество записей в базе podkat.dbf !!!??????????????
...
Рейтинг: 0 / 0
05.06.2008, 15:38
    #35357048
Romario_rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите подправитс код в Fox'е
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
05.06.2008, 15:39
    #35357051
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите подправитс код в Fox'е
Romario_rusDIMENSION mpodkat(RECCOUNT(),2) as Character
После этого все элементы имеют значение .F.
в фоксе нельзя жестко задать тип переменной или элемента массива.
as Character введено только для работы IntelliSence подсказок при написании кода, при работе проги это игнорируется.

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

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


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
05.06.2008, 15:45
    #35357071
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите подправитс код в Fox'е
Romario_rus...
recpodkat=RECCOUNT()
Разве не записывает количество записей в базе podkat.dbf !!!??????????????

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

Извини, но больше отвечать не буду, нет ни времени ни желания писать вводный курс программирования на фоксе. Для этого есть книги где все вопросы разжеваны на примерах. Судя по твоим листингам - что-то писать самому тебе еще рано. Фокс не бейсик, тут почти все по другому, и это сначало надо изучать, а потом пользовать.
...
Рейтинг: 0 / 0
05.06.2008, 15:47
    #35357079
Romario_rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите подправитс код в Fox'е
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
05.06.2008, 15:49
    #35357091
Romario_rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите подправитс код в Fox'е
Dima T Romario_rus...
recpodkat=RECCOUNT()
Разве не записывает количество записей в базе podkat.dbf !!!??????????????

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

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

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

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

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

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

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

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


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


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