很奇怪的,BDGrid这是咋的了?---查不多搞定了,不关BDGrid的事。请帮忙看看!谢谢!---200 (200分)

J

jrq

Unregistered / Unconfirmed
GUEST, unregistred user!
多谢 秋之叶 老兄指点。
可怜我这里没有任何关于dbexpress的资料。
 

老人家

Unregistered / Unconfirmed
GUEST, unregistred user!
to jsxjd 大侠:
你的QQ是多少
或qq的妮称
 
D

dae

Unregistered / Unconfirmed
GUEST, unregistred user!
jrq,你好,关于http://www.delphibbs.com/delphibbs/dispq.asp?lid=1507034还有问题。
希望能帮忙。
我已经明白怎么用ADO调用存储过程了,可是我想实现的目的是在存储过程中把每条数据
都处理一下,再以游标的方式返回,而不是只是一个select 语句。
我要实现的是下面这段程序的内容,不过我不知道怎么才能让他以数据集的形式返回。
CREATE OR REPLACE PROCEDURE BOMDETIAL(
ChildCode IN OUT varchar2,
ItemPro IN OUT varchar2,
EndAdd IN OUT varchar2
) IS
tCode varchar2(40);
tDept varchar2(10);
tProcess varchar2(40);
tEndadd varchar2(10);
Cursor SeleStruct is
select child_code from item_struct ;
Cursor SeleProcess is
select Dept_id from item_process where item_code = tCode;
begin
OPEN SeleStruct ;
LOOP
FETCH SeleStruct INTO tCode;
EXIT WHEN SeleStruct %NOTFOUND;
begin
tDept := '';
tProcess := '';
OPEN SeleProcess ;
LOOP
FETCH SeleProcess INTO tDept;
EXIT WHEN SeleProcess %NOTFOUND;
tProcess := tProcess || '-' || tDept;
END LOOP;
CLOSE SeleProcess ;
select end_address into tEndadd from item_process
where item_code = tCode and end_address is not null;
exception when no_data_found then
tEndadd := '-';
end;
ChildCode := tCode;
ItemPro := tProcess;
EndAdd := tEndadd;
END LOOP;
CLOSE SeleStruct ;
end;
/
或者是又什么其他的方式,我的目的就是在后台处理,提高速度,不想生成临时表。
 
S

Saiger

Unregistered / Unconfirmed
GUEST, unregistred user!
DBExpress的本意就是分布式,要在本机缓存,用jiangxiancheng的方法外,
就是用SQLClientDataSet,也在DBExpress页
 
H

huayuanzhm

Unregistered / Unconfirmed
GUEST, unregistred user!
用SIMPLEDATASET很简单也能连上数据库并在dbgrid中显示,关键是,如何把dbgrid中的修改
反映到表里面呢?我很困惑,我快疯了!!!
 
H

huayuanzhm

Unregistered / Unconfirmed
GUEST, unregistred user!
经过我的努力,问题已经解决,你调用dbexpress的applyupdate(-1),一切就OK了!你可以重载
dbexpress的dataset,使他和别的dataset一样。 :)
给我分啊,呵呵
 
L

LeeChange

Unregistered / Unconfirmed
GUEST, unregistred user!
哎,dbExpress的table, Query, StoredProc, DataSet都是只读仅向前游标,
只支持next和First.
用SQLClientDataSet吧(D6中) D7中好象改了名字.
 
S

stargazer

Unregistered / Unconfirmed
GUEST, unregistred user!
jiangxiancheng 说的办法,是D6以上DBExpress中支持数据感知组件的唯一办法。也就是说,你的程序必须做成逻辑上的三层结构,当然物理上依然是两层。
个人觉得这没什么不好,毕竟这样做将来转三层也容易。
 
J

jrq

