2013-09-23 7 views
1

Мне нужно создать сохраненный запрос MS Access из моей программы VB.net с помощью OleDb. Но прежде чем я создам запрос, мне нужно проверить и посмотреть, существует ли он в базе данных. Если он существует, я хочу его обновить. Как проверить существующий запрос в MS Access с помощью OleDb?Проверка существующего сохраненного запроса в MS Access

+5

Вы исключили попытку создать запрос доступа и захватить ошибку, когда она уже существует? – HansUp

+2

Если вы собираетесь создать запрос в VBA, вы всегда можете поставить 'On Error Resume Next' в строке перед определением запроса. Затем сразу после запроса введите 'On Error Goto Err_Handler'. Очевидно, Err_Handler можно назвать по-разному. Это создало бы запрос только в том случае, если он не существует и не будет генерировать ошибку, если он существует. – Linger

+0

@HansUp Я никогда не делал ловушек ошибок. Не могли бы вы привести краткий пример? – gromit1

ответ

2

«Если он существует, я хочу его обновить».

Основываясь на обсуждении комментариев, я понимаю, что вы создадите инструкцию для соединения OleDB для создания запроса. (In Access parlance, a QueryDef.)

Когда запрос еще не существует, выполнение выполняется успешно, и все готово.

Если запрос действительно существует, попытка выполнения вызовет ошибку, в результате которой вы поймаете ловушку в коде VB.Net. В этот момент вы хотите пересмотреть существующий запрос. К сожалению, я не знаю, как изменить существующий запрос с помощью OleDb. Тем не менее, вы можете отменить существующий запрос и повторно выполнить свой оператор для создания новой версии.

Вы можете выполнить оператор DDL доступа, чтобы отменить существующий запрос. Один из этих двух вариантов будет делать то, что вам нужно:

  1. DROP VIEW YourQueryNameHere;
  2. DROP PROCEDURE YourQueryNameHere;

Первый предназначен для простых SELECT запросов. Второй - для того, что Access вызывает «запросы действий»: INSERT; UPDATE; DELETE. Запрос «make table» (SELECT <field list> INTO NewTable FROM ...) также относится ко второй (ПРОЦЕДУРА) категории, как я помню (проверьте, нужно ли вам это делать). Я думаю, что запрос SELECT с PARAMETERS также попадает в эту вторую категорию (при необходимости проверьте).

Обратите внимание, что это только рекомендуемое направление. Я не могу предложить вам код VB.Net. И я надеюсь, что вы знаете или можете понять, как сделать необходимую обработку ошибок в VB.Net.

+1

Насколько мне известно, представления и процедуры являются операциями 'select'. Access вызывает его просмотр, если он не использует никаких параметров (например, значение элемента управления формой) и процедуры, если он это делает. – Yawar

+2

Мне нравится идея просто отбросить существующий запрос и создать новый. Легче обойти возможную ошибку «не существует», чем выяснить, как изменить запрос. – Yawar

+0

@ HansUp Это похоже на путь! Я начну работать над этим! Благодаря! – gromit1

Смежные вопросы