powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите как осуществить "переброс" таблиц? foxpro9
19 сообщений из 19, страница 1 из 1
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36358306
TeddyMUM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
У меня вопрос... Мне необходимо организвать "переброс" данных из одной таблицы в другую, по определенным условиям. Есть 2 таблицы, одна заполнина(table2), другая пустая(table1). Необходимо в table1 занести данные из table2 с условиями:
1. если table2.dat_op<='31/03/2009/ (т.е. первый квартал года)
2. если table2.tip_dvi = 'П' (приход) тогда в table1 заполнять поля pri01...pri08
3. если table2.tip_dvi = 'Р' (приход) тогда в table1 заполнять поля ras01...ras08
Вот пишу такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SCAN
	IF ALLTRIM(table2.dat_op) <= '31/03/2009'
		if ALLTRIM(table2.tip_dvi)='П'
			UPDATE table1 SET sklad=table2.sklad, tip_ot=table2.tip_ot_s, pri01=table2.kol_d01, pri02=table2.kol_d02, pri03=table2.kol_d03, pri04=table2.kol_d04, pri05=table2.kol_d05, pri06=table2.kol_d06, pri07=table2.kol_d07, pri08=table2.kol_d08 from table2	
	ELSE
		if ALLTRIM(table2.tip_dvi)='Р'
			UPDATE table1 SET sklad=table2.sklad, tip_ot=table2.tip_ot_s, ras01=table2.kol_d01, ras02=table2.kol_d02, ras03=table2.kol_d03, ras04=table2.kol_d04, ras05=table2.kol_d05, ras06=table2.kol_d06, ras07=table2.kol_d07, ras08=table2.kol_d08 from table2	
ENDIF
ENDIF
endif
ENDSCAN
Но у меня берется только 1 строка из table2 и заполняется только одн строка... мне надо что бы всё заполнилось. Подскажите, что не так пишу??? (пробывала и с for...endfor, do while ... enddo НЕПОЛУЧАЕТСЯ)
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36358352
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TeddyMUM,

где добавление новой строки в таблицу?
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36358365
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то вроде

Код: plaintext
1.
2.
3.
4.
5.
insert into ttt (...)
   select ...
           iif(t="G",....,...)
      from ppp
      where ....

относительно синтаксиса поиск в справке
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36358370
malnevit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да блин выполни:

Код: 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.
26.
27.
	
	
	Update table1  Set sklad=table2.sklad,;
	tip_ot=table2.tip_ot_s,;
	pri01=table2.kol_d01,;
	pri02=table2.kol_d02,;
	pri03=table2.kol_d03,;
	pri04=table2.kol_d04,;
	pri05=table2.kol_d05,;
	pri06=table2.kol_d06,;
	pri07=table2.kol_d07,;
	pri08=table2.kol_d08;
	from table2 WHERE CTOD(table2.dat_op) <= {^ 2009 - 03 - 31 } and table2.tip_dvi='Ï'
	
	
	
	Update table1  Set sklad=table2.sklad,;
	tip_ot=table2.tip_ot_s,;
	pri01=table2.kol_d01,;
	pri02=table2.kol_d02,;
	pri04=table2.kol_d04,;
	pri05=table2.kol_d05,;
	pri06=table2.kol_d06,;
	pri07=table2.kol_d07,;
	pri08=table2.kol_d08;
	from table2 WHERE CTOD(table2.dat_op) > {^ 2009 - 03 - 31 } and table2.tip_dvi='P'
	
	

Дальше сам подкуритишь.
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36358635
TeddyMUM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавление строки в таблицу прописанно при инициализации формы (собфтие init в form)
Код: plaintext
1.
2.
select table1
append blank
Но это же он дабовляет только 1 строку, а как сделать чтобы много добавил???
Я попробывала применить все написанные примеры, но пока без успешно...
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36358747
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TeddyMUM,

