powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вставка записи в эту же таблицу
25 сообщений из 27, страница 1 из 2
Вставка записи в эту же таблицу
    #33111677
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно взять запись из таблицы и вставить ее в эту же таблицу, поменяв значения 2-х полей. Как это проще сделать?
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33111679
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вставить новую запись с двумя новыми значениями.
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33111714
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
LOCAL loScatter
SELECT "tTable"
SCATTER NAME loScatter
loScatter.Field1="New Value1"
loScatter.Field2="New Value2"
APPEND BLANK
GHATHER NAME loScatter

Истина где-то там...
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33111727
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну, скажем, было: use tabl
тогда
select tabl
append from tabl for ... (какая запись)
replace pole1 with ... , pole2 with ... (новые значения).
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33111786
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если количество полей не велико, то можно так:

Код: plaintext
1.
2.
3.
4.
select MyTab
* Встаем на запись - образец
LOCATE FOR ...
INSERT INTO MyTab (Field1, Field2, Field3, Field4) ;
VALUES (MyTab.Field1, MyTab.Field2, "Новое значение", "Новейшее значение")

Идея в том, что FoxPro сначала вычислит те значения, которые надо подставить и только потом создаст новую запись.
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33112324
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, ВладимирМ !

Интересно! И что - это ВСЕГДА срабатывает?
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33112416
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем вызваны сомнения?
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33112423
Alex*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему нельзя воспользоваться конструкцией
Код: plaintext
1.
2.
3.
INSERT INTO Syslevels (lvlId, lvlName,  lvlNamerus);
SELECT s1.lvlId +  10 , 'Это новое значение', ALLTRIM(s1.lvlNameRus);
FROM SysLevels s1;
WHERE s1.lvlId =  1 
?
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33112448
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Alex*
сразу видно у кого девятка
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33112471
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВладимирМ
конечно правильно как всегда
но я бы всё это хозяйство в курсор сначала выгреб за вместо locate особенно если запись не одна, а правило изменение полей извесно
тогда размер таблицы наверно не так критичен
ну и append from бы сделал
почему курсор ? Ну просто люблю с курсорами работать. В фоксе вообще почти всё на курсорах и таблицах
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33112636
Alex*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверил - в 8-ке тоже работает.
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33113008
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2ВладимирМ :

Просто спросил :) (вдруг какие установки меняют это правило или есть исключения ;) А сейчас кажется что вроде где-то про это слышал или читал (но может - dejavu)

2leaf :

Курсор, по-моему, тут и не нужен. "Размер" таблицы критичен в "ширину", а не в "вышину". Видимо при большом числе полей (не записей), перебор их всех будет подтормаживать, что ли.
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33114751
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размер исходной таблицы - от 20 000 записей (и постоянно растет).
Копировать надо от 0 до 100 записей.
У всех этих записей надо будет менять одно поле на другое значение в соответствии с таблицей. Т.е. формируется таблица соответствия старый ИД -новый ИД, по старому ИД отбираются записи и копируются в эту же таблицу с новым ИД.
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33114752
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одно поле изменяется у всех новых записей на одинаковое значение (заранее заданное).
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33114784
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сочинил такой код:
Код:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
*** подпрограмма копирования деталей насоса в другой насос ***

SET DEFAULT TO 'G:\Wladimir\Себестоимость\sebest\123'
USE sp1.dbf IN 1 SHARED && таблица с деталями копируемого насоса
USE sp_zapch.dbf IN 2 SHARED 
USE normy_ogt1.dbf IN 3 SHARED 
CREATE TABLE sootv (a int, b int) && временная таблица соответсвия ID
SELECT sp1

SCAN 
id1=sp1.a && старый номер ID
SELECT sp_zapch
INSERT INTO sp_zapch (b,c,d,e,f,g,h)  VALUES (sp1.b,sp1.c,sp1.d,sp1.e,sp1.f,sp1.g,sp1.h)
id2=sp_zapch.a && новый номер ID
INSERT INTO sootv (a,b)  VALUES (id1,id2)
ENDSCAN 

* отбор деталей насоса из таблицы технологов
SELECT * FROM normy_ogt1 WHERE normy_ogt1.id_detal in (SELECT sootv.a FROM sootv) INTO CURSOR nnn readwrite

SELECT sootv
SCAN 
UPDATE sp_zapch SET sp_zapch.h=sootv.b WHERE sp_zapch.h=sootv.a 
UPDATE nnn SET nnn.id_detal=sootv.b WHERE nnn.id_detal=sootv.a
ENDSCAN 

все вроде работает... но не оставляет ощущение что делаю кучу лишних движений и все можно сделать гораздо проще...
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33114786
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, коды попутал..

Сочинил такой код:
Код: 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.
*** подпрограмма копирования деталей насоса в другой насос ***

