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.
求高手指点,感激不尽! 展开
我想问一下,在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.
求高手指点,感激不尽! 展开
5个回答
展开全部
日期(时间)类型的变量声明简单
var D:Tdatetime就行。
不过,我看你的程序代码,发现还真的没必要专门定义个日期类型的变量,毕竟,你要拼凑sql语句啊,你定义了日期类型的变量后,还得转成字符型,何苦来着?
另外,你写的代码有问题,就像这句select * from 动漫 where 开播时间>test5,你怎么把test5的值传得入到你的SQL句中?你在外面都用单引号包括进去了。
还有,这句也有问题,select 开播时间,count(动漫名称) as 个数 from 动漫 where select * from 动漫 where 开播时间>test5 group by 开播时间,你编译这语句时肯定不过
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;
参考例子如下,
var
dDate: TDateTime;
begin
dDate := Date();
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在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;
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
adoquery1.SQL.Add(Format('select * from 动漫 where 开播时间> %f',[test5]));
更多追问追答
追问
不对啊。。。。
追答
test5:=strtodate('2011-04-00');//没有这种日期!! 00是什么意思?
心急没有任何意义,看看基础先。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用tdatetime就可以了,可以具体到分秒。。
更多追问追答
追问
我只想具体到天而已啊。比如:2012-05-20,这个就够了。
追答
看来你是没有明白基本的delphi操作,在查询字符串中如果要引用外在的值,是不能像你这么用的,应该这样:
adoquery1.SQL.Add('select * from 动漫 where 开播时间>:test5 ');
然后赋值
adoquery1.Parameters.ParamByName('').Value :=你需要的值
adoquery1.open;
这样就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询