我是新手, 本地数据库查询, dbf数据库, 百万条记录, 采用Tquery, sql查询问题! (20分)

  • 主题发起人 主题发起人 fjhst
  • 开始时间 开始时间
F

fjhst

Unregistered / Unconfirmed
GUEST, unregistred user!
这些纪录以dbf数据库以日期存在,从10万条到百万条不等, 如sh020410.dbf, sh020411.dbf, sh020412.dbf, sh020413.dbf, sh020414.dbf。。。
这些数据库的关键字及索引是在程序中使用如下代码指定创建的:
//指动主关键字, 'ZQDM':证券代码;这各字段的值不是唯一的(下面这一行我可能用错了)
IndexDefs.Add('', 'ZQDM', [ixPrimary, ixUnique]);
//建立主索引
AddIndex('','ZQDM',[ixPrimary]);

生成的索引是.cdx文件(什么是.mdx文件, 有何区别?)

我查询所使用的伪代码:
//DTPEnd.DateTime:终止时间, DTPStart.DateTime:起始时间
for i:=0 to trunc(DTPEnd.DateTime-DTPStart.DateTime) do //生成sql查询语句并执行
begin
FileName:=FilePath+IntToStr(i)+'.dbf';
if FileExists(FileName) then
begin
Sql := 'select * from +#39+FileName+#39 where ZQDM ="600120"';
Query1.Close();
Query1.SQL.Clear();
Query1.SQL.Add(Sql);
Qry1.Open();
end;
end;

执行:当Sql := 'select * from +#39+FileName+#39 where ZQDM ="600120"'时, 很快有结果;
当Sql := 'select * from +#39+FileName+#39 where ZQDM ="600121"'时, 程序停止响应;

我在SQL Explorer中执行上述语句, 通常是前一两个查询通过, 后面的就停止响应了。。。why?上述情况如何解决?

事情就是这样的。 我是新手, 接触windows 和数据库才10来天, 很多不懂得, 请多多指教!
感谢你的关注与帮忙。
 
为何没人回复?是我写得不明白?
 
可能是别人觉得分少吧
 
怎样加分?我是新来的!只有这么多阿
 
分数无所谓,不过我看你的数据库采用不是特别合理呀。百万条数据为什么要使用本地DBF数据库呀,会很慢的。
 
百万条数据库(dbf)只有一个, 其他都是10万条单位
 
百万不算多,DBF够用只是用ODBC访问比VFP中直接操作要慢一点,
不过最好在VFP中建立索引,速度应该很快的。
 
问题是我健了索引, 执行sql语句时出现问题。。。帮帮我吧!各位大峡!
 
分数不够的话, 我可以把剩下的分全部拿出来。。。
 
换成SQL2000。
--------------------------
unprapare;
Query1.Close();
Query1.SQL.Clear();
Query1.SQL.Add(Sql);
Qry1.Open();
prapare;
 
你给出的语句没有用PREPARE方法,不优化,
可能你第一个表查询成功了第二个表失败了,
 
天都亮了!我得去睡觉了!
 
我要去看日出了!好多年没看到了!
 
是啊!看到日出, 感觉真好!童年的感觉。。。
 
你最好使用SQL server 这样速度会好些,如果你用本地的dbf 慢的要死,这是个建议!
 
1,000,000条记录,最好不要用DBF,否则你会死得很难看的!
特别是计算复杂,DDL语句多的情况下!
 
建议你将百万条的记录表分割成若干张表,查询采用分次查询的方法,
还有尽量不要用SELECT * 查询,将所要的字段列出来,会提高查询速度,,
GOOD LUCK。。
 
好!谢谢各位!结贴!散分!我也要扬名大富翁!

 
好!谢谢各位!结贴!散分!我也要扬名大富翁!
 
好!谢谢各位!结贴!散分!我也要扬名大富翁!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
953
SUNSTONE的Delphi笔记
S
后退
顶部