Синтаксическая ошибка в VBA SQL ACCDB ожидаемое выполнение ‘DELETE’, ‘INSERT’, ‘SELECT,’PROCEDURE’ или ‘UPDATE’

#sql #ms-access #vba

#sql #ms-access #vba

Вопрос:

Я хочу создать кнопку для подсчета действий в Outlook.

У меня есть следующий код, но, к сожалению, он не работает:

 Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection

conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:UHD-GEOBANSPOC und IncidentScreenshotsSvenVBAstatistik.accdb; Persist Security Info=False;"
conn.Open
'DB: ID; currentDate; spocmail; onlinebankingmail
conn.Execute ("IF (NOT EXISTS(select * from tbl_statistics WHERE currentDate = '" amp; Date amp; "'))BEGIN INSERT INTO tbl_statistics(currentDate, spocmail) VALUES('" amp; Date amp; "', '1') END ELSE BEGIN UPDATE tbl_statistics SET spocmail = spocmail   1 WHERE currentDate = '" amp; Date amp; "' END")
  

Я также хотел бы знать, возможно ли поместить длинные инструкции SQL в несколько строк в коде VBA

Спасибо за пересылку

Комментарии:

1. Я не могу помочь вам с вашим основным вопросом, но также да. Вы можете разделить код, используя «amp; _» в качестве перевода строки, без кавычек.

2. Спасибо за ваш быстрый ответ. Это работает для «обычного» кода VBA, но я не могу использовать «amp; _» или «_» в качестве прерывания строки в самой инструкции SQL, поскольку код становится красным, и я получаю простую «синтаксическую ошибку»

3. Я полагаю, это потому, что вы передаете строку, поэтому, когда вы разбиваете строку, вам нужно заканчивать строку и начинать ее заново при каждом разрыве строки.

4. Вы пытались запустить инструкцию SQL в своей базе данных? Я думаю, что это недопустимый SQL-код для базы данных Access, но я не уверен.

5. Я согласен, ЕСЛИ/ELSE / BEGIN / END больше похоже на T-SQL, в Access SQL таких конструкций нет

Ответ №1:

 Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection

conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:UHD-GEOBANSPOC und IncidentScreenshotsSvenVBAstatistik.accdb; Persist Security Info=False;"
conn.Open
set rs = new ADODB.Recordset
rs.open "Select * from tbl_statistics where currentdate = #" amp; format(date(),"dd mmm yyyy") amp; "#" ,conn
'unless you're in the US not specifying the date format will bite you
if rs.eof then 
     conn.execute "INSERT INTO tbl_statistics(currentDate, spocmail) VALUES('#" amp; format(Date,"dd mmm yyyy")  amp; "#', '1') 

else
   conn.execute "UPDATE tbl_statistics SET spocmail = spocmail   1 WHERE currentDate = '#" amp; format(Date,"dd mmm yyyy" amp; "#"
end if
  

Комментарии:

1. Спасибо за ваш ответ, к сожалению, это, похоже, не работает :/

2. где это ошибка? У меня нет таблиц, поэтому я не могу протестировать ни одну из них — возможно, я допустил синтаксическую ошибку

3. неважно — сейчас это работает. Я объявил «currentDate» в базе данных как дату, но с текстом это работает сейчас