У меня есть документ excel, который я хочу связать с SQL-запросом. В документе excel у меня есть список номеров позиций. Всякий раз, когда номер элемента изменяется, я хочу, чтобы запрос sql запрашивал список номеров элементов и возвращал результат. В принципе, я хочу, чтобы лист excel использовал номер позиции в качестве параметра для номеров элементов базы данных? Номера элементов excel обновляются ежедневно.SQL Query обновляется при обновлении пользователем Excel
ответ
Имейте в виду, что это пример для того, что вы пытаетесь сделать. Не зная о своей базе данных или электронной таблице, я не могу гарантировать, что все это будет работать. По крайней мере, вам потребуется внести некоторые корректировки, прежде чем вы сможете их использовать.
Имея это в виду, я прокомментировал различные части кода, чтобы вы знали, что там происходит. Секции, которые имеют ***
, являются областями, которые вы можете изменить. Секции с ###
являются областями, в которых вы будете ИМЕЕТ, чтобы изменить его работу.
Этот код предполагает, что у вас есть список номеров элементов в столбце A листа 1, что каждый номер элемента возвращает только одну запись и что в вашем списке номеров элементов нет пустых ячеек.
Sub GrabItemInfo()
Dim objADO As New ADODB.Connection
Dim objRecSet As New ADODB.Recordset
Dim objCmd As New ADODB.Command
Dim strConn As String
Dim strSQL As String
Dim RowNum As Long
Dim errNum As Long
'open a connection to the database
'### change the properties for the connection to suit your needs
strConn = "DSN=DSNName; DBQ=Database; UID=Username; PWD=Password"
objADO.Open strConn
objCmd.ActiveConnection = objADO
objCmd.CommandType = adCmdText
'errNum is the row that the error log will start on
'***change errNum to change which row it starts on
errNum = 1
'***changeRowNum here to change which row to start on
RowNum = 1
'start the loop
Do Until ThisWorkbook.Sheets(1).Cells(RowNum, 1) = ""
On Error Resume Next
'### change the sql to whatever you need
'*** change the cells section if you're not using the first column
strSQL = "SELECT [field] FROM [table] WHERE ItemNum = " & ThisWorkbook.Sheets(1).Cells(RowNum, 1).Value
objCmd.CommandText = strSQL
Set objRecSet = objCmd.Execute
'pastes results from query into the cell next to the item number
'***change the cells section if you want to use a different column
ThisWorkbook.Sheets(1).Cells(RowNum, 2).CopyFromRecordset objRecSet
'clear out the recordset before the loops starts again
Set objRecSet = Nothing
'put the item number, error number, and error description on the second sheet of the work book
'***change the sheet number to put it on another sheet if you're already using the second
If Err > 0 Then
ThisWorkbook.Sheets(2).Cells(errNum, 1).Value = ThisWorkbook.Sheets(1).Cells(RowNum, 1).Value
ThisWorkbook.Sheets(2).Cells(errNum, 2).Value = Err.Number
ThisWorkbook.Sheets(2).Cells(errNum, 3).Value = Err.Description
On Error GoTo 0
End If
'raise the value for the row for the next iteration
RowNum = RowNum + 1
Loop
'clear out the connection
Set objADO = Nothing
Set objRecSet = Nothing
Set objCmd = Nothing
End Sub
Для получения дополнительной информации о строках подключения, я рекомендую http://www.connectionstrings.com Это большой ресурс, чтобы использовать для выяснения, какого типа соединения строки вам нужно. Связи строк могут быть ... сложными ... иногда, и это действительно помогает.
Если вам нужны какие-либо ресурсы для SQL, я бы порекомендовал http://www.w3schools.com/sql У них есть хорошее представление об этом там. Прошлое, получите хороший справочник, найдите наставника, присоединитесь к форумам (или Q & Сайты, подобные этому) и т. Д. Если вы посмотрите на тег SQL на этом сайте, появится дополнительная информация, а также некоторые рекомендуемые ресурсы как Что ж.
Удачи.
Вы не можете этого сделать без добавления отдельной таблицы запросов для каждого номера элемента в своей таблице. Однако вы можете добавить таблицу запросов, которая ищет информацию, необходимую для ВСЕХ номеров элементов, а затем выполнить поиск, чтобы объединить номера позиций в вашем листе excel с информацией из таблицы запросов. – PermaNoob
как вы это делаете? – CollegeHelp
У меня слишком много данных для выполнения таблицы запросов Мне нужно сделать номера позиций параметром запроса – CollegeHelp