Код: plaintext
1.
SELECT table1
APPEND FROM table2 FOR table2.dat_op<=DATE( 2009 , 03 , 31 ) .OR. table2.tip_dvi = 'П' .OR. table2.tip_dvi = 'Р'
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36359065
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TeddyMUMДобрый день!
У меня вопрос... Мне необходимо организвать "переброс" данных из одной таблицы в другую, по определенным условиям. Есть 2 таблицы, одна заполнина(table2), другая пустая(table1). Необходимо в table1 занести данные из table2 с условиями:
1. если table2.dat_op<='31/03/2009/ (т.е. первый квартал года)
2. если table2.tip_dvi = 'П' (приход) тогда в table1 заполнять поля pri01...pri08
3. если table2.tip_dvi = 'Р' (приход) тогда в table1 заполнять поля ras01...ras08
Вот пишу такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SCAN
	IF ALLTRIM(table2.dat_op) <= '31/03/2009'
		if ALLTRIM(table2.tip_dvi)='П'
			UPDATE table1 SET sklad=table2.sklad, tip_ot=table2.tip_ot_s, pri01=table2.kol_d01, pri02=table2.kol_d02, pri03=table2.kol_d03, pri04=table2.kol_d04, pri05=table2.kol_d05, pri06=table2.kol_d06, pri07=table2.kol_d07, pri08=table2.kol_d08 from table2	
	ELSE
		if ALLTRIM(table2.tip_dvi)='Р'
			UPDATE table1 SET sklad=table2.sklad, tip_ot=table2.tip_ot_s, ras01=table2.kol_d01, ras02=table2.kol_d02, ras03=table2.kol_d03, ras04=table2.kol_d04, ras05=table2.kol_d05, ras06=table2.kol_d06, ras07=table2.kol_d07, ras08=table2.kol_d08 from table2	
ENDIF
ENDIF
endif
ENDSCAN
..
Добавление строки в таблицу прописанно при инициализации формы (собфтие init в form)
select table1
append blank
Но это же он дабовляет только 1 строку, а как сделать чтобы много добавил???
Я попробывала применить все написанные примеры, но пока без успешно...

Можно попробовать заменить всю эту ересь на такой например код:

Код: plaintext
1.
2.
3.
4.
insert into table1(sklad,tip_ot,pri01,pri02,...,pri08)
select sklad,tip_ot_s,kol_d01,kol_d02,...,kol_d08
from table2
where dat_op <= date( 2009 , 3 , 31 )
and ALLTRIM(table2.tip_dvi)='П'
+
Код: plaintext
1.
2.
3.
4.
insert into table1(sklad,tip_ot,ras01,ras02,...,ras08)
select sklad,tip_ot_s,kol_d01,kol_d02,...,kol_d08
from table2
where dat_op <= date( 2009 , 3 , 31 )
and ALLTRIM(table2.tip_dvi)='P'
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36359073
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TeddyMUM
+отформатируйте на запятые
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36406839
TeddyMUM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня получилось заносить данные только по одному условию... А вот с датой "беда"... Fox постоянно ругается... Подскажите как дописать код, что бы всё заработало правильно. 1 условие это тип движения документа (приход, расход) 2 условие это кварталы (1, 2, 3 и 4)
Код: 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.
26.
27.
28.
29.
SELECT table2
	COPY TO ARRAY ar4 FIELDS kol_d01,kol_d02,kol_d03,kol_d04,kol_d05,kol_d06,kol_d07,kol_d08 FOR tip_dvi='П' 

SELECT table1
	APPEND FROM ARRAY ar4 FIELDS pri01,pri02,pri03,pri04,pri05,pri06,pri07,pri08
	UPDATE table1 SET ost01=pri01-ras01
	UPDATE table1 SET ost02=pri02-ras02
	UPDATE table1 SET ost03=pri03-ras03
	UPDATE table1 SET ost04=pri04-ras04
	UPDATE table1 SET ost05=pri05-ras05
	UPDATE table1 SET ost06=pri06-ras06
	UPDATE table1 SET ost07=pri07-ras07
	UPDATE table1 SET ost08=pri08-ras08
	RELEASE ar4
	
SELECT table2
	COPY TO ARRAY ar4 FIELDS kol_d01,kol_d02,kol_d03,kol_d04,kol_d05,kol_d06,kol_d07,kol_d08 FOR tip_dvi='Р' 

SELECT table1 
	APPEND FROM ARRAY ar4 FIELDS ras01,ras02,ras03,ras04,ras05,ras06,ras07,ras08
	UPDATE table1 SET ost01=pri01-ras01
	UPDATE table1 SET ost02=pri02-ras02
	UPDATE table1 SET ost03=pri03-ras03
	UPDATE table1 SET ost04=pri04-ras04
	UPDATE table1 SET ost05=pri05-ras05
	UPDATE table1 SET ost06=pri06-ras06
	UPDATE table1 SET ost07=pri07-ras07
	UPDATE table1 SET ost08=pri08-ras08
	RELEASE ar4

