2016-07-14 8 views
0

У меня есть 2 таблицы 'tbl_Images' и 'tbl_ImagesDetails'. В 1-й таблице есть ImageID, которые не найдены во второй таблице.Как вставить строки в MS Access из запроса, который находит непревзойденные записи, используя vb.net

Я сделал запрос, который сначала находит несогласованные записи, а затем добавляет результирующие строки ко второй таблице.

Если я запустил запрос внутри Access 2010, он запрашивает подтверждение, а затем строки добавляются.

Однако, если я запустил его из VB.net, он не добавляет строки и сообщения об ошибке нет. Вот код:

Dim strsql As String = "INSERT INTO tbl_ImagesDetails (ImageID) 
SELECT tbl_Images.ImageID 
FROM tbl_Images LEFT JOIN tbl_ImagesDetails ON tbl_Images.[ImageID] = tbl_ImagesDetails.[ImageID] 
WHERE (((tbl_Images.ImageID) Like 'ZOOMED*') 
AND ((tbl_ImagesDetails.ImageID) Is Null));"   
'Debug.Print(strsql) 

Dim MyConn As New OleDbConnection(connString) 
Dim cmd As New OleDbCommand(strsql, MyConn) 
cmd.CommandType = CommandType.Text 

If Not MyConn.State = ConnectionState.Open Then MyConn.Open() 

Dim iResult As Integer = cmd.ExecuteNonQuery() 
Return iResult 

Запрос выше должен возвращать 9 строк, но iResult = 0

Мои вопросы:

  1. ли окно подтверждения получения на пути? Если да, то как мне переопределить использование кода vb?

  2. Выполняет ли ExecuteNonQuery() возможность вставки нескольких строк за один раз?

  3. Как вставить строки, которые являются результатом другого запроса (т. Е. В рамках одного запроса)?

+0

Кое-что, что я только что нашел: В Access мне было интересно узнать разницу между «Просмотр» (тот, который имеет значок сетки) и «Выполнить» (один с восклицательным знаком). Если я нажму «Открыть», отобразится только сетка с 9 строками, если щелкнуть восклицательный знак, она добавит строки. Есть ли код vb для его запуска? – Jnnno

ответ

0

1) Не удалось ли установить диалог подтверждения? Если да, то как мне переопределить использование кода vb?

Ans: Нет подтверждения Если вы выполняете команды с помощью кода, т.е. vb.net

2) Есть ли ExecuteNonQuery() позволяет вставить несколько строк в один присест?

Ответ: Да

3) Как можно вставлять строки, которые являются результатом другого запроса (т.е. в пределах одного запроса)?

Я думаю, что вам нужно проверить результаты/записи, полученные по запросу в vb.net, возможно, не получить никакой записи. Лучше написать функцию для проверки извлеченных записей. В противном случае это нормально.

Надеюсь, это поможет!

+0

Чтобы проверить выбранные записи, вы имеете в виду: 1) запустить отдельный запрос или 2) добавить еще одну команду в существующий запрос? Как сделать второй? Благодарю. – Jnnno

+0

Первая часть (проверка записей в выбранном запросе) предназначена для целей тестирования. Я подозреваю, что запрос может не извлекать какую-либо запись. У меня нет MS-Access локально, поэтому я не могу выполнять само тестирование. Спасибо – Sami

+0

Вы правы, это не возвращает записи. Теперь позвольте мне посмотреть, где находится блокпост ... – Jnnno