Unregistered / Unconfirmed
GUEST, unregistred user!
当时问题的根本原因是没有搞清dbExpress,造成很大障碍,更要命的是当时在Kylix下使用的。 [:(]
等现在返回头来看看就明白了。
dbExpress不支持数据缓存,所以数据绑定控件DBGrid就不能直接使用了。
jiangxiancheng老兄说的方法可以。用SQLClientDataSet可以。
不过在D7中没有了SQLClientDataSet,取而代之的是SimpleDataset。
时间不短了。
结贴了。
另贴一点关于dbExpress的资料,谢谢大家的关注。
---------
dbExpress 是Delphi 6.0 新加的功能,dbExpress是一个跨平台
的、不依赖于数据库的一个独立的层。它提供了一些方法用于动态SQL
的处理。它定义了一个接口用于访问不同的SQL 服务器,并为各种数
据库提供了驱动程序。
这些驱动程序在Windows和Linux下都能使用(Windows下为动态连
接库.DLL,而在Linux下为共享对象.so文件)。 这种API 驱动,减少
了数据库引擎需要的额外开销。
标准的dbExpress数据库应用是不使用数据缓存的,由于保持核心
运行时数据库访问层的简单和轻便。所以,dbExpress提供了高性能的
数据库连接,运行速度很高。但是,不用数据缓存将无法修改数据,
而且,指针的移动也是单向的。为了能够修改数据,dbExpress也提供
了一种使用数据缓存的控件,当然这无疑也会影响到效率。
目前在dbExpress能够应用的数据库有Qracle、MySQL、DB2和
InterBase,这里以InterBase 数据库为例。
一、单向的数据连接
实例数据库为Delphi提供的Employee.gdb。
1)加入 TSQLConnection
属性:
LoginPrompt=False 不用用户名和密码显示
DirverName=InterBase 驱动程序名
ConnectionName=IBLoca 默认数据库(Database.gdb)

Params 点对话框出现信息表,修改数据库的名字Employee.gdb
Connected=true 如果连接正确,将可以顺利的为true;
2)加入 TSQLDataset
属性:
SQLConnection=SQLConnection名字
CommandType=ctTable 用表名连接
CommandText=表名
Active=true 如果正确,将可以为true;
3)加入 TDataSource
属性:
DataSet=SQLDataSet名字

4)加入数据绑定控件,由于不用缓存,所以不能用DBGrid,这里只
用简单的DBEdit。
注意属性:
DataSource=DataSource名字
DataField=字段名
5)注意,SQLDataset移动指针只有两个方法
SQLdataset1.Next;
SQLdataset1.First;
这就可以运行了。
二、可以修改的数据连接
做一个主从结构的数据显示,要求从表是可以修改的,而且要用
DBGrid,所以,这里要用一个新的控件来联系:
TSQLClientDataSet
和TSQLDataset不同TSQLClientDataSet是使用数据缓冲区的,所
以,用它连接数据源可以修改,也可以用DBGrid显示。
和上面方法相同,加入TSQLConnection作数剧源。
属性:
LoginPrompt=False 不用用户名和密码显示
DirverName=InterBase 驱动程序名
ConnectionName=IBLoca 默认数据库(Database.gdb)

Params 点对话框出现信息表,改数据库名:Employee.gdb
Connected=true 如果连接正确,将可以顺利的为true;
1)做主表
加入 TSQLDataset
属性:
SQLConnection=SQLConnection1
CommandType=ctTable 用表名连接
CommandText=PROJECT (这是在Employee.gdb内的一个表)
Active=true 如果正确,将可以为true;
加入 TDataSource
属性:
DataSet=SQLDataSet1

加入数据绑定控件两个DBEdit,显示字段分别为PROJ_ID和
PROJ_NAME。
用同样的方法作两个指针移动的Button。
2)做从表
加入TSQLClientDataSet
属性:
SQLConnection=SQLConnection1
CommandType=ctTable 用表名连接
CommandText=PROJ_DEPT_BUDGET (这是在Employee.gdb内的另一个表)
Active=true (激活)
做主从连接
MasterSource=DataSource1
MasterFierds=PROJ_ID (连接字段)

加入 TDataSource
属性:
Name=DataSource2
DataSet=SQLClientDataSet1
加入DBGrid,与DataSource2连接。

这就完成了一个主从表制作,试验一下,可以发现从表是可以修改的。
仔细研究一下这个过程,归纳出设计的一般方法。一般来说,dbExpress
主要在网络中使用,特别是WebSnap 快速网络开发方法,给dbExpress 以很大
的施展空间。
[:)]
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部