나는 Excel 프로젝트와 함께 가구의 평화를 계산하는 데 도움이되고 있습니다. 첫 번째 작업은 데이터베이스에서 모든 자료를 선택하는 것입니다. 액세스 MDB 파일을 조회하는 동안 VBA : 서버에서 Excel로 액세스 쿼리
Sub Material_search()
Dim cnt As New ADODB.connection
Dim rst As New ADODB.Recordset
Dim rcArray As Variant
Dim sSQL As String
Dim db_path As String, db_conn As String
Dim item As String
item = Replace(TextBox1.Text, " ", "%") ' Search word
sSQL = "Select Data, NomNr, Preke, Matas, Kaina, Tiek from VazPirkPrekes " & _
"Where VazPirkPrekes.PirkVazID IN (SELECT VazPirkimo.PirkVazID FROM VazPirkimo Where VazPirkimo.Sandelys like '%ALIAVOS')" & _
" and Year(VazPirkPrekes.Data)>=2011 and Preke Like '%" + item + "%' and Kaina > 0" & _
" Order by Preke, Data Desc"
db_path = Sheets("TMP").Range("B6").value
db_conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db_path & ";"
cnt.Open db_conn
rst.Open sSQL, cnt, adOpenForwardOnly, adLockReadOnly
ListBox1.Clear
If Not rst.EOF Then
rcArray = (rst.GetRows)
rcArray = WorksheetFunction.Transpose(rcArray)
Dim a As Variant
With ListBox1
.ColumnCount = 6
.list = rcArray
.ListIndex = -1
End With
End If
rst.Close: Set rst = Nothing
cnt.Close: Set cnt = Nothing
Label4.Caption = UBound(ListBox1.list) + 1
End Sub
최근에 내가 몇 가지 문제를 내놓았다 : 이 코드입니다. 문제는 데이터베이스 파일이 로컬 디스크에있을 때 검색이 매우 빠르게 작동하지만 데이터베이스 파일을 서버에 넣을 때 검색이 10 배 이상 길어지기 때문에 적합하지 않습니다.
이 코드에 대한 최적화가 있습니까? 아니면 그 쿼리가 액세스 '데이터베이스 엔진이 두 테이블에서 모든 190K 행을 검색해야하는 서버 문제를 사전
코드를 최적화했다하더라도 - 그것은 할 수있다 염치 - - 문제는 원격 쿼리입니다. 네트워크 속도, 대기 시간 또는 Access가이 용도로 설계되지 않았기 때문일 수 있습니다 ... Access에 액세스 할 수없고 더 많은 용도로 사용할 수없는 경우 쿼리를 매개 변수화하고 Access에 저장할 수 있습니다. Excel 프로젝트에서 원격으로 호출 할 수 있습니다. 비록, 나는 여전히 차이가별로 없을 것이라고 생각합니다 : P – Xophmeister
일반적인 문제는 긴 경로입니다. 매핑 된 드라이브를 사용해 보셨습니까? – Fionnuala
@Xophmeister 액세스는 서버에서 정상적으로 작동하며 수년간 사용해 왔습니다. 이것을 위해 설계되었습니다. 다중 사용자 환경에서 백엔드가 서버에서 사용되고 프론트 엔드가 사용자 PC에서 사용되는 것이 좋습니다 Microsoft 문서를 확인하십시오. – Fionnuala