2015-10-08 3 views
0

Я новичок в Excel VBA. У меня есть UserForm, в котором я пытаюсь заполнить записи об исключении, введенные сотрудником в течение текущего месяца. У меня есть база данных, называемая Ofc. В соответствии с которым у меня есть таблица Codeusage.SQL Query, чтобы вытащить записи записи исключения

Основной ключ Sno. Вот имя полей в таблице. Codeusage детализирует структуру и сохраненные записи.

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

Содержимое таблицы Codeusage:

 
Sno PeoplesoftId Date of exception Start of exception End of exception Exception time in minutes Code used Reason for code usage Authorized By  
36 43243312 10/7/2015 12:10:00 AM 12:15:00 AM 05 Code 11 - Coaching fg Maddala  
37 43243312 10/7/2015 4:20:40 AM 4:35:40 AM 15 Code 3 - Team Meeting lsdfj Abhishek  
38 43243309 10/7/2015 1:00:00 AM 1:15:00 AM 15 code 19 - onetoone kwjke Atanu  
39 43243312 10/6/2015 12:00:00 AM 12:10:00 AM 10 Code 11 - Coaching sajjkh Maddala 

Дизайн вид таблицы

 
Sno        AutoNumber  
PeoplesoftId      Text 
Date of exception     Date/Time 
Start of exception     Date/Time 
End of exception     Date/Time 
Exception time in minutes   Text 
Code used       Text 
Reason for code usage    Text 
Authorized By      Text 

Это написано в заявлении SQL:

SQL1 = "SELECT * FROM CodeUsage where PeoplesoftId=" & "'" & var & "'" & " or format(Date of exception,""MM"")=" & "'" & Format(Now, "MM") & "'" & "" 

Но дает a e rror.

+0

Когда вы задаете вопрос, есть руководство о том, как правильно форматировать ваш вопрос на правой стороне экрана. Пожалуйста, следуйте этому, чтобы ваш вопрос был читабельным и помог бы привлечь полезные ответы. Я отредактировал его для вас на данный момент, но, пожалуйста, улучшите отправку вопросов в следующий раз. – L42

+0

Если вы знакомы с тегами _HTML_, вы можете использовать некоторые из них здесь. См. Список здесь: http://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites – L42

+0

Нет, я не знаком с HTML – user3395230

ответ

0

Пару моментов:

  1. Я предлагаю вам параметризировать запрос. Вам понадобится только один тактик, чтобы переименовать его идентификатор «0; DROP TABLE Codeusage» или некоторые такие веселые шутки и неаналитированные текстовые команды SQL могут дать вам целый мир боли.
  2. Имена столбцов с пробелами созревают для возникновения проблем и обычно считаются плохими проектами, поэтому я удалю эти пробелы, если возможно. Если нет, то вам понадобится цитата имена ваших столбцов. Вам нужно будет проверить, что работает для вашей конкретной системы, но прямые скобки будут хорошей первой ставкой.

Вам нужно будет скорректировать код ниже, чтобы соответствовать конкретным требованиям вашей базы данных (вы не укажете, какой из них), но это то, что я сделал бы для чего-то вроде SQL Server или SQLite. Обратите внимание, что я ссылки Microsoft ActiveX Data Objects 6.1 Library через Tools -> References):

Dim conn As ADODB.Connection 
Dim cmd As ADODB.Command 
Dim prm As ADODB.Parameter 
Dim rs As ADODB.Recordset 
Dim firstOfMonth As Date 
Dim lastOfMonth As Date 
Dim PeoplesoftId As String 

'Open the database connection 
Set conn = New ADODB.Connection 
conn.CursorLocation = adUseClient 
conn.Open "[Your connection string goes here]" 

'Define your query parameters 
PeoplesoftId = "43243312" 
firstOfMonth = DateSerial(Year(Now), Month(Now), 1) 
lastOfMonth = DateSerial(Year(firstOfMonth), Month(firstOfMonth) + 1, 0) 

'Create your command 
Set cmd = New ADODB.Command 
cmd.ActiveConnection = conn 

'Command text 
cmd.CommandText = "SELECT * FROM CodeUsage" & _ 
        " WHERE PeoplesoftId=?" & _ 
        " AND Date_of_exception>=?" & _ 
        " AND Date_of_exception<=?" 'note I've replaced your spaces with underscore 

cmd.CommandType = adCmdText 

'Command parameters 
Set prm = cmd.CreateParameter(, adChar, adParamInput, Len(PeoplesoftId), PeoplesoftId) 
cmd.Parameters.Append prm 

Set prm = cmd.CreateParameter(, adDate, adParamInput, , firstOfMonth) 
cmd.Parameters.Append prm 

Set prm = cmd.CreateParameter(, adDate, adParamInput, , lastOfMonth) 
cmd.Parameters.Append prm 

'Execute the command - returns a RecordSet 
Set rs = cmd.Execute 

'Close the connection 
conn.Close 
+0

SQL1 = "SELECT * FROM CodeUsage, где PeoplesoftId =" & "'" & var & "'" & "AND (Date_of_exception> =" & "'" & firstOfMonth & "')" & "AND (Date_of_exception> =" & "'" & lastOfMonth & "')" & "" – user3395230

+0

Я внес изменения в инструкцию sql следующим образом, но это дает мне ошибку несоответствия данных – user3395230

+0

, где на основе предложения om я обновил поля – user3395230

Смежные вопросы