私は、リンクされたSQLテーブルを使用してアクセスMDEファイルで更新する共有ホスティングアカウントでホストされている小さなデータベースを持っています。 1日。WAN経由でSQL ServerのテーブルをWAN経由でアクセスするアクセスが遅い
基本的には、小さな(20行未満)ユーザーテーブルと(現在)1000行のデータテーブルがあります。
基本的に私のMDEの「フロントエンド」は、本番データベースのデータをAccessの一時テーブルに照会し、ホスティングプロバイダの2つのリモートテーブルからデータを削除して再投入します。したがって、2つのサーバー(ローカルサーバーとリモートサーバーの1つ)にリンクされていますが、これが問題になることがあります。
多くの人がデータへのアクセスを求めているため、データが徐々に増加しています。現在、1000行のテーブルには、リンクテーブルを使用して削除/再投入するのに約5分かかります。
SQL Passthroughを使用してリモートテーブルのデータを削除することで、遅さのPARTを軽減しました。削除は瞬時に近いです。
私の一時データは、ローカルMDEファイル上にあり、それは(今よりも速くならない)のは意味がありませんアップロードしかし、私はAPPENDのために同じことを行うことはできません。
私が知りたいのは、どのようにしてAPPENDクエリをリモートサーバーに高速化できますか? 1000行のデータ(8列のようなもので、ヌルが少ないもの)は、Excelに置くと非常に大きくはありません(カップル100 KB、MAYBE)。
ユーザーとデータテーブルの両方にタイムスタンプのデータ列があります。これは、Accessがタイムスタンプと行の比較をチェックできるため、Access - > 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が立ち往生しています。私はテーブルの2つの最も重要なフィールドに絞り込み、他の競合を排除しようとしました。
ERROR:[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をレコードごとに1つのINSERT(Jet/ACEがバッチINSERTをODBCサーバーデータベースに送信する仕組み)に分割する際に、Jet/ACEの間違った決定をバイパスする可能性があります。 –