가 내가 작업 스케줄러를 여러 번를 통해 실행됩니다 연결된 SQL 테이블에 액세스 MDE 파일을 통해 업데이트 우리의 공유 호스팅 계정에서 호스팅되는 작은 데이터베이스를 가지고 매우 느린 종료 하루.업데이트 SQL Server 테이블은
가 기본적으로 작은 (20 행 이하)의 사용자 테이블, 및 (현재) 1,000 행 데이터 테이블.
기본적으로 내 MDE '프런트 엔드'는 프로덕션 데이터베이스의 데이터를 Access의 임시 테이블로 쿼리하고 호스팅 공급자의 두 원격 테이블에서 데이터를 삭제 한 다음 다시 채 웁니다. 따라서 두 대의 서버 (로컬 서버 하나와 원격 서버 하나)에 연결되어 있으며 때로는 문제가 될 수 있다고 읽었습니다. 더 많은 사람들이 자신의 데이터에 대한 액세스를 요청대로
이 데이터는 천천히 성장하고, 현재 1000 개 행이 테이블은/삭제 연결된 테이블을 사용하여 다시 채울 약 5 분 정도 소요됩니다.
것은 내가 SQL 패스 스루를 사용하여 원격 테이블 데이터를 삭제하여 느림의 일부를 완화했습니다. 삭제는 거의 즉각적입니다. 내 임시 데이터가 로컬 MDE 파일에 그것을 업로드하는 것은 아무 의미 (지금보다 더 빨리되지 않을 것)를하지 않습니다 때문에
그러나, 나는 APPEND 위해 동일을 할 수 없습니다.
원격 서버에 대한 APPEND 쿼리의 속도를 높이려면 어떻게해야합니까? 1000 행의 데이터 (null이 8 열과 같은 것)는 Excel에 두었을 때 그다지 크지 않습니다 (몇 백 킬로바이트, MAYBE). APPEND가 오랫동안 사용하는 것은 의미가 없습니다.
사용자 및 데이터 테이블은 모두이 액세스 속도를하는 데 도움이 내가 읽은, 타임 스탬프 데이터 열이 -> SQL은 액세스가 행 단위로 비교하는 대 타임 스탬프를 확인할 수 있기 때문에 /이 추가 삭제합니다.
나는 이것을 가속화하는 방법에 대한 몇 가지 제안을 원합니다. 어떤 방식 으로든 엄청난 양의 데이터가 아닙니다.
Private Sub UpdateWebFunc()
On Error GoTo errors
Dim conn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
Dim rst2 As DAO.Recordset
Dim qdf As DAO.QueryDef
conn.ConnectionString = "Blah blah blah here"
conn.Open
Set qdf = CurrentDb.QueryDefs("GetWebData")
Set rst2 = qdf.OpenRecordset
If Not rst2.BOF And Not rst2.EOF Then
rst2.MoveFirst
End If
With cmd
.CommandText = ”sp_UpdateWeb”
.CommandType = adCmdStoredProc
.ActiveConnection = conn
.NamedParameters = True
'.Parameters.Append .CreateParameter("@RETURN_VALUE", adInteger, adParamReturnValue, 0)
.Parameters.Append .CreateParameter("@SampID", adVarChar, adParamInput, 50)
.Parameters.Append .CreateParameter("@ReportTitle", adVarChar, adParamInput, 50)
End With
conn.BeginTrans
Do Until rst2.EOF
cmd.Parameters("@SampID") = rst2!SampID
cmd.Parameters("@ReportTitle") = rst2!ReportTitle
cmd.Execute , , adExecuteNoRecords
rst2.MoveNext
Loop
conn.CommitTrans
conn.Close
Set cmd = Nothing
rst2.Close
Set rst2 = Nothing
errors:
MsgBox "Number: " & Err.Number & vbCr & " Description: " & Err.Description
End Sub
구문 오류로 인해 cmd.execute가 계속 울려 퍼집니다. 나는 다른 갈등을 없애기 위해 테이블에서 가장 중요한 두 필드로 좁히려 고 노력했습니다.
오류 : [Microsoft] [ODBC SQL Server 드라이버] 구문 오류 또는 액세스 위반
여기 내 SP의 :
USE [MYDB]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[sp_UpdateWeb]
-- Add the parameters for the stored procedure here
@SampID VarChar(50),
@ReportTitle VarChar(50)
AS
BEGIN
-- Insert statements for procedure here
INSERT INTO [dbo].[WEB] (SampID, ReportTitle) VALUES (@SampID, @ReportTitle)
END
다른 도구를 사용하여 문제가 Access 또는 연결 또는 호스트로 인한 것인지 확인할 수 있습니다. –
아마도 약간의 문제 일 것입니다. 방금 원격 호스트의 테이블에 5200 개의 행을 추가 한 SQLMS를 통해 업데이트를 실행했으며 약 6 분이 걸렸습니다. :/ – Mindflux
삽입에 ADO를 사용해 보셨습니까? 일괄 처리 INSERT를 레코드 당 하나의 INSERT (Jet/ACE가 일괄 INSERT를 ODBC 서버 데이터베이스로 보내는 방법)로 분류 할 때 Jet/ACE의 잘못된 결정을 무시할 수 있습니다. –