Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите составить запрос INSERT+SELECT / 23 сообщений из 23, страница 1 из 1
27.08.2009, 01:15
    #36165073
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Добрый день!
Пытаюсь реализовать импортирование данных из таблицы ds204079 в таблицу dogovor. Добавляться должны только те данные, которых нет в таблице dogovor. Пробовал делать так:
INSERT INTO dogovor (ndog,name) SELECT ndog,name FROM ds204079 WHERE ds204079.ndog NOT in (SELECT ndog FROM dogovor)
В итоге VFP7 ругает на ошибку "Internal consistency error". Добавляется только одна запись. Мне кажется, что это из-за того, что таблица открывается дважды - INSERTом и SELECTом. Как упростить?
...
Рейтинг: 0 / 0
27.08.2009, 07:09
    #36165151
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Vady
Пытаюсь реализовать импортирование данных из таблицы ds204079 в таблицу dogovor. Добавляться должны только те данные, которых нет в таблице dogovor.


У меня, к сожалению, нет VFP7, есть только VFP5 и VFP9.
Под VFP9 прекрасно работает :

Код: plaintext
1.
2.
INSERT INTO dogovor (ndog, name) SELECT ndog, name ;
	FROM (SELECT ndog, name FROM ds204079 ;
		WHERE ndog NOT in (SELECT ndog FROM dogovor)) as SubAlias

Но под VFP5 этот вариант не прошел. Если у вас не пойдет и на VFP7, то попробуйте немного более упрощенный вариант :

Код: plaintext
1.
2.
3.
SELECT ndog, name FROM ds204079 ;
	WHERE ndog NOT in (SELECT ndog FROM dogovor) ;
	INTO CURSOR MyCursor
