powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Задача
11 сообщений из 11, страница 1 из 1
Задача
    #34331619
phonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача: Организовать импорт базы в сторонюю.
Имеется:
use db1.dbf in 1 alias NDFL
use db2.dbf in 2 alias MAIN
sele 2
counter=1
do while .not. eof(2)
append blank in 1
repl NDFL.NREF with counter
repl NDFL.STATUSFL with 1
repl NDFL.FAMFL with strtran(alltrim(NMLS),' ',',')
if .not. empty(TYPE_DOKUM)
repl NDFL.KODUDL with val(TYPE_DOKUM)
else
if val(S_N_DOKUM)=0
repl NDFL.KODUDL with 91
else
repl NDFL.KODUDL with 21
endif
endif
repl NDFL.UDLICHN with S_N_DOKUM
repl NDFL.DATEROJD with BIRTH_DATA
repl NDFL.ADRMZH with ADRES
repl NDFL.DOXIMYSH with '1520,'+alltrim(str(SUM_SUMAK,45,2))
repl NDFL.M_ERR with 'L'
repl NDFL.GRAJD with 643
repl NDFL.OBSHDOX with SUM_SUMAK
skip
counter=counter+1
enddo


Что здесь не так?
В db1.dbf ничего не добавляется.
Почему?
...
Рейтинг: 0 / 0
Задача
    #34331645
BMJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BMJ
Гость
попробуйте заменить
append blank in 1
repl NDFL.NREF with counter
repl NDFL.STATUSFL with 1
repl NDFL.FAMFL with strtran(alltrim(NMLS),' ',',')
на
INSERT INTO ndfl (NREF,STATUSFL,FAMFL) VALUES (counter,1,strtran(alltrim(NMLS),' ',','))
вставится уж точно
P.S. может удобней без номеров , а указывать названия алиасов
...
Рейтинг: 0 / 0
Задача
    #34331896
antemos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет в пинципе корректное решение просто есть одно надо переходить на ту таблу в которой двигаешься. Т.е.
select 1
skip

а ты выбираешь вторую.

А вообще я обычно делаю так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select  1 
for i= 1  to recc()
sele  1 
goto i

.....
repl....
repl.....
endfor

Так можно использовать i для отображения сколько обработано и сколько осталось
...
Рейтинг: 0 / 0
Задача
    #34331897
antemos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И да совсем забыл действительно лучше указывать алиасы.
1. Так нагляднее, след. меньше путаешься
2. Редко но у меня бывало что по номерам не переключаются.
...
Рейтинг: 0 / 0
Задача
    #34332331
phonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторINSERT INTO NDFL (NREF,STATUSFL,FAMFL) VALUES (counter,1,strtran(alltrim(NMLS),' ',',')) append blank in 1

Error in line 6: Unrecognized phrase/keyword in command.
FoxPro 2.6a

авторДа нет в пинципе корректное решение просто есть одно надо переходить на ту таблу в которой двигаешься. Т.е.
select 1
skip

а ты выбираешь вторую.

А вообще я обычно делаю так

select 1
for i=1 to recc()
sele 1
goto i

.....
repl....
repl.....
endfor

Так можно использовать i для отображения сколько обработано и сколько осталось

use sp2004.dbf in 1 alias NDFL
use s2004.dbf in 2 alias main
select lom
for i=1 to recc()
goto i
repl NDFL.NREF with i
repl NDFL.STATUSFL with 1
repl NDFL.FAMFL with strtran(alltrim(NMLS),' ',',')
if .not. empty(TYPE_DOKUM)
repl NDFL.KODUDL with val(TYPE_DOKUM)
else
if val(S_N_DOKUM)=0
repl NDFL.KODUDL with 91
else
repl NDFL.KODUDL with 21
endif
endif
repl NDFL.UDLICHN with S_N_DOKUM
repl NDFL.DATEROJD with BIRTH_DATA
repl NDFL.ADRMZH with ADRES
repl NDFL.DOXIMYSH with '1520,'+alltrim(str(SUM_SUMAK,45,2))
repl NDFL.M_ERR with 'Ф'
repl NDFL.GRAJD with 643
repl NDFL.OBSHDOX with SUM_SUMAK
endfor