я пробывала ставить условие для первого квартала, но fox ругается на дату
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT table2
	COPY TO ARRAY ar4 FIELDS kol_d01,kol_d02,kol_d03,kol_d04,kol_d05,kol_d06,kol_d07,kol_d08 FOR tip_dvi='П' AND CTOD(dat_op) < '01/04/2010'
SELECT table1
	APPEND FROM ARRAY ar4 FIELDS pri01,pri02,pri03,pri04,pri05,pri06,pri07,pri08
	UPDATE table1 SET ost01=pri01-ras01
	...
	RELEASE ar4
	
SELECT table2
	COPY TO ARRAY ar4 FIELDS kol_d01,kol_d02,kol_d03,kol_d04,kol_d05,kol_d06,kol_d07,kol_d08 FOR tip_dvi='Р' AND CTOD(dat_op)< '01/04/2010'
SELECT table1 
	APPEND FROM ARRAY ar4 FIELDS ras01,ras02,ras03,ras04,ras05,ras06,ras07,ras08
	UPDATE table1 SET ost01=pri01-ras01
	...
	RELEASE ar4
еще в строке писала так:
Код: plaintext
1.
COPY TO ARRAY ar4 FIELDS kol_d01,...,kol_d08 FOR tip_dvi='П' AND dat_op< date('01/04/2010')
всё равно не работает =(
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36406875
TeddyMUM'01/04/2010'С чего Вы решили, что фокс понимает такую строку как дату? Почему такую строку он должен понимать как дату?
Есть форматонезависимый вид представления даты:
Код: plaintext
{^ 2010 - 04 - 01 }
Вот им и пользуйтесь.
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36406931
TeddyMUM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще один вопрос...
Есть ли возможность в fox9 заносить несколько данных в одну строку? Поясню... переброс который я делаю основан на кварталах и если, например, в 1 квартале был приход номенклатуры в один день, а расход в другой день или даже месяц (но он в приделе 1 квартала), то прогрмма должна сформировать в таблице 1 строку с этими 2 данными(т.е в 1таблицу внести одну строку, содержащию значения 2х строк др. таблицы) и подсчитать остаток на следующий квартал. Вот как это можно сделать или это не реально?
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36406960
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TeddyMUMто прогрмма должна сформировать в таблице 1 строку с этими 2 данными
Физически записать 2 строки в 1 не получится, можно проагрегировать (просуммировать) необходимые значения строк за квартал командой SUM. Что это такое смотрите в хелпе.
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36464303
TeddyMUM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
переброс который я делаю основан на кварталах и если, например, в 1 квартале был приход номенклатуры в один день, а расход в другой день или даже месяц (но он в приделе 1 квартала), то прогрмма должна сформировать в таблице 1 строку с этими 2 данными(т.е в 1таблицу внести одну строку, содержащию значения 2х строк др. таблицы) и подсчитать остаток на следующий квартал.
А можно это сделать при помощи select...UNION??? Я писала такой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT table1.hn ;
	FROM table1 ;
	WHERE table1.hn  = table1.hn  ;
UNION ;
	SELECT table1.hn ,  0 ,  0  ;
	FROM table1 ;
	WHERE table1.hn NOT IN ;
	(SELECT table1.hn  FROM table1)
но выдается ошибка: SELECTs are not UNION compatible.Типы данных или размеры полей в операторах SELECT, не идентичны между собой.
Подскажите пожалуйста как правильно написать???
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36464313
TeddyMUM
Код: plaintext
1.
2.
3.
4.
SELECT table1.hn ;
..
UNION ;
	SELECT table1.hn ,  0 ,  0  ;
но выдается ошибка: SELECTs are not UNION compatible.Типы данных или размеры полей в операторах SELECT, не идентичны между собой.
Подскажите пожалуйста как правильно написать???И что тут непонятно? В первом одно поле, во втором - три. На это и ругается. Нежто трудно догадаться или добавить в первый запрос такие же нули как во втором запросе или убрать эти нули везде?
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36464452
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TeddyMUMДобрый день!
У меня вопрос... Мне необходимо организвать "переброс" данных из одной таблицы в другую, по определенным условиям. Есть 2 таблицы, одна заполнина(table2), другая пустая(table1). Необходимо в table1 занести данные из table2 с условиями:
1. если table2.dat_op<='31/03/2009/ (т.е. первый квартал года)
2. если table2.tip_dvi = 'П' (приход) тогда в table1 заполнять поля pri01...pri08
3. если table2.tip_dvi = 'Р' (приход) тогда в table1 заполнять поля ras01...ras08
Вот пишу такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SCAN
	IF ALLTRIM(table2.dat_op) <= '31/03/2009'
		if ALLTRIM(table2.tip_dvi)='П'
			UPDATE table1 SET sklad=table2.sklad, tip_ot=table2.tip_ot_s, pri01=table2.kol_d01, pri02=table2.kol_d02, pri03=table2.kol_d03, pri04=table2.kol_d04, pri05=table2.kol_d05, pri06=table2.kol_d06, pri07=table2.kol_d07, pri08=table2.kol_d08 from table2	
	ELSE
		if ALLTRIM(table2.tip_dvi)='Р'
			UPDATE table1 SET sklad=table2.sklad, tip_ot=table2.tip_ot_s, ras01=table2.kol_d01, ras02=table2.kol_d02, ras03=table2.kol_d03, ras04=table2.kol_d04, ras05=table2.kol_d05, ras06=table2.kol_d06, ras07=table2.kol_d07, ras08=table2.kol_d08 from table2	
ENDIF
ENDIF
endif
ENDSCAN
Но у меня берется только 1 строка из table2 и заполняется только одн строка... мне надо что бы всё заполнилось. Подскажите, что не так пишу??? (пробывала и с for...endfor, do while ... enddo НЕПОЛУЧАЕТСЯ)

Если задача поставлена правильно, то можно так:
**************************
select table2
scan for dat_op<= '31/03/2009/' && допустим, что это сравнение проходит??? иначе нужно исправлять

scatter memvar

select table1
append blank

if tip_dvi = 'П'
for i1 = 1 to 8
obj1 = 'gather memvar field pri0' + allt(str(I1))
&obj1
endfor
else
for i1 = 1 to 8
obj2 = 'gather memvar field ras0' + allt(str(I1))
&obj2
endfor
endif
endscan

****************************

Думаю, что код при желании можно сократить через IIF()
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36464528
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorbik,

**************************
select table2
scan for dat_op<= '31/03/2009/' && допустим, что это сравнение проходит??? иначе нужно исправлять

scatter memvar

select table1
append blank

for i1 = 1 to 8
obj1 = 'gather memvar field ' + IIF(tip_dvi = 'П', 'pri0', 'ras0') + allt(str(I1))
&obj1
endfor

endscan

****************************
Ну вот, сам и сократил.
Код не проверял, но идея должна работать.
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36479247
TeddyMUM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igorbik, спасибо большое за совет, но я уже решила эту проблему другим способом.
У меня вопрос. Как мне в table3 подсчитать ost01=sum_pri01-sum_ras01. Я писала следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
SELECT table1.hn,table1.sklad,table1.tip_ot,table1.dat_n,table1.dat_kor,SUM(table1.pri01),SUM(table1.ras01 ;
FROM table1 ;
GROUP BY table1.hn ;
into table table3
	
UPDATE table3 SET ost01=sum_pri01-sum_ras01
Но Fox выводит ошибку SQL: Column 'OST01' is not found (хотя в table3 есть такое поле). Подскажите пожалуйста.
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36479467
TeddyMUM,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT ;
  table1.hn, ;
  table1.sklad, ;
  table1.tip_ot, ;
  table1.dat_n, ;
  table1.dat_kor, ;
  SUM(table1.pri01), ;
  SUM(table1.ras01), ;
  SUM(pri01-ras01) as ost01 ;
FROM table1 ;
GROUP BY table1.hn ;
into table table3
...
Рейтинг: 0 / 0
Подскажите как осуществить "переброс" таблиц? foxpro9
    #36479513
TeddyMUM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шестипалов, ОГРОМНОЕ СПАСИБО!!!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите как осуществить "переброс" таблиц? foxpro9
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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