帮帮我呀!!!用ODBC操作Sql Server数据库,提示“记录集是只读”???怎么才有写的权限???

时间:2022-06-19 13:29:43
数据库采用Sql Server 2000,用VC 6.0
操作步骤如下:
1、在"企业管理器"里面的pubs数据库里面新建一个表“test”,里面的有两个字段aa和bb(都是char、10)

2、在ODBC数据源里面新建一个用户DSN“testDSN”,采用指定本机的“SQL Server”服务器名,更改默认的数据库为“pubs”。

3、在VC下新建一个工程,用向导添加一个基于CRecordSet的类CTestSet,采用的ODBC就是testDSN,加入的数据表是“dbo.test”

4、在VC下
 CString strDsn.Format("ODBC;DRIVER=SQL Server;DSN='';SERVER=%s;NETWORK=dbmssocn;DATABASE=%s;uid=%s;pwd=%s",
pSvr,pDb,pUid,pPwd);
CDatabase * pDatabase = new CDatabase;
pDatabase->Open(NULL,FALSE,FALSE,strDsn,FALSE);
成功,新建一个CDatabase的实例。

5、执行SQL语句
CString str = "insert into test(aa) values('asdasas')";
pDatabase->ExecuteSQL(str);
成功

6、CTestSet *pSet=new  CTestset(pDatabase);
CString     strSQL="select * from test";
pSet->Open(CRecordset::dynaset,strSQL) )
新建一个CTestSet成功

7、用pSet可以进行MoveFirst、MoveNext等查询操作

8、用pSet执行AddNew时提示“记录集是只读”。Faint!

9、用“查询分析器”打开pubs数据库,直接打开dbo.authors,可以直接在里面进行数据的编辑

10、用“查询分析器”打开pubs数据库,直接打开dbo.test,子窗口标题显示“只读”,无法直接在里面进行数据的编辑。不知在哪修改才能像第9步中的操作一样可以直接修改编辑

哪位大侠帮帮我呀!第8步和第10步怎样才能去掉只读呀?????

8 个解决方案

#1


pDatabase->Open()指定打开方式

#2


在记录集的pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);我也是用sql数据库 你试一下看有没有用?我是这么用的

#3


To  laiyiling(爱祖国&爱人民&爱程序&爱CSDN)
解决了,是个看起来不相干的问题,我也不明白为什么会这样。看下面的帖:

http://expert.csdn.net/Expert/topic/3012/3012795.xml?temp=.8206751

不过还是很感谢你的解答!我现在就试一下看你的方法行不行。

#4


To  laiyiling(爱祖国&爱人民&爱程序&爱CSDN)
试了一下你的方法,不设置主键也行!
谢谢啦!!!

#5


提个建议,尽量不要使用SQL SERVER自带的那几个数据库。最好自己新建新的数据库

#6


出问题了!

我新建了一个新的数据库“testdb”,在里面新建一个表,在里面随便建了几个字段,用pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);的方法可以正确的往里面增加记录

但又新建了一个数据库“MyDb",在“查询分析器”里面执行CREATE TABLE 语句在里面新建一个表,用同样的方法pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);却无法正确的往里面增加记录!!!只能把这个新表里面的一个字段设为主键,而且只能使用
pSet->Open(CRecordset::dynaset,strSQL) 不能用pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);来打开数据库,否则就无法正常的往里面添加记录!!!怎么回事呢???

我现在的需要就是往一个数据表里面正常的查询、添加记录,最好不要设置主键,不要动了已有的数据表。

怎么回事呢?有谁有这方面的资料吗?看来得有系统的了解才能解决冒出来的一个又一个的问题呀!

到底影响数据库的添加权限的因素有哪些呢?哪位朋友能分享一下?

#7


记录集的指针要在程序启动时指向数据库才大特dataBase,我以前也碰见过

#8


在建odbc的时候你不用默认的用户名,试一下

#1


pDatabase->Open()指定打开方式

#2


在记录集的pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);我也是用sql数据库 你试一下看有没有用?我是这么用的

#3


To  laiyiling(爱祖国&爱人民&爱程序&爱CSDN)
解决了,是个看起来不相干的问题,我也不明白为什么会这样。看下面的帖:

http://expert.csdn.net/Expert/topic/3012/3012795.xml?temp=.8206751

不过还是很感谢你的解答!我现在就试一下看你的方法行不行。

#4


To  laiyiling(爱祖国&爱人民&爱程序&爱CSDN)
试了一下你的方法,不设置主键也行!
谢谢啦!!!

#5


提个建议,尽量不要使用SQL SERVER自带的那几个数据库。最好自己新建新的数据库

#6


出问题了!

我新建了一个新的数据库“testdb”,在里面新建一个表,在里面随便建了几个字段,用pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);的方法可以正确的往里面增加记录

但又新建了一个数据库“MyDb",在“查询分析器”里面执行CREATE TABLE 语句在里面新建一个表,用同样的方法pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);却无法正确的往里面增加记录!!!只能把这个新表里面的一个字段设为主键,而且只能使用
pSet->Open(CRecordset::dynaset,strSQL) 不能用pSet->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);来打开数据库,否则就无法正常的往里面添加记录!!!怎么回事呢???

我现在的需要就是往一个数据表里面正常的查询、添加记录,最好不要设置主键,不要动了已有的数据表。

怎么回事呢?有谁有这方面的资料吗?看来得有系统的了解才能解决冒出来的一个又一个的问题呀!

到底影响数据库的添加权限的因素有哪些呢?哪位朋友能分享一下?

#7


记录集的指针要在程序启动时指向数据库才大特dataBase,我以前也碰见过

#8


在建odbc的时候你不用默认的用户名,试一下