2016-11-09 3 views
0

Я получаю ошибку До нескольких параметров. Ожидаемый 1. с этим УВОЙ и я не знаю, как ввести это правильно ...Доступ к VBA - где пункт

Dim rs_invoice As DAO.Recordset 
Set rs_invoice = CurrentDb.OpenRecordset("SELECT * FROM order_tbl WHERE invoice_no Is Null AND company_name='" _ 
& Me.cmb_start_company.Column(1) & "' AND shiped=" & "True") 


If Not (rs_invoice.EOF And rs_invoice.BOF) Then 
    rs_invoice.MoveFirst 
    Do Until rs_invoice.EOF = True 
     rs_invoice.Edit 
     rs_invoice!invoice_no = invoice_number 
     rs_invoice.Update 

     rs_invoice.MoveNext 
    Loop 
Else 
    'No records 
End If 

'Finish 


rs_invoice.Close 'Close the recordset 
Set rs_invoice = Nothing 'Clean up 

Благодаря

+0

не удался вы делаете то же самое с одной командой SQL в строках 'UPDATE order_tbl SET invoice_no =" & invoice_number & "WHERE invoice_no Is Null AND company_name = '" & Me.cmb_start_company.Column (1) & "' AND shiped = True' ? Хотя я выступаю за использование параметров SQL вместо конкатенации строк. –

+0

Спасибо, но я действительно не знаю, как использовать этот код, можете ли вы отправить образец, пожалуйста? Спасибо – Pecurka

+0

Я не знаком с VBA, но это выглядит как [Что эквивалент VBA для использования Command.Prepare в ADO.NET] (http://stackoverflow.com/a/1746897/1115360) может вам помочь. –

ответ

0

Я не все, что знаком с Access/DAO, но вы конкатенация значения параметра в запрос. С помощью ADO вашего текста команды будет выглядеть примерно так вместо этого:

Const sql As String = "SELECT * FROM order_tbl WHERE invoice_no Is Null AND company_name = ? AND shiped = True" 

? является заполнителем для значения параметра; вместо того, чтобы напрямую звонить OpenRecordset(sql), вам необходимо сделать Command и добавить Parameter.

Кажется, что DAO обрабатывает это несколько иначе, см. Parameterized queries in Access - безусловно, один из ответов применим здесь. Потому что я не люблю случайные запросов Времнных ударяя мои базы данных я бы, вероятно, пойти с QueryDefs подходом в this answer:

Dim qdf As Querydef 
Dim rst As Recordset 

'then we'll open up the query: 
Set qdf = CurrentDB.QueryDefs(qryname) 

'Now we'll assign values to the query using the parameters option: 
qdf.Parameters(0) = qryStartDate 
qdf.Parameters(1) = qryEndDate 

'Now we'll convert the querydef to a recordset and run it 
Set rst = qdf.OpenRecordset 

Это было бы:

Dim query As QueryDef 
Set query = CurrentDB.QueryDefs("TheQuery") 

query.Parameters(0) = Me.cmb_start_company.Column(1) 

Dim result As Recordset 
Set result = query.OpenRecordset 
+0

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

+0

Я закончил с новым запросом .. спасибо всем :) – Pecurka

1

Просто угадать. Вы можете попробовать это:

"SELECT * FROM order_tbl WHERE (invoice_no Is Null) AND (company_name='" _ 
& Me.cmb_start_company.Column(1) & "')AND (shiped=" & "True") 

вариант 2:

dim str_test as string 
str_test =  "SELECT * FROM order_tbl WHERE (invoice_no Is Null) AND (company_name='" & Me.cmb_start_company.Column(1) & "')AND (shiped=" & "True") 

debug.print str_test 

Что вы получите в ближайшем окне?

вариант 3:

"SELECT * FROM order_tbl WHERE (invoice_no Is Null) AND (company_name='" _ 
    & Me.cmb_start_company.Column(1) & "')AND (shiped=True)" 

вариант 4: Затем используйте образец для здесь и он должен работать. https://msdn.microsoft.com/en-us/library/bb243786(v=office.12).aspx Возможно. Просто убедитесь, что вы установили ваш записей одинаково:

Dim dbsNorthwind As DAO.Database 
Dim rstProducts As DAO.Recordset 
Dim strSQL As String 

Set dbsNorthwind = CurrentDb 
strSQL = "SELECT * FROM Products WHERE Discontinued = No " & _ 
     "ORDER BY ProductName" 
Set rstProducts = dbsNorthwind.OpenRecordset(strSQL) 
+0

я испытал сейчас и я получил ту же ошибку:/ – Pecurka

+0

@Pecurka - см вариант 2 – Vityata

+0

я получил это в ближайших окнах SELECT * FROM order_tbl WHERE (invoice_no Is Null) и (company_name =» Bogdanic GmbH doo ') AND (отправлено = True) – Pecurka