SET DEFAULT TO 'G:\Wladimir\Себестоимость\sebest\123'
USE sp1.dbf IN  1  SHARED && таблица с деталями копируемого насоса
USE sp_zapch.dbf IN  2  SHARED
USE normy_ogt1.dbf IN  3  SHARED
CREATE TABLE sootv (a int, b int) && временная таблица соответсвия ID
SELECT sp1

SCAN
id1=sp1.a && старый номер ID
SELECT sp_zapch
INSERT INTO sp_zapch (b,c,d,e,f,g,h) VALUES (sp1.b,sp1.c,sp1.d,sp1.e,sp1.f,sp1.g,sp1.h)
id2=sp_zapch.a && новый номер ID
INSERT INTO sootv (a,b) VALUES (id1,id2)
ENDSCAN

* отбор деталей насоса из таблицы технологов
SELECT * FROM normy_ogt1 WHERE normy_ogt1.id_detal in (SELECT sootv.a FROM sootv) INTO CURSOR nnn readwrite

SELECT sootv
SCAN
UPDATE sp_zapch SET sp_zapch.h=sootv.b WHERE sp_zapch.h=sootv.a
UPDATE nnn SET nnn.id_detal=sootv.b WHERE nnn.id_detal=sootv.a
ENDSCAN 
все вроде работает... но не оставляет ощущение что делаю кучу лишних движений и все можно сделать гораздо проще...
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33115067
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все вроде работает...
интересно как ?
SELECT sp1
SCAN
id1=sp1.a && старый номер ID
SELECT sp_zapch
INSERT INTO sp_zapch (b,c,d,e,f,g,h) VALUES (sp1.b,sp1.c,sp1.d,sp1.e,sp1.f,sp1.g,sp1.h)
id2=sp_zapch.a && новый номер ID
INSERT INTO sootv (a,b) VALUES (id1,id2)
ENDSCAN

USE sp1.dbf IN 1 SHARED не есть гуд
USE sp1.dbf IN 0 SHARED лучше

ну и там еще есть чего много...
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33115230
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leaf все вроде работает...
интересно как ?

ну и там еще есть чего много...

ну не знаю как, но работает... у меня VFP 9
а что еще не так?
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33115355
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возврат в начало SCAN'a сам "переключает" в исходную область... ;-)
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33115428
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Redrik
ну может и так я не проверял
привычка всё явно указывать да в последнее время я внутри скана явно область не меняю оператором селект просто нет необходимости как-то
а вообще я бы всё это хозяйство немного по другому оформил
ну это уже личное
ну насчет областей это уж точно по крайней мере не аккуратно
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33115489
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да проверил действительно
надо же что значит к do while привыкнуть спасибо
привычка страшное дело
буду знать
правдо всё равно подход не самый лучший тем более скан по одной области с последующей вставкой а зачем запросы тода придуманы?
текст проверки
CREATE CURSOR qq1 (aa n(6))
CREATE CURSOR qq2 (aa n(6))
INSERT INTO qq1 VALUES (1)
INSERT INTO qq1 VALUES (2)
INSERT INTO qq1 VALUES (3)
INSERT INTO qq2 VALUES (11)
INSERT INTO qq2 VALUES (12)
SELECT qq1
SCAN
?aa
SELECT qq2
ENDSCAN
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33115541
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leaf2Redrik
а вообще я бы всё это хозяйство немного по другому оформил

ну так подскажите! затем и вынес на обсуждение, что делал второпях, и хочется теперь привести все в правильный вид.
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33115846
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
н-да... начал поплотнее тестировать - нашел ошибки...
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33116741
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi w3d!

INSERT INTO таблица (список_полей_в_НУЖНОМ_ПОРЯДКЕ) ;
SELECT список_полей_кроме_заменяемого, 123 ;
FROM таблица ;
WHERE условие_отбора_старых_записей

Список полей в скобках должен соответствовать тому что даёт запрос - один к
одному - ИМЕНА полей не обязательно должны соответствовать! 123 - это то
"новое значение" которое нужно проставить "всем одинаковое". Можно конечно и
переменную использовать. Поле первичного ключа проставлять НЕ НАДО - если у
тебя ещё не работает по нему AUTOINC или NewID() в DefaultValue - самое
время это сделать. Условие отбора - ну тебе виднее какие записи нужно
"сдублировать".

Всё предельно просто и логично, и тебе уже это решение подсказали!

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Вставка записи в эту же таблицу
    #33116800
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
Всё предельно просто и логично, и тебе уже это решение подсказали!
Все немного сложнее (по крайней мере, мне так кажется )
В таблице ID, ParentID. При копировании записей нужно сохранить структуру и привести ее в соответствие с новыми ID. AutoInc сделан.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вставка записи в эту же таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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