Я запутался с SELECT
Если ставлю select - 2(main) - то при компиляции происходят вычисления, но резльтат в базу не записывается
Если 1 (NDFL) , то Variables not found.
...
Рейтинг: 0 / 0
Задача
    #34332517
antemos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так
это
авторselect lom
выбор чего?
здесь
авторfor i=1 to recc()
делаем так

Код: plaintext
1.
for i= 1  to recc()
select main 

и не видя данных скорее всего еще:

Код: plaintext
1.
2.
3.
repl NDFL.UDLICHN with main.S_N_DOKUM
repl NDFL.DATEROJD with main.BIRTH_DATA
repl NDFL.ADRMZH with main.ADRESAK 
Т.е. добавляем алиасы исходных данных
...
Рейтинг: 0 / 0
Задача
    #34332562
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя сделать что либо подобное?
Код: plaintext
1.
2.
3.
4.
use db1.dbf in  0  alias NDFL
use db2.dbf in  0  alias MAIN
insert into ndfl (field1, field2,field3,...,fieldn) ;
select field1,field2,field3,...,fieldn from main
если есть условия, то в селект можно все организовать
Код: plaintext
1.
2.
3.
select iif(empty(TYPE_DOKUM),val(TYPE_DOKUM), ;
          iif(val(S_N_DOKUM)= 0 , 91 , 21 )), '1520,'+alltrim(str(SUM_SUMAK, 45 , 2 )), ... ;
          from main
Думаю будет гораздо быстрей
...
Рейтинг: 0 / 0
Задача
    #34332590
antemos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно то оно можно, но:
1. Быстрее не будет, поверь. или проверь
2. Можно сделать много замечаний, например что ханить подобные данные в базе просто зло, читайте про нормальные формы. Вычисляемые данные должны вычислятся, а не храниться, индексное поле должно иметь проверку на уникальность и т.д.
3. Select это конечно более приемлемый СТИЛЬ програмирования, но сабж ставит явно человек, делающий случайную работу или просто осваивающий VFP, делаем скидки
...
Рейтинг: 0 / 0
Задача
    #34333042
phonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antemosselect lom
Это MAIN
antemosrepl NDFL.UDLICHN with main.S_N_DOKUM
repl NDFL.DATEROJD with main.BIRTH_DATA
repl NDFL.ADRMZH with main.ADRESAK

Помогло только для одной записи
...
Рейтинг: 0 / 0
Задача
    #34333110
antemos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
use sp2004.dbf in  1  alias NDFL
use s2004.dbf in  2  alias main
select main
for i= 1  to recc()
sele main
goto i
repl NDFL.NREF with i
repl NDFL.STATUSFL with  1 
repl NDFL.FAMFL with strtran(alltrim(NMLS),' ',',')   && тут алиас или это имя переменной
if .not. empty(TYPE_DOKUM)
repl NDFL.KODUDL with val(TYPE_DOKUM)    && возможно main.TYPE_DOKUM
else 
if val(S_N_DOKUM)= 0 
repl NDFL.KODUDL with  91 
else
repl NDFL.KODUDL with  21 
endif
endif
repl NDFL.UDLICHN with main.S_N_DOKUM
repl NDFL.DATEROJD with main.BIRTH_DATA
repl NDFL.ADRMZH with main.ADRES
repl NDFL.DOXIMYSH with '1520,'+alltrim(str(main.SUM_SUMAK, 45 , 2 ))
repl NDFL.M_ERR with 'Ф'
repl NDFL.GRAJD with  643 
repl NDFL.OBSHDOX with main.SUM_SUMAK 
endfor

если еще где алиасы просохатил вбей. будут проблемы пиши в аську 488 139 593
...
Рейтинг: 0 / 0
Задача
    #34334759
BMJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BMJ
Гость
INSERT INTO NDFL (NREF,STATUSFL,FAMFL) VALUES (counter,1,strtran(alltrim(NMLS),' ',',')) - это писал я
append blank in 1 - а, это я не писал.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Задача
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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