2012-04-18 22 views
0

私はVB6アプリケーションを使用しています。どちらがMSAccessデータベースを使用していましたか。今私はSQL Serverへのデータベースアクセスを変更しています。 MSAccessからのデータの取得/更新まで、アプリケーションはDAOオブジェクトを使用していました。だから私はまた、DAOメソッドとSQL Serverを接続しようとしています。今私はデータベースを接続することができ、また、データを取得することができます。しかし、私はレコードを編集しようとしているときに、エラー "実行時エラー '3027'を更新できません。データベースまたはオブジェクトは読み取り専用です。"SQL ServerとのDAO接続を使用してVB6でレコードセットを更新する方法

Public LSWs As Workspace, LSDb As Database 
Dim lsConnString As String 
Dim l0 As Recordset, SQL0 As String 
Dim lehReturn As Integer, retrycount As Integer 

lsConnString = "ODBC;DRIVER=SQL Server;SERVER=SERVERName;DATABASE=" & DBname & ";APP=Visual Basic;UID=UID;PWD=PWD" 
Set LSWs = DBEngine.Workspaces(0) 
Set LSDb = LSWs.OpenDatabase(DBname, dbDriverNoPrompt, True, lsConnString) 
retrycount = 0 
SQL0 = "select * from schedule_hdr where status = '" & Trim(PCName) & "'" 
Set l0 = LSDb.OpenRecordset(SQL0, dbOpenDynaset, dbSeeChanges, adLockPessimistic) 
Do While Not (l0.EOF) 
    LSWs.BeginTrans 
    l0.Edit 
    l0!status = "R" 
    l0.Update 
    LSWs.CommitTrans 
    l0.MoveNext 
Loop 
l0.Close 

を、それはエラーに 「実行時エラー 『3027』を与えて、この行のコード を更新することはできませんl0.Editでエラーを与えているデータベースまたはオブジェクトが読まれるだけ どれヘルプ:私はここに私のコードを示しています。 !またはsuggesion事前に

感謝を返信!

+0

トランザクション「LSWs.BeginTrans」は本当に必要ですか?一度に1つのレコードを更新するだけなので、トランザクションはそこで役に立つものを何もしません。 ODBC接続が読み取り専用である可能性はありますか? – Martin

答えて

0

当初、私はあなたのSQLサーバーで使用しているユーザー名とパスワードは、おそらく読み取り専用の権利を有することができることを考えていてください。

これが当てはまらず、DAOを使いたい場合は、AccessのビルトインODBCリンク機能を使用することをお勧めします。これは、SQLサーバーに正常に接続するのに役立ちます。

しかし、私のアドバイスは、DAOが遅いクライアント側にデータ処理を制限し、専用サーバーを持っていることの全体のポイントは、サーバーできるだけ多くを実行することである主な理由は、DAOを放棄し、ADOで行く必要があります性能を飛躍的に向上させます。

関連する問題