错误:试图存储以只读访问方式打开的数据库
编号:QA004371
建立日期: 2001年8月22日 最后修改日期:2001年8月22日
所属类别:
zhanghaofox:
我的机器是单机,安装了winNT4.0操作系统,前几天装了SQL server7.0数据库软件,我用Visual Basic 6.0 编写程序引用DAO对象访问SQL server中的数据库,程序如下:
------------------------------------------
Dim ws As Workspace mqis是ODBC系统数据源名称
Dim db As Database
Dim rs As Recordset
Private Sub Form_Load()
Set ws = Workspaces(0)
Set db = ws.OpenDatabase("", dbDriverNoPrompt, False, "odbc;pwd=;uid=;dsn=mqis;database=betsn")
Set rs = db.OpenRecordset("bz", dbOpenDynaset)
End Sub
Private Sub addrecord_Click() '在bz表中添加一条记录
rs.AddNew
rs.Fields("name") = "smith"
rs.Fields("age") = 26
rs.Update
End Sub
-------------------------------------------
其中betsn是在SQL server中建的一个数据库,bz是betsn库中的表,程序可以读取表中的数据,但是执行addrecord_click事件往表中添加记录时就显示错误信息"实时错误'3027':不能更新。数据库或对象是只读的。" ,我查看了帮助信息,显示如下:
--------------------------------------------
试图存储以只读访问方式打开的数据库。
数据库只读原因有:
?以只读访问方式使用 OpenDatabase 方法打开数据库。
?在 Visual Basic 中,使用 Data 控件并把 ReadOnly 属性设置为 True。
?数据库文件在操作系统或网络中被定义成只读。
?数据库文件存储在只读介质上。
?在网络环境中,没有写入数据库文件的权限。
?当数据库以加密方式工作时,数据库或它的对象(如字段或数据表)可被设置成只读。可能不允许以用户名称及密码去访问这个数据。
请关闭数据库,解除只读的条件,然后以读入/写入访问方式再打开文件。
--------------------------------------------
书上说 "Recordset对象的addNew方法和Update方法可以用来在可修改的DAO Recordset 对象中增加行,我想可能是SQL server中用户权限没有设置好,但是在SQL server7.0的查询分析器Query Analyzer中用INSERT 语句可以向表格中添加数据,而在程序中不行,我对SQL server不是很熟悉,请专家指教,多谢!
回答:
在Query Analyzer可以添加记录并不等于就可以在程序中同样添加,如果你确定已经排除了在帮助中出现问题的原因,我有两个建议一检查你连接SQL SERVER时使用的用户权限,二检查你进入NT的用户权限。还有有时不一定是程序有问题,因该排除SQL或是NT的错误(因为从语句看您的程序应该没有问题,不过我建议你不要使用DAO,使用ADO比较好)。
ADO可以这样写:
Public DB As New ADODB.Connection
DB.ConnectionString = "provider=sqloledb.1;data source=BETSN;initial catalog=BZ;user id=sa"
DB.Open
DB.Execute "INSERT BZ (NAME,AGE) VALUES ('SMITH',28)", adExecuteNoRecords
此问题由shark yu回答。
| |
|
|
| |
|
|