十万火急!Tquery或DataSource可能有限制!500分!(300分)

  • 主题发起人 主题发起人 Crane
  • 开始时间 开始时间
是这个问题啊,呵呵。我弄错了
我一般不用DATASOURCE直接传的,而是把
关键字=:参数,自己在需要的时候直接填写参数的。好象没什么限制
 
Crane:
告诉你问题出在那里,我估计你用的不是Sybase就是SQL Server.
并且,你的主从表之间肯定加了Reference.

问题在于Sybase or SQL Server对于Reference有不能超过16个的限制.:(
我查过Sybase的书了,他就只能这么大.

唯一的解决办法就是把你的主从表之间的关联删掉.数目在16个以下就不会
出问题了. 用程序自己控制约束.

//本人经验之谈.平台 Sybase Adaptive Server 11.9 for NT.


 
谢谢,谢谢,谢谢大家! :...)
CJ:
能详细些吗,不用Datasource也能建主从表?
Victor.Sun:
我用的是Access,看来M$不单技术,连同BUG也一并偷过来了,呵呵.
(小声问一句,Reference是什么?〕
不过我已经从Inprise那里得到比较确切的答复,证明Tquery确有限制:
QUESTION:
Why am I getting the error "Operation not applicable" when I open a TClientDataset with many master-detail datasets?
ANSWER:
There is a limit of 15 master-detail relationships when using nested datasets.

There are two ways you can set up master/detail relationships in client datasets using nested tables.

One is to define them explicitly using the Fields Editor. At design time, right click the client dataset and choose Fields Editor. Add a new persistent field to your client dataset by right-clicking and choosing Add Fields. Define your new field with type DataSet Field. In the Fields Editor, define the structure of your detail table.

A second way that you may not be aware of is to obtain records that contain nested details from a provider component. When a provider component represents the master table of a master/detail relationship, it automatically creates a nested dataset field to represent the details for each record.

我只好自己再想办法了,我跟支持说如果找到解决办法第一个通知她,
她倒是欣然同意,呵呵!
大家别闲着,接着侃。
 
?
用DATASOURCE,但不用他直接传递参数
在他的ONDATACHANGE(也许是其它)事件里写:
Q1.PARAMETERS[0].VALUE := Q2.FIELDS[1].VALUE;
响应的写Q1的AFTERINSERT等事件
 
CJ:
哇赛,果然是新技术!
可是,:(我,还是,没,明,白!
这样就能实现老式的主从结构的优点吗?
我实在不好意思再让你说的更详细些了,是哪本书
上写过这种建主从关系的详细步骤,或哪个站点上有例程?我去啃!
 
Crane:
建议你少用Component中对于数据的现成属性,写SQL最保险不过.
 
Victor.Sun:
此话怎讲,你碰过钉子?
说实话,我也正是想用SQL解决此问题,不过看到CJ人家有新
方法,又不免有些眼馋.
 
1.在Server端建立多个方法
2.Client中调用需要的方法
3.Server端根据调用返回需要的数据包即可
 
Crane:
有没有试过从表中的SQL写成Select * form tablename where id1=:id1 and id2=:id2
<A HREF="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=221867">500分</A>
 
CJ 惊恐万分,好象被吓坏了...
很简单呀:
QUERY1的SQL是
SELECT PKEY,XXX,... FROM MASTER
QUERY2 SQL:
SELECT * FROM DETAIL
WHERE FK = :PKEY
不要设置QUERY2的DATASOURCE属性
然后自己填写这个PKEY参数,您老人家不会?还是我太低级???
/ME 最近低级错误恶犯!又要出丑了:(
 
CJ:
你的意思是说,主从表分别有自己的Provider,只是在主表改动的时候
从表跟着变一下,是吗?这样一来客户端如何ApplyUpdate呢?而且从表在
服务端刷新能带动客户端刷新吗?
我的本意是通过主从表来实现事物的统一,即客户端只需主表ApplyUpdate,
从表即可一起被打包,实现事物的统一.你的方法可以吗?

 
Crane:
你说的主从结构中的一些从表,是不是应该是代码表,而不全是
主/明细表,全部是明细表的情况好象很少见。如果是这样,应该
在server端只建立主/明细关系,而在client端使用lookup字段,这样
虽然需要一次将代码库传输到client端,但以后的操作会很快,不过
代码库最好不要太大。
也许全部是明细表,好象没什么办法。不过这样的话翻屏的效果不
会太好。
你可以安装Delphi4的补丁3试一试。我看了一下provider.pas
和Dbclient.pas,dsintf.pas,好象数据的存储传输是以
TclientDataset为单位进行的,处理则使用了类似B+树的结构
TUpdateTree,好象没有限制层数,限制应该在vclmid40.dcp,
因为IDSBase对象只有在其中有实现,其定义在dsintf.pas。
 
liuxianghui:
确实有这么多,有限制是delphi的开发人员承认的,好像
不好通融。
 
到!
我上次的回答没贴上,SORRY,我觉得需要自己写一部分代码的
 
Crane:
我试了一下,无论怎样改变嵌套表之间的结构,单个CDS只能容纳15个表。你
可以在client端建主/从,server端自己编事务更新来绕道。我还没有研究透
Tdataset,无法给你答复。
请见谅。
 
自行解决了,用合并表,不过还是谢谢大家
 
后退
顶部