CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

SQL语句问题

楼主favan(SUPER.NET)2004-08-03 16:57:48 在 Delphi / 数据库相关 提问

我在程序中有这样的一句:  
  update   ac_Record   set  
  ac_record.EnterTime   =   (SELECT   Min(inTime)   FROM   ent_rec  
  where   (ent_rec.inTime   between  
  ac_record.BeginTIme   and   ac_record.EndTime)  
  and   (ent_rec.uID   =   ac_record.staffID)),  
  ac_record.LeaveTime   =   (SELECT   Max(inTime)   FROM   ent_rec  
  where   (ent_rec.inTime   between  
  ac_record.BeginTIme   and   ac_record.EndTime)  
  and   (ent_rec.uID   =   ac_record.staffID))  
  FROM   ac_record,   Ent_Rec  
  WHERE   ac_record.datet   between    
  '2004-8-3'   and   '2004-8-2'  
   
  在我的开发的电脑上一切正常,但装到别的电脑上总是出现执行超时错误,请高手帮忙。  
  waiting   online,   thank   you   very   much 问题点数:100、回复次数:17Top

1 楼favan(SUPER.NET)回复于 2004-08-03 16:59:42 得分 0

自己顶一下先Top

2 楼ljmanage(过客)回复于 2004-08-03 17:01:28 得分 10

将YTimeOut时间设置长一点看看Top

3 楼favan(SUPER.NET)回复于 2004-08-03 17:04:21 得分 0

TO   :   ljmanage(过客)    
  但在我的电脑上只要几十毫秒就执行玩了的呀Top

4 楼insert2003(高级打字员)回复于 2004-08-03 17:08:05 得分 10

将数据库控件如ADOQuery的CommandTimeout设长一点试试  
   
  如果是超时,应该能解决Top

5 楼jinjazz(近身剪)回复于 2004-08-03 17:11:41 得分 10

 
  update   as_record   set  
  ac_record.entertime=b.maxtime,acrecord.leavetime=b.mintime  
  from   (select   uid,max(intime)   as   maxtime,min(intime)   as   mintime   from    
              ent_rec     where   ent_rec.intime   between   ...   and   ...   )   b  
  where   a.staffid=b.uid  
  and   a.datet   between...and...Top

6 楼favan(SUPER.NET)回复于 2004-08-03 17:12:40 得分 0

我用出错的电脑上装的query   analizer执行这个语句也不会出错,几十毫秒就执行玩了,为什么程序里执行不了这个语句?Top

7 楼favan(SUPER.NET)回复于 2004-08-03 17:13:49 得分 0

我已经设置成15秒了,不能再长了,这样一个语句就是几十毫秒的Top

8 楼jinjazz(近身剪)回复于 2004-08-03 17:15:31 得分 10

用上面的语句可能能快点Top

9 楼jinjazz(近身剪)回复于 2004-08-03 17:16:32 得分 10

那你干脆坐成存储过程好了Top

10 楼cronuz(cronus)回复于 2004-08-03 17:21:21 得分 10

hehe,   是会超时!   
   
  二個字段要分別用一個SELECT句、再加上本身的条件...  
  建義用存储过程来解決。  
   
  Top

11 楼favan(SUPER.NET)回复于 2004-08-03 17:31:38 得分 0

不能用存储过程,因为客户要求数据库有通用性Top

12 楼favan(SUPER.NET)回复于 2004-08-03 17:33:34 得分 0

再说就执行三个SELECT   也不至于超时的Top

13 楼jinjazz(近身剪)回复于 2004-08-03 17:33:42 得分 10

...这是什么道理啊,每种数据库支持的sql语法是不一样的,即使不作过程,换了数据库你的程序也没有多大移植性Top

14 楼Delphi78()回复于 2004-08-04 09:14:00 得分 10

你用什么方式连的数据库?  
  是BDE还是ADO,用的什么接口?  
  如果是ADO,升级一下看看  
  如果是BDE,建议用Query+UpdateSQL  
  你在程序执行的时间用监视器跟踪一下,看看执行的是直接的语句还是加了一大堆的动作Top

15 楼sousouwjh(sousouwjh)回复于 2004-08-04 09:23:34 得分 10

可以先创建存储过程执行后删除如何?Top

16 楼cronuz(cronus)回复于 2004-08-04 11:08:57 得分 10

一)対UPDATE自身的条件句↓、要控制条件、一次不要選中太多的記録。  
    WHERE   ac_record.datet   between   '2004-8-3'   and   '2004-8-2'  
   
  二)対字段付値的条件句↓  
        where   (ent_rec.inTime   between ac_record.BeginTIme   and   ac_record.EndTime)  
            and   (ent_rec.uID   =   ac_record.staffID)  
   
   建義対表「ent_rec」建索引文件、可加速捜査。  
    CREATE   INDEX   yourIndex   ON   ent_rec   (inTime,   uID)  
  Top

17 楼favan(SUPER.NET)回复于 2004-08-04 12:28:04 得分 0

jinjazz好像在软件工程模块活动的吧?Top

相关问题

  • 求SQL语句
  • sql语句。
  • sql语句?
  • sql 语句?
  • 求SQL语句
  • ***求SQL语句***
  • sql语句??
  • sql语句
  • sql语句
  • SQL语句

关键词

  • 语句
  • 执行
  • 数据库
  • 电脑
  • ent
  • intime
  • record
  • rec
  • datet
  • staffid

得分解答快速导航

  • 帖主:favan
  • ljmanage
  • insert2003
  • jinjazz
  • jinjazz
  • jinjazz
  • cronuz
  • jinjazz
  • Delphi78
  • sousouwjh
  • cronuz

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo