|
|
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться. С Уважением , Роман. Задача такова: Существует 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 13:19 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
сдесь выкладываю архив с базами в том числе и прайс в aa.dbf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 13:51 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
Код: plaintext создалась переменная c логическим значением, т.е. recpodkat = .F. Код: plaintext Код написан настолько идеологически неверно, что нет смысла его править и указывать на ошибки, т.к. после исправлений получится новый код. А писать за тебя тут никто не будет. Думаю тебе надо для начала примеры из книжек поразбирать, разобраться как в фоксе с данными работать, как отладчиком пользоваться, а потом уж что-то писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:08 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощ. DIMENSION mpodkat(RECCOUNT(),2) as Character COPY TO ARRAY mpodkat разве массив не текстового типа ? Если нет, подскажа как его сделать в формате для сравнения с артиклами "45*66" текстового типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:26 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
[quot Dima T] Код: plaintext создалась переменная c логическим значением, т.е. recpodkat = .F. --------------------------------- recpodkat=RECCOUNT() Разве не записывает количество записей в базе podkat.dbf !!!?????????????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:34 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:38 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
Romario_rusDIMENSION mpodkat(RECCOUNT(),2) as Character После этого все элементы имеют значение .F. в фоксе нельзя жестко задать тип переменной или элемента массива. as Character введено только для работы IntelliSence подсказок при написании кода, при работе проги это игнорируется. Romario_rusCOPY TO ARRAY mpodkat А после этого каждый элемент имеет тот тип, который был у поля туда сопированного. PS Массивы тут вовсе не нужны, они почти никогда не нужны, разве что кроме очень малого круга чисто алгоритмических задач. Для решения твоей задачи есть более удобные и мощные средства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:39 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
Блин. В торопях напутал... Вот вариант на данный момент - и всеравно бред. 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:40 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
Romario_rus... recpodkat=RECCOUNT() Разве не записывает количество записей в базе podkat.dbf !!!?????????????? А где эта строка в коде из первого поста Извини, но больше отвечать не буду, нет ни времени ни желания писать вводный курс программирования на фоксе. Для этого есть книги где все вопросы разжеваны на примерах. Судя по твоим листингам - что-то писать самому тебе еще рано. Фокс не бейсик, тут почти все по другому, и это сначало надо изучать, а потом пользовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:45 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:47 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
Dima T Romario_rus... recpodkat=RECCOUNT() Разве не записывает количество записей в базе podkat.dbf !!!?????????????? А где эта строка в коде из первого поста Извини, но больше отвечать не буду, нет ни времени ни желания писать вводный курс программирования на фоксе. Для этого есть книги где все вопросы разжеваны на примерах. Судя по твоим листингам - что-то писать самому тебе еще рано. Фокс не бейсик, тут почти все по другому, и это сначало надо изучать, а потом пользовать. Прошу прощения за беспокойство. 10 лет назад писал проги. Похоже все забыл... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:49 |
|
||
|
помогите подправитс код в Fox'е
|
|||
|---|---|---|---|
|
#18+
> Прошу прощения за беспокойство. > 10 лет назад писал проги. Похоже все забыл... Похоже. Я думаю такие вещи ты бы не забыл!!! >Можно открыть все таблицы и переходить между ними без use чтобы номер >записи не перемещался в начало ? Можно. Но все таки лучше для начала что-нибудь почитать. Например Базияна по VFP6.0 Там наиболее удачно расписана работа с данными. К чтению тебя отсылают не потому что никто не хочет объяснить, а потому, что подобную задачу можно решить многими способами. Причем все они будут более оптимальные, чем твои. Но и выбор одного из них, наиболее оптимального будет сводится к знанию как структур, индексов, контекста использования (что ты знаешь лучше нас) , так и ЗНАНИЮ СРЕДСТВ, которыми будут эти данные оперироваться (а вот это тебе уже надо почитать) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 05:28 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35357027&tid=1587691]: |
0ms |
get settings: |
9ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
64ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 349ms |

| 0 / 0 |
