首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

一个设计思路,一定要Select * from MyTable吗?解决方案

2012-12-31 
一个设计思路,一定要Select * from MyTable吗?想起以前做过一个小的管理系统,在数据录入的时候,和好多讲数

一个设计思路,一定要Select * from MyTable吗?
想起以前做过一个小的管理系统,在数据录入的时候,和好多讲数据库的书上讲的一样,用的ADODataSet组件,在FormCreate的时候(或在构造函数里),将表里的所有记录select出来,然后配合DBEdit组件实现数据的录入/修改等,这样,当表里数据量大到一定程度时,这个Form打开过程会很慢,对于稍大一点的表来说这种方法太不可行了。
后来,我在想,将需要录入的表每个表都加一个日期时间字段,记录录入的时间。然后在录入的Form中也是select * from MyTable,不过加了一个判断条件,就是录入时间在当前时间之后的。这样子,没有意外发生的话,可以保证每次打开Form时,数据集里的记录数都是0,刚开时以为会造成数据集不可更新,但是在Access上小小的做了个试验,好像还行,但总是觉得心里有点虚,因为以前经常在对SQL语句后面带上Where的数据集(例如 select * from MyTable where Age>18 ......)进行操作的时候,总是会遇上“数据集不可更新”的提示。
不知道哪位乡亲有没有什么好方法。
[解决办法]
不一定要读取所有的字段,也不一定要读取所有的记录。按需所取。
表尽量都加上主键。
[解决办法]
主键 及 唯一索引 是需要考慮的.
數據庫不僅僅是一堆數據的集合,更是數據有機的結合. 主键 外鍵 索引 是一定要考慮的 . 

“数据集不可更新”的提示主要是以下同幾個方面造成的:
1. 表存在兩行以上完全相同的行. 解決方式是 分析表,按業務需求,確認主鍵外鍵及唯一索引.保障每行不一樣.
2.多用戶環境下,別人在你之前修改了(或刪除了)該行數據. 此時需要讀回最新數據.然後重新修改.
3.如果表或行被其他用戶鎖定了,只有等解鎖了才能操作,特別是觸發器多的應用下更要注意行鎖表鎖.
4.網路故障,數據鏈接被服務器斷開.此時更新的話會有異常,不過好象不是“数据集不可更新”的提示.


[解决办法]
Me:SELECT * TOP 1 FROM MyTable;

热点排行