Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 INSERT  [new]
IgorProgrammer
Member

Откуда:
Сообщений: 687
Как правильно написать INSERT???
Если дано две одинаковые таблицы и надо из одной таблицы вставить в другую
все записи по условию...
Пишу:
INSERT INTO a1 SELECT a2* FROM a2 WHERE a2.kod >= 20
Меня кроет трехэтажкой{:-)}

Плиз хелп...
18 мар 04, 16:36    [585695]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
Hel!Riser
Member

Откуда: Нижний Новгород
Сообщений: 972
APPEND FROM
18 мар 04, 16:38    [585701]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
IgorProgrammer
Member

Откуда:
Сообщений: 687
Hel!Riser:
Мне надо одной командой...
Что б указывалось с какой таблицы в какую...
Желательно без селекта:
селе а1
вставь из а2 где то-то=тому-то
18 мар 04, 16:42    [585713]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
АлександрК
Member

Откуда: Белгородская обл.
Сообщений: 121
INSERT INTO a1 SELECT * FROM a2 WHERE a2.kod >= 20
18 мар 04, 16:43    [585714]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
Hel!Riser
Member

Откуда: Нижний Новгород
Сообщений: 972
APPEND FROM a2 FOR a2.kod >= 20 
18 мар 04, 16:45    [585722]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
IgorProgrammer
Member

Откуда:
Сообщений: 687
Hel!Riser:
Перед APPEND FROM
надо выбрать таблицу в какую впихиваем...
А мне эт не надо...

АлександрК:
У меня так и стоит...
INSERT INTO a1 SELECT a2* FROM a2 WHERE a2.kod >= 20
Ругается че много аргументов...
количество полей при селекте = 183...
Может есть какие-то ограничения на кол. полей
18 мар 04, 16:51    [585742]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
IgorProgrammer
Member

Откуда:
Сообщений: 687
А так срабатывает:
my_fild_insert = ''
FOR my_ins_val = 1 TO FCOUNT(my_insert_alias)
my_fild_insert = my_fild_insert + IIF(!EMPTY(my_fild_insert),',','') + FIELD(my_ins_val,'a1')
ENDFOR
IF !EMPTY(my_fild_insert)
INSERT INTO a1(&my_fild_insert) sele &my_fild_insert From a2 Where kod >= 20
ENDIF

Почему???
И в чем разница с???
INSERT INTO a1 SELECT * FROM a2 WHERE a2.kod >= 20 && Ошибка Слишком много аргументов...
18 мар 04, 17:21    [585864]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
SSV
Member

Откуда: Москва
Сообщений: 71
Во-первых, такая конструкция
insert into table1 select .. from table2 ...

появилась только кажется с VFP8.
Во-вторых, ограничения на количество полей в SELECT SQL = 255

автор

Почему???
И в чем разница с???
INSERT INTO a1 SELECT * FROM a2 WHERE a2.kod >= 20 && Ошибка Слишком много аргументов

Вероятно, несоответствие полей или их количества в исходной и приемной таблицах Попробуй

INSERT INTO a1 (field1,field2,..fieldn) SELECT (field1,field2,..fieldn) FROM a2 WHERE a2.kod >= 20
19 мар 04, 13:24    [587429]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
andrew_Pr
Member

Откуда: Москва
Сообщений: 167
to IgorProgrammer
>>И в чем разница с???
Видимо в числе полей в исходной и принимающей таблицах.
В этом плане как раз Append From очень удобен.
Лишние поля он просто игнорирует.

>>Мне надо одной командой...
>>Что б указывалось с какой таблицы в какую...
>>Желательно без селекта:
А чем вызвано такое странное требование?
Что страшого произойдет, если написать
m.oldArea=Select()

Select TargetTab
Append From SourceTab
Select m.oldArea
19 мар 04, 15:52    [587939]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
Lexa-i
Member

Откуда:
Сообщений: 1
У меня такая же проблема "две одинаковые таблицы..."
работаю в Делфях 5 через АДО с таблицами фокса
подскажите ребята как добавить быстро (с элементами высшего пилотажа) некие записи из одной таблицы в другую..
"insert into a1 from select * from a2" говорит синтаксическую ошибку

ЗЫ Вроде проблемка то простая ... а вот решение ... целый день убил так и несделал... че мне циклами что ли их сверять и добавлять, а если и так делать то как мне добавлять допустим полную запись в другую таблицу не зная количества и названия полей..
подсобите а совет
23 мар 04, 16:43    [592695]     Ответить | Цитировать Сообщить модератору
 Re: INSERT  [new]
Nikita_MV
Member

Откуда: Екатеринбург
Сообщений: 2
Ну если циклом, то примерно так )
Где Base это обьект ADODB.Recordset
(на 1С писано....)

Процедура ЗаполнитьПустыми(Base)
Для К=0 По (Base.Fields.Count()-1) Цикл
Если (Base.Fields(К).Type = 133) Тогда
Base.Fields(К).Value = '';
ИначеЕсли (Base.Fields(К).Type = 129) Тогда
Base.Fields(К).Value = "";
ИначеЕсли (Base.Fields(К).Type = 131) Тогда
Base.Fields(К).Value = 0;
ИначеЕсли (Base.Fields(К).Type = 11) Тогда
Base.Fields(К).Value = 0;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ЗаполнитьПустыми()
Как запросом, не знаю...
24 мар 04, 06:19    [593391]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить