DBGridEh问题? (100分)

  • 主题发起人 主题发起人 sundart
  • 开始时间 开始时间
S

sundart

Unregistered / Unconfirmed
GUEST, unregistred user!
with AdoQuery do
begin
SQL.Text := 'Select * From #TableList';
Open;
Insert;
FieldByName('xxx').Value := 1;
...
Post;
end;
我使用了临时表操作数据,上段程序执行到Insert的时候,
会触发一个异常:
忽略了数据库名称‘TNCC’,将引用Tempdb中的对象。
经过跟踪发现是DBGridEh的合计功能造成的。不用合计项就没事。但。。。
我用DBGridEh是要是因为它的合计功能,尤其是它的合计项是表格线状的
不象DxExpress控件是3D效果。看起来很清爽。
但这个问题让我很为难。
我用的是2.0版的。下载了2.4a试了一下,具然有些属性没有了。靠!!!!
 
AdoQuery中不能用临时表
 
当你的程序连接到服务器后就产生了一个会话期连接,做为临时表必须要在本连接内使用。
举例:同一程序,你运行了一个进程,我们叫它A,你在A中建的临时表就只能在A这个会话
期中使用,假如你再次运行了一个新的进程B,这时你去访问在A这个会话期中建的临时表
就会出现你说的问题!
 
//当你的程序连接到服务器后就产生了一个会话期连接,
//做为临时表必须要在本连接内使用。
我是在一个进程中使用的啊,如果我把Insert 换成 Edit就不会出错!
以前我用BDE时就这么用的,换成ADO就...
 
不可能吧,你的程序我在一个进程中测过的,没有问题呀,插入几条记录都没有问题的?
不知道你是如何建这个临时表的呢,程序前边是如何写的?
 
//根据机械视图建立一个结构相同的临时表
Query.SQL.Text := 'Select * Into #TableList From 机械视图 Where ID = ''''';
Query.ExecSQL;
Query.SQL.Text := 'Select * From #TableList Order By ID';
Query.Open;
显示一个窗口Form1,从中选择一些数据,代码略;
while not Form1.QrList.Eof do
begin
Query.Insert;
Query.FieldByName('xxx').Value := 1;
...
Post;
Form1.qrList.Next;
end;
上面代码执行到Query.Insert时就会抛出异常(见前面所述)
 
下面这段代码是我依据你的代码进行的测试:
 with ADOQuery1 do
begin
Sql.Clear;
Sql.Add('select * into #TableList from A where num = 1');
ExecSQL;
Sql.Clear;
Sql.Add('select * from #TableList order by num');
Open;
Insert;
FieldByName('num').AsInteger := 2;
FieldByName('X').AsString := '22222';
Post;
end;
很正常的,无论是调试还是运行都没有错误发生。你对照一下这段代码,看看你的程序是
不是哪儿还存在些什么问题?
 
Archerfl兄:谢谢你的回答,经跟踪,发现是DBGridEh控件的合计功能造成的。
我用的是Ehlib2.1,它的合计项风格看起来比较漂亮,但就是要出这个问题,
如果我取消合计,就没这问题。
请问有办法解决吗?(最好不要换其它控件)
 
不客气,程序员的工作已经很苦了,大家互相帮忙!
我只是尽力而为罢了,何况这个问题我还帮不上你的忙,你说的那个控件我没有用过,
建议你再咨询一下其它同行,Sorry !
 
等待中.......................
 
你用BatchUpdate方式试试看看。
 
我知道的EhLib的最高版本是2.4a,但它好象与以前版本不太兼容(有些属性没有了)。
请大家推荐一个For D6最稳定的版本也行。
 
請問 怎樣取出DBGridEh合計的值?
 
DBGridEh.SumList.SumCollection.Items[0].SumValue;
 
多人接受答案了。
 
后退
顶部