Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите в чем ошибка в запросе на вставку [D6, XP]


DimonS ©   (2006-10-09 08:38:00) 

Нужно из файла mc502.dbf вставить поля TabN и FIO в таблицу FIO (поля Tn,FIO). Пишу так (в самом Access-е):

insert into FIO in [Tn,FIO] select [TabN,FIO] from ''D:\mc502.dbf''

При выполнении пишет: Неполное предложение запроса.

Что-то не пойму, где копать, подскажите, в чем апшипка.

Пример брал отсюда:
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/office97/html/output/F1/D2/S5A32B.asp

Multiple-record append query:

INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])]
SELECT [source.]field1[, field2[, ...]
FROM tableexpression


DimonS   (2006-10-10 01:55:00) [1]


> Сомнительно, что бы not exist подзапрос выдавал такую ошибку.


Но, как ни странно, выдает...


Sergey13   (2006-10-09 11:04:00) [2]

> [18] DimonS ©   (09.10.06 10:56)

Сомнительно, что бы not exist подзапрос выдавал такую ошибку.


DimonS   (2006-10-09 10:56:00) [3]

В смысле дал название таблицы, только не N, а B :)

Пробовал и твой вариант скопировать - то же самое.


Sergey13   (2006-10-09 10:52:00) [4]

> [16] DimonS ©   (09.10.06 10:48)

А как ты конкретно "так примерно и сделал" ?


DimonS   (2006-10-09 10:48:00) [5]

А если таблица заполнена - то ошибка: Данный подзапрос должен возвращать не больше одной записи!


DimonS   (2006-10-09 10:37:00) [6]

Да, я так примерно и сделал.
Но что-то не то - ничего не вставляет в пустую таблицу...


Sergey13   (2006-10-09 10:29:00) [7]

> [13] DimonS ©   (09.10.06 10:26)

Я вроде перепутал. Как то так.
FROM mc502.dbf NIN 'D:\'[dBase IV;] where not exist (select 1 from FIO f1 where f1.TN=N.TabN)


DimonS   (2006-10-09 10:26:00) [8]


> where not exist (select 1 from FIO f1 where f1.TN=FIO.TN)


Тогда ругается на FIO.TN - не имеет значения по умолчанию :)


Sergey13   (2006-10-09 10:16:00) [9]

> where Tn<>(select Tn from FIO)

where not exist (select 1 from FIO f1 where f1.TN=FIO.TN)


DimonS   (2006-10-09 10:13:00) [10]

Вопрос в догонку.

Что нужно дописать, чтобы дописывались только новые записи? Т.е. обновлять базу.
Пишу так:

INSERT INTO FIO ( Tn, FIO ) IN 'C\Bonus.mdb'
SELECT TabN, FIO
FROM mc502.dbf IN 'D:\'[dBase IV;] where Tn<>TabN


естественно, ошибка: Поле Tn не имеет значения по умолчанию.
А если так:

INSERT INTO FIO ( Tn, FIO ) IN 'C\Bonus.mdb'
SELECT TabN, FIO
FROM mc502.dbf IN 'D:\'[dBase IV;] where Tn<>(select Tn from FIO)


то ничего не вставляется. Как будет правильно?


DimonS   (2006-10-09 09:37:00) [11]

Все, вопрос снят!

INSERT INTO FIO ( Tn, FIO ) IN 'C\Bonus.mdb'
SELECT TabN, FIO
FROM mc502.dbf IN 'D:\'[dBase IV;];


Работает на ура :)


DimonS   (2006-10-09 09:24:00) [12]

Вот, вроде бы тоже самое:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=40317

Но вот не прокатывает...


DimonS   (2006-10-09 09:22:00) [13]


> Sergey13 ©   (09.10.06 09:18) [6]


Да, разнотипные.
Вроде бы можно, читал, что должно прокатить. Компоненты - ADO.


DimonS   (2006-10-09 09:21:00) [14]

Кстати, если запустить запрос из дельфей:

ADOCom.CommandText:=insert into FIO(Tn,FIO) select TabN,FIO from ''D:\mc502.dbf'''';
ADOCom.Execute;


выскакивает ошибка: Неправильно определен объект Parametr. Недопустимые или неполные сведения.

Это одно и тоже, вроде бы?


Sergey13   (2006-10-09 09:18:00) [15]

> Нужно из файла mc502.dbf вставить поля TabN и FIO в таблицу
> FIO (поля Tn,FIO). Пишу так (в самом Access-е):

Так у тебя разнотипные БД? Не заметил сначала.
Тогда такое вряд прокатит. Компоненты доступа какие? В BDE возможны гетерогенные запросы.


DimonS   (2006-10-09 09:10:00) [16]


> Sergey13 ©   (09.10.06 09:08) [4]


Пробовал так - Неполное предложение запроса. Не получается.


Sergey13   (2006-10-09 09:08:00) [17]

> [3] DimonS ©   (09.10.06 08:48)

insert into FIO(Tn,FIO) select TabN,FIO from ''D:\mc502.dbf''


DimonS   (2006-10-09 08:48:00) [18]

Если смотреть пример, то надо, наверное, так:

insert into FIO in Tn[,FIO] select TabN,FIO from ''D:\mc502.dbf''

Но тоже - Неполное предложение запроса.


DimonS   (2006-10-09 08:44:00) [19]

Если их не ставить - ругается на запятую. Как правильно?


Ketmar   (2006-10-09 08:41:00) [20]

и что ты хотел сказать квадратными скобками в запросе?


Наверх

Титульная страница Поиск, карта сайта Написать письмо