INSERT INTO dogovor (ndog, name) SELECT ndog, name FROM MyCursor
...
Рейтинг: 0 / 0
27.08.2009, 10:36
    #36165468
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
reware, в VFP7 ваш первый вариант не прокатил с ошибкой "Internal consistency error". А во втором варианте два отдельных запроса или один целый? И то и другое не катит:(
...
Рейтинг: 0 / 0
27.08.2009, 10:58
    #36165552
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
"Если ничего не помогает, прочтите, наконец, инструкцию" (с)

HELP VFP7 INSERT – SQL Command
Appends a record to the end of a table that contains the specified field values.

INSERT INTO dbf_name [(fname1 [, fname2, ...])]
VALUES (eExpression1 [, eExpression2, ...])

-or-

INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR
Как видите, синтаксиса вида INSERT INTO ... SELECT ... FROM в версии VFP7 просто не существует. Он был введен только в VFP8.

Однако у команды INSERT-SQL есть альтерантива в виде команды APPEND FROM. Т.е. логика такая

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
* Сначала выполняется запрос в курсор
SELECT ndog,name ;
FROM ds204079 ;
INTO CURSOR MyCursor NOFILTER ;
WHERE ds204079.ndog NOT in (SELECT ndog FROM dogovor)

* Затем результат запроса добавляется в таблицу
select dogovor
APPEND FROM (dbf("MyCursor"))
...
Рейтинг: 0 / 0
27.08.2009, 11:11
    #36165578
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Vady reware, в VFP7 ваш первый вариант не прокатил с ошибкой "Internal consistency error". А во втором варианте два отдельных запроса или один целый? И то и другое не катит:(

Ну коль возможности SQL в VFP7 ограничены по сравнению с VFP9, то вам следует воспользоваться советом ВладимирМ и применить тривиальный APPEND. Если пойти еще дальше, можно и вовсе обойтись без SELECT-SQL :)
...
Рейтинг: 0 / 0
27.08.2009, 16:51
    #36166633
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Уже снес VFP7, поставил VFP9. Ничего не изменилось, все те же ошибки :(
Где следует искать причину?
...
Рейтинг: 0 / 0
27.08.2009, 17:05
    #36166673
Помогите составить запрос INSERT+SELECT
VadyУже снес VFP7, поставил VFP9. Ничего не изменилось, все те же ошибки :(
Где следует искать причину?В зацикливании на Where not in (select ...)
Есть еще Join-ы. В частности, Left join в сочетании с where isnull()
...
Рейтинг: 0 / 0
27.08.2009, 17:11
    #36166683
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Guest , что-то не врублюсь, как join-ом и null-ом можно добавлять недостающие в таблице записи. Примерчик плиз!
...
Рейтинг: 0 / 0
27.08.2009, 17:20
    #36166701
Помогите составить запрос INSERT+SELECT
Vady Guest , что-то не врублюсь, как join-ом и null-ом можно добавлять недостающие в таблице записи. Примерчик плиз!Для получения примерчика потрудитесь составить скрипт создания таблиц и наполнения их тестовыми данными.
...
Рейтинг: 0 / 0
27.08.2009, 17:24
    #36166716
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Пробовал даже вариант:
Код: plaintext
1.
INSERT INTO dogovor (ndog,name) SELECT DS204079.Ndog,DS204079.Name;
    FROM DOGOVOR RIGHT JOIN DS204079 ON DOGOVOR.NDOG = DS204079.NDOG WHERE ISNULL(dogovor.ndog)
И этот не катит с ошибкой "Internal consistency error"
...
Рейтинг: 0 / 0
27.08.2009, 19:15
    #36166929
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
VadyУже снес VFP7, поставил VFP9. Ничего не изменилось, все те же ошибки :(
Где следует искать причину?

??? Вот прям сейчас беру и спокойно выполняю :

Код: plaintext
1.
2.
INSERT INTO dogovor (ndog, name) SELECT ndog, name ;
          FROM (SELECT ndog, name FROM ds204079 ;
          WHERE ndog NOT in (SELECT ndog FROM dogovor)) as SubAlias

Но - у меня VFP9 с SP2. Может в этом дело ? Детально не смотрел изменения, вносимые вторым сервис-паком. Поставьте SP2 на VFP9.
...
Рейтинг: 0 / 0
27.08.2009, 20:57
    #36167013
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Поставил SP2, тоже не катит. Сдаюсь теперь!:(
...
Рейтинг: 0 / 0
27.08.2009, 21:00
    #36167018
Ffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
А по-отдельности части запроса работают?
...
Рейтинг: 0 / 0
27.08.2009, 21:05
    #36167019
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Смотрю, даже обыкновенный insert into - values не хочет пахать.
Только select пашет на ура...
...
Рейтинг: 0 / 0
27.08.2009, 21:08
    #36167022
Fffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
А что ты вставляешь? Может, в данных причина?
...
Рейтинг: 0 / 0
27.08.2009, 21:12
    #36167023
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
INSERT INTO dogovor (ndog,name) VALUES ('111','222')
Типы данных полей - character с длиной 8 и 120 символов соответственно.
...
Рейтинг: 0 / 0
27.08.2009, 21:20
    #36167026
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
VadyINSERT INTO dogovor (ndog,name) VALUES ('111','222')
Типы данных полей - character с длиной 8 и 120 символов соответственно.
Тогда я тоже сдаюсь. Ну чудес-то не бывает. Я, правда, гонял на таблицах с символьными полями ndog и name длиной 10.
Народ, кто-нить может у себя на VFP9 ЭТО проверить ?
...
Рейтинг: 0 / 0
27.08.2009, 21:23
    #36167029
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
Уже нашел причину!
Оказалось, таблицу dogovor создал средствами BDE в Delphi, в итоге VFP выдал ошибку, после добавления одной записи.
Создал аналогичную таблицу при помощи VFP, выполнил запрос и ура!

Если можно продолжить тему, то скажите пожалуйста, каким компонентом Delphi лучше использовать для работы с данными FoxPro и как прикрутить драйвер FoxPro9?
...
Рейтинг: 0 / 0
27.08.2009, 21:29
    #36167031
Fffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
OLEDB Provider
...
Рейтинг: 0 / 0
27.08.2009, 21:31
    #36167035
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
VadyУже нашел причину!
Оказалось, таблицу dogovor создал средствами BDE в Delphi, в итоге VFP выдал ошибку, после добавления одной записи.
Создал аналогичную таблицу при помощи VFP, выполнил запрос и ура!

Если можно продолжить тему, то скажите пожалуйста, каким компонентом Delphi лучше использовать для работы с данными FoxPro и как прикрутить драйвер FoxPro9?

#$@^%$$$% !!!
Я-бы даже крепче сказал. НИКОГДА не работайте посредством FoxPro с DBF, созданными в Дельфи.
У меня давно такое ощущение, что эти самые дельфийские псевдо-DBF понимаются исключительно только самой Дельфи.
Слава богу, вам полегчало :)
...
Рейтинг: 0 / 0
27.08.2009, 21:39
    #36167040
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
rewareVadyУже нашел причину!
Оказалось, таблицу dogovor создал средствами BDE в Delphi, в итоге VFP выдал ошибку, после добавления одной записи.
Создал аналогичную таблицу при помощи VFP, выполнил запрос и ура!

Если можно продолжить тему, то скажите пожалуйста, каким компонентом Delphi лучше использовать для работы с данными FoxPro и как прикрутить драйвер FoxPro9?

#$@^%$$$% !!!
Я-бы даже крепче сказал. НИКОГДА не работайте посредством FoxPro с DBF, созданными в Дельфи.
У меня давно такое ощущение, что эти самые дельфийские псевдо-DBF понимаются исключительно только самой Дельфи.
Слава богу, вам полегчало :)
Да, я работаю с Дельфи, а фокспро использую для тестирования запросов, если в Дельфи команды не идут. Вот так вот! Уже усвоил урок на будущее!
...
Рейтинг: 0 / 0
27.08.2009, 21:43
    #36167045
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
VadyЕсли можно продолжить тему, то скажите пожалуйста, каким компонентом Delphi лучше использовать для работы с данными FoxPro и как прикрутить драйвер FoxPro9?
Я только не пойму, зачем создавать таблицы в Delphi, чтобы потом работать с ними в VFP (и наоборот). К слову - как-то случайно залез в дельфийский форум и увидел тему насчет создания DBF. Заинтересовался и ... был в шоке. В приведенном там кусочке Delphi-кода даже профану (но спецу по FoxPro) было видно, что при создании таблицы почему-то задавались нулевые длины символьных полей. Я прикинулся вещмешком и спросил их "это как ?". На что получил очень "логичный" ответ - "А Delphi сама знает, какие надо".
...
Рейтинг: 0 / 0
27.08.2009, 22:00
    #36167056
Vady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос INSERT+SELECT
rewareсоздавать таблицы в Delphi, чтобы потом работать с ними в VFP (и наоборот). К слову - как-то случайно залез в дельфийский форум и увидел тему насчет создания DBF. Заинтересовался и ... был в шоке. В приведенном там кусочке Delphi-кода даже профану (но спецу по FoxPro) было видно, что при создании таблицы почему-то задавались нулевые длины символьных полей. Я прикинулся вещмешком и спросил их "это как ?". На что получил очень "логичный" ответ - "А Delphi сама знает, какие надо".
:D
На Дельфи, считаю, вполне реально поднять подобное, чтобы можно работать с VFP (и наоборот) - для этого нужно просто задействовать родные VFP драйвера. Ладно, пойду поискать, где его достать и как его прикрутить к нему.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите составить запрос INSERT+SELECT / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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