#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» в базе данных как дату, но с текстом это работает сейчас