2016-03-11 4 views
1

Я делаю отчет в MS Access - то, что я пытаюсь сделать здесь, в основном ПРИЛОЖЕНИЕ запроса к таблице, которую я уже создал, - я выбираю первое значение, меняю его и обновляю стол. Проблема, с которой я сталкиваюсь - этот отчет будет использоваться приложением VB6. Таким образом, пользователь вообще не увидит доступ.MS Access VBA issue

Вещь с моим запросом append заключается в том, что для выполнения требуется USER ID (4-значное число). Обычно, когда я запускаю отчет в Access, я передаю параметры форме в Access - и я использую их для запуска запросов. Однако в этом случае мне нужно, чтобы пользователь вводил значение при добавлении запроса, кроме того, при добавлении запроса в VBA он сначала говорит "You are about to append a query, are you sure" (или что-то вдоль этих строк), так и есть способ автоматизировать это, поэтому, когда я добавляю это, ничего не происходит?

Вот мой код для добавления и выбора даты из tempTable:

CurrentDb.Execute "DELETE from [tempCompanyMgmt-NOW];" 
DoCmd.OpenQuery "qryCompanyMgmt-SUE" - i made this append! 
Set rs1 = CurrentDb.OpenRecordset("Select * from [tempCompanyMgmt-NOW]", , dbOpenDynamic) 

Так до тех пор, как я нажимаю OK, YES, когда я получаю уведомление о процессе АППЕНД и ввести параметр для USER ID - все работает хорошо.

ответ

0

Выглядит как опечатка в вашей уценке, если вторая линия будет:

DoCmd.OpenQuery "qryCompanyMgmt-SUE - i made this append!" 

Вам нужно удалить ссылку на форму внутри qryCompanyMgmt-SUE - i made this append! запроса, и поменять его на имя параметра. Вы можете использовать интерфейс Access для явного добавления предложения параметра в запрос, а затем с помощью ADO (или DAO) из VB6 установить значение параметра перед тем, как вы откроете/выполните запрос.

Сообщение "You are about to append a query, are you sure" является функцией доступа (и его можно отключить), поэтому, если вы хотите, чтобы приложение VB6 предоставило такое предупреждение, вам необходимо создать его самостоятельно с помощью MsgBox.

+0

Нельзя сказать «Я СДЕЛАЛ ЭТО ПРИЛОЖЕНИЕ» – FatBoySlim7

0

Один из вариантов мог бы поместить ваш запрос append в код и заполнить этот параметр таким образом.

Я не знаю, ваш точный сценарий, но что-то вроде:

If not isValidUserID(me.UserID) Then 
    msgbox "Please enter a a valid user id" 
    exit sub 
End If 



Dim strSQL As String 
strSQL = "DELETE * from [tempCompanyMgmt-NOW];" 
CurrentDb.Execute strSQL, dbFailOnError 


strSQL = "INSERT INTO tempCompanyMgmt-NOW (FieldName1, FieldName2, FieldName3) " & _ 
     "SELECT FieldName1, FieldName2, FieldName3 FROM tempCompanyMgmt WHERE UseriD=" & Me.UserID 

CurrentDb.Execute strSQL, dbFailOnError 

Чтобы проверить идентификатор пользователя вы могли бы сделать что-то вроде:

If (Len(me.UserID) = 4 And IsNumeric(me.UserID)) Then 

или

Public Function isValidUserID(varUserID As Variant) As Boolean 
Dim blnRet As Boolean 

If Len(varUserID) = 4 And IsNumeric(varUserID) Then 
    blnRet = True 
End If 

isValidUserID = blnRet 
End Function 
+0

Это похоже на атаку SQL-инъекций, ожидающую своего появления. Построение SQL с введенными пользователем строками - идея BAD. Доступ изолирован песочницей, но это еще не очень хорошая практика, потому что вы можете получить несогласованные данные. Представьте, было ли strEmpName «" ИЛИ ЯВЛЯЕТСЯ NULL ИЛИ НЕСКОЛЬКО "*" – ThunderFrame

+0

Я отредактировал, чтобы более точно отразить сценарий идентификатора пользователя. Нет проблем с атакой SQL-инъекции, поскольку будут приняты только 4-значные цифровые данные. –

+0

Мне не нужно его проверять.Мне нужно ссылаться на форму в Access, где значение передается изначально. Я передаю его frmInfo userID – FatBoySlim7

0

Чтобы избавиться от MsgBox, говоря мне, что я собираюсь добавить запрос, я включил его в свой модуль, прежде чем открывать свой append-запрос. .

DoCmd.SetWarnings False 

И я понял, когда у меня есть значение, передаваемое в форме (идентификатор пользователя), что значение получает передается в качестве параметра, когда мой запрос добавляемых. Так что все готово. Спасибо за помощь!