请问在三层数据库模型中用存储过程得到的记录是不是不能增加?(100分)

  • 主题发起人 主题发起人 mycwcgr_temp
  • 开始时间 开始时间
M

mycwcgr_temp

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在三层数据库模型中用存储过程得到的记录是不是不能增加?

1.在SQL 2000中定义了一个存储过程
CREATE PROCEDURE temp
AS
select * from ghc_name where name='aa'
GO

2.在应用服务器中放入了Tadostrorproc和Tdatasetprovider控件与
存储过程Temp联系起来。

3.在客户程序中通过TclientDataset获得存储过程Temp查询到的记录,并显示到
Dbgrid控件中,但是当我在增加记录后,用ApplyUpdates(0)更新时,
出现错误:Unable to resolve records. Table name not found.
请问是为什么,难道一定要用TadoQuery控件获得的记录才能更新?
 
如果你是更新单表的话,用ADOQuery吧,
ADOQuery.sql.text := 'Exec Temp';就行了,
把DataSetProvider中的ResolvedToDataSet设置为False;
 
用不着动用存储过程吧!
试着用视图,
不管你查询,更新数据库都方便的!
有空聊聊,我正在忙于这个东东!
QQ:77169992
 
用视图不有使用参数,很麻烦
用Taqoquery控件不能将表名作为参数,而存储过程经过处理可以使用表名作为参数
 
存储过程怎样使用表名作参数?我在SQL 2000上无法试出来
 
存储过程返回的结果集是只读的,不能更新,你别想了!
另外,如果想用表名做参数当然可以,如下:
CREATE PROCEDURE sp_Test( @name VARCHAR(100))
AS

EXEC('SELECT * FROM ' + @name )
.....
 
我在出差,我回去后把我的SQL代码贴出来,如果使用表名作参数无法验证通过
 
下面的SQL语句以表名作参数,但是无法在SQL SERVER中通过,提示“必须声明变量
@TableName”:
CREATE PROCEDURE GetRord
@TableName varchar(36)="BM_BMBMB"
AS
SELECT * FROM @TableName
GO
但是如果修改变量的位置就可以通过语法检查:
CREATE PROCEDURE GetRord
@TableName varchar(36)="BM_BMBMB"
AS
SELECT @TableName FROM YY_BMBMB
GO
 
在李维的书里面说在OnGetTableName的事件里指定TableName即可更新,但是我没有试过,
我喜欢用直接提交SQL更新的方法。
 
to Aloney,
存储过程返回的结果集是只读的?
真的是只读的吗?
在HELP中好象没有看到类似的说明,不过存储过程的权限设置只有执行,没有INSERT,
UPDATE选择,是不是与此有关?

 
存储过程用来返回结果集,你当然不能直接对这个结果集进行更新操作了。
当然不需要用ADOQuery
你就ClientDataSet.CommandText:='Select * From Table'
不就行了,三成结构基本上是用它的,
挺方便,挺好的。
 
多人接受答案了。
 
后退
顶部