0

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

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

しかし、l0 でエラーが発生しています。この行コードを編集すると、「実行時エラー '3027' は更新できません。データベースまたはオブジェクトは読み取り専用です。何か助けてください! または提案してください。返信してください。

前もって感謝します!

4

1 に答える 1

0

最初は、SQLサーバーに使用しているユーザー名とパスワードに読み取り専用の権限がある可能性があると考えています。

これが当てはまらず、DAOを使い続けたい場合は、Accessの組み込みのODBCリンク機能を使用することをお勧めします。これにより、SQLサーバーに正常に接続できます。

ただし、私のアドバイスは、DAOを放棄してADOを使用する必要があります。これは、主にDAOがデータ処理をクライアント側に制限しているためです。専用サーバーを使用することの全体的なポイントは、サーバー側で可能な限り実行して劇的に改善することです。パフォーマンス。

于 2012-04-18T13:08:29.587 に答える