powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выполнить запрос из внешнего приложения
13 сообщений из 13, страница 1 из 1
Выполнить запрос из внешнего приложения
    #39077725
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Пишу приложение на Vb, из него надо выполнить сохраненный запрос вида Insert into ... Select

Запрос обновляет таблицу со сложным ключом и вставляет только несовпадающие записи. Если выполнять его из интерфеса Access - он ругается на то, что ошибка вставки, дескать, не все данные будут вставлены и прочая, но тем не менее в итоге данные вставляет.
Если же пытаться выполнитье го из внешнего приложения (через adodb.connection.execute, получаю просто номер ошибки, данные не добавляются).
Подскажите, пожалуйста, где копать, чтобы все-таки вставить данные?
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39077743
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fundddЗапрос обновляет таблицу со сложным ключом и вставляет только несовпадающие записи.
Ну так откорректируйте запрос так, чтобы записи, вызывающие ошибку дублирования ключа, отсеивались секцией отбора.
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39078192
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Э нет :)
В этом как раз таки и есть фишка этого запроса.
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39078201
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fundddЭ нет :)
В этом как раз таки и есть фишка этого запроса.
Фишка в вашем не правильном запросе?
Жесть.
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39078204
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с чего вы взяли, что он неправильный?
Обычное дело - запрос на обновление (записать в таблицу A записи из таблицы B, в таблице A отсутствующие).
NOT IN слишком ресурсоемкий метод.

Впрочем, я не настаиваю. Подскажите, какой запрос будет более праивльный?
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39078219
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fundddА с чего вы взяли, что он неправильный?
Обычное дело - запрос на обновление (записать в таблицу A записи из таблицы B, в таблице A отсутствующие).
NOT IN слишком ресурсоемкий метод.

Впрочем, я не настаиваю. Подскажите, какой запрос будет более праивльный?
Вы придумали сложный ключ.
Мы о нем ничего не знаем.
Мы даже не знаем схему вашей судя по всему псевдобазы.
>>Обычное дело - запрос на обновление (записать в таблицу A записи из таблицы B, в таблице A отсутствующие)
Впечетлило.
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39078224
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fundddОбычное дело - запрос на обновление (записать в таблицу A записи из таблицы B, в таблице A отсутствующие).
Обычное дело-житейское.
Чё в форум писать.
Оно же "обычное".
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39078272
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fundddЕсли выполнять его из интерфеса Access - он ругается на то, что ошибка вставки, дескать, не все данные будут вставлены и прочая, но тем не менее в итоге данные вставляет.
Если же пытаться выполнитье го из внешнего приложения (через adodb.connection.execute, получаю просто номер ошибки, данные не добавляются).
Угу. Аксесс - не только БД, но и интерфейс. И может себе позволить вставку по одной записи. ADODB - нет.

fundddгде копать, чтобы все-таки вставить данные?
Вариантов несколько.
Первый вариант - это сохранение данных во временную таблицу, и затем вставка из неё только уников. Вряд ли выиграете по времени, но точно выиграете по ресурсам.
Второй - отказаться от ADO и порулить Access.Application.
Третий (и самый имхо правильный) - всё-таки переделать запрос. А чтобы WHERE NOT IN не создавало избыточной нагрузки - убрать по возможности отсев дублей в основной селект частными условиями.
Можно понапридумывать и ещё вариантов - только лень дурь генерить.
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39078430
Давайте с начала. У вас приложение на Vb, использующее MDB/AccDB в качестве хранилища?
Таблица-источник и таблица-получатель находятся в одном файле?
Как выглядит сложный ключ? Это одно поле или несколько?
Классическое решение ("Записи без подчиненных") для Jet:
Код: plsql
1.
...FROM [Источник] LEFT JOIN [Приемник] ON [Источник].[Ключ]=[Приемник].[Ключ] WHERE [Приемник].[Ключ] Is Null


Другой вариант (если NOT IN слишком ресурсоемкий) использовать Not EXISTS.
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39078754
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий, Акина, спасибо!

Вариант Анатолия очень изящный, его и возьму на вооружение, спасибо еще раз!
Рой, нам грубиянов не надо. Мы и сами грубияны.
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39079265
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fundddЗапрос обновляет таблицу со сложным ключом и вставляет только несовпадающие записи.

Зло скорее всего тут : со сложным ключом

Если этот ключ так дорог (без подагры уже никак, привычка) - можно его и оставить...
1. На стороне, которая генерирует записи добавляем поле счетчик.
2. На стороне, которая принимает записи добавляем поле длинное целое (для хранения зн. счетчика из п.1).
Каждый раз импортируем только те записи, значения счетчика которых в генераторе больше максимального длинного целого в приемнике на момент импорта.

Есть конечно нюансы:
- ничего не известно по генератор (возможно для него сделать счетчик не судьба и нужны надстройки на том же vb)
- если генератор не один, нужно добавлять еще и в приемник и в генераторы поле признака генератора...
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39079269
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fundddОбычное дело - запрос на обновление (записать в таблицу A записи из таблицы B, в таблице A отсутствующие).

Согласен, за исключением - того, что запрос на добавление...
...
Рейтинг: 0 / 0
Выполнить запрос из внешнего приложения
    #39079759
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно.

Всем спасибо, уже реализовал
Код: sql
1.
...FROM [Источник] LEFT JOIN [Приемник] ON [Источник].[Ключ]=[Приемник].[Ключ] WHERE [Приемник].[Ключ] Is Null
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выполнить запрос из внешнего приложения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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