DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: melqui
今日帖子: 4
在线用户: 2
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 yhhe (yhhe) ★☆☆☆☆ -
盒子活跃会员
2023/3/31 10:32:06
标题:
2种看起来应该无差别的update语句写法更新日期,不知道为什么却有差别 浏览:901
加入我的收藏
楼主: 新建一个工程,放一个 DateTimePicker、一个ADOQuery、一个按钮
然后使用以下两种方式更新mssql数据库的 datetime 字段,写到数据库中的值不一样,大家有没有碰到这种情况? D7
  with ADOQuery1 do begin
    Close;
    Sql.Text:='declare @RQ datetime '     //定义变量
          +'set @RQ=:RQ '          //变量赋值
          +'update 表名 set RQ=@RQ ';  //update
    Parameters.ParamByName('RQ').Value:=DateTimePicker1.Date;
    ExecSQL;

    Close;
    Sql.Text:='update 表名 set RQ=:RQ ';  //直接update
    Parameters.ParamByName('RQ').Value:=DateTimePicker1.Date;
    ExecSQL;
    Close;
  end;
----------------------------------------------
网络记事本 http://hi.baidu.com/luckyhhe
作者:
男 yy306 (yy306) ▲▲▲▲△ -
普通会员
2023/3/31 10:48:06
1楼: 有什么不同呢?具体说说。
----------------------------------------------
-
作者:
男 yhhe (yhhe) ★☆☆☆☆ -
盒子活跃会员
2023/3/31 10:53:00
2楼: @yy306

用定义变量的方式,即上面那段代码

保存进数据库的日期比在 DateTimePicker1 里选择的日期多2天

用下面的直接更新的方式是正确的
----------------------------------------------
网络记事本 http://hi.baidu.com/luckyhhe
作者:
男 ghs_79 (ghs) ★☆☆☆☆ -
盒子活跃会员
2023/4/1 14:32:40
3楼: 用DateTimePicker1.DateTime;
或者FormatDateTime('yyyy-MM-dd', DateTimePicker1.Date)均可解决。
原因:在Sysutils单元中有注释,应该是跟Delphi表示的起始日期有关。
   { Days between 1/1/0001 and 12/31/1899 }
----------------------------------------------
Delphi爱好者。
作者:
男 he_19_79 (he) ▲▲▲▲▲ -
普通会员
2023/4/1 17:14:56
4楼: 我觉得是.value的问题.   ParamByName('RQ').Value改为ParamByName('RQ').AsDateTime.

SQL SERVER同Delphi定义Date = 0时的值是不一样的.
----------------------------------------------
-
作者:
男 tms2021 (TMS2021) ▲▲△△△ -
普通会员
2023/4/2 7:12:52
5楼: 上面的写法,感觉是不是有点反人类
----------------------------------------------
欢迎加入Delphi的QQ群:462884906
作者:
男 yhhe (yhhe) ★☆☆☆☆ -
盒子活跃会员
2023/4/2 9:11:34
6楼: @tms2021

正好向大家请教一下,有没有更好的写法

我写的sql语句是包含通过主关键字判断表中是否存在,如存在则更新,不存在则写入,为了只赋值一次变量,所以这样写的

declare @pk int,@info1 varchar(100),@info2 numeric(18,2),@info3 datetime
set @pk=:pk
set @info1=:info1
set @info2=:info2
set @info3=:info3
if exists (select pk from 表 where pk=@pk)
  update 表 set info1=@info1,info2=@info2,info3=@info3 where pk=@pk
else
  insert 表(pk,info1,info2,info3) values(@pk,@info1,@info2,@info3)
----------------------------------------------
网络记事本 http://hi.baidu.com/luckyhhe
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2023/4/2 12:33:15
7楼: 较高版本的SQL Server,可以用merge 语法
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行60.54688毫秒 RSS