Delphi 7 日期变量的定义以及使用方法。

从来没用过Delphi,但是老师要我用Delphi弄个小的数据库管理系统给他,也就只能硬学了。我想问一下,在Delphi里面,日期(时间)类型的变量怎么定义?还有他是怎么... 从来没用过Delphi,但是老师要我用Delphi弄个小的数据库管理系统给他,也就只能硬学了。
我想问一下,在Delphi里面,日期(时间)类型的变量怎么定义?还有他是怎么用的?
我按照C++的思想来用好像不行呢。。。。。
我把数据库(SQL 2008 )连上了,想法是通过一个单选按钮来统计某个时间段以后开播的动漫的个数。但是我不知道怎么用时间类型的。。。字符的倒是会,但是总不能让我把数据库的时间类型该成字符型吧。。。。这样不合数据库的规矩啊。。。。破坏完整性的事情我做不来。。。。

下面是我写的代码:

unit Unit9;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, DB, ADODB, ExtCtrls;

type
TForm9 = class(TForm)
Image1: TImage;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
GroupBox1: TGroupBox;
DBGrid1: TDBGrid;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
ADOQuery2: TADOQuery;
DataSource2: TDataSource;
DBGrid2: TDBGrid;
Label1: TLabel;
Label2: TLabel;
procedure RadioButton4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form9: TForm9;

implementation

var
test5:Tdate;

{$R *.dfm}

procedure TForm9.RadioButton4Click(Sender: TObject);
begin
test5:=strtodate('2011-04-00');
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 动漫 where 开播时间>test5 ');
adoquery1.Open;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select 开播时间,count(动漫名称) as 个数 from 动漫 where select * from 动漫 where 开播时间>test5 group by 开播时间 ');
adoquery2.Open;
end;

end.

求高手指点,感激不尽!
展开
 我来答
东门吹嘘
2012-05-20 · TA获得超过343个赞
知道小有建树答主
回答量:235
采纳率:0%
帮助的人:243万
展开全部
日期(时间)类型的变量声明简单
var D:Tdatetime就行。
不过,我看你的程序代码,发现还真的没必要专门定义个日期类型的变量,毕竟,你要拼凑sql语句啊,你定义了日期类型的变量后,还得转成字符型,何苦来着?
另外,你写的代码有问题,就像这句select * from 动漫 where 开播时间>test5,你怎么把test5的值传得入到你的SQL句中?你在外面都用单引号包括进去了。
还有,这句也有问题,select 开播时间,count(动漫名称) as 个数 from 动漫 where select * from 动漫 where 开播时间>test5 group by 开播时间,你编译这语句时肯定不过
更多追问追答
追问
就是编译不过我才来问的。。。。。
因为我在数据库的数据类型定义了时间类的time(7),但是我用字符型的变量代替就有错误。但是我不知道错在哪。然后我想是不是数据类型不一样值传不过去,所以才想要定义一个时间类型的变量,把数据传到SQL语句里面。
求指导。
追答
数据库里是时间类型精度为7?太浪费了吧,用time(0)应该到秒就够用了..
写入的时候当成字串把值写入就得了,读的时候,也是一样的啊,比如:
select * from 动漫 where 开播时间>'10:30:00'
从这句可以看到,你还需要转换吗?
---------------------------------------------------------------
不过,看你的代码
test5:=strtodate('2011-04-00');
明显只是日期而已,默认是'2011-04-00 00:00:00'的,所以,直接用日期型不就得了?
adoquery1.SQL.Add('select * from 动漫 where 开播时间>test5 ');
这句改成
adoquery1.SQL.Add('select * from 动漫 where 开播时间>'+char(39)+test5+char(39));
也就是相办法把SQL语句拼成select * from 动漫 where 开播时间>'2011-04-00'
同样,后面的adoquery2的SQL语句也要同样处理.
匿名用户
2015-07-07
展开全部
TDateTime就是日期时间型;
参考例子如下,
var
dDate: TDateTime;
begin
dDate := Date();
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bfb9204
2012-05-21 · TA获得超过718个赞
知道小有建树答主
回答量:1008
采纳率:66%
帮助的人:446万
展开全部
在delphi中
test5:=strtodate('2011-04-00');不能这样转换
我做的测试
前台.text类型的在delphi中可以直接和时间类型的比较,不用转换
procedure TForm1.Button1Click(Sender: TObject);
//var test5:Tdate;
begin
//test5:=strtodate('2012-05-20');
adoquery1.close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from pdl_passbas where paperdate>''' + Edit1.Text + ''' ');
adoquery1.Open;
adoquery2.close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add(' select paperdate,count(*) as geshu from pdl_passbas where paperdate>''' + Edit1.Text + ''' group by paperdate');
adoquery2.Open;

end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HJ_3000
2012-05-20 · TA获得超过563个赞
知道小有建树答主
回答量:1264
采纳率:78%
帮助的人:58万
展开全部
adoquery1.SQL.Add(Format('select * from 动漫 where 开播时间> %f',[test5]));
更多追问追答
追问
不对啊。。。。
追答
test5:=strtodate('2011-04-00');//没有这种日期!! 00是什么意思?
心急没有任何意义,看看基础先。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沉底的鲨鱼
2012-05-20
知道答主
回答量:8
采纳率:0%
帮助的人:5.4万
展开全部
用tdatetime就可以了,可以具体到分秒。。
更多追问追答
追问
我只想具体到天而已啊。比如:2012-05-20,这个就够了。
追答
看来你是没有明白基本的delphi操作,在查询字符串中如果要引用外在的值,是不能像你这么用的,应该这样:
adoquery1.SQL.Add('select * from 动漫 where 开播时间>:test5 ');
然后赋值
adoquery1.Parameters.ParamByName('').Value :=你需要的值
adoquery1.open;
这样就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式