如何回答这几道简单的面试题,高手请进!!!

cowbo2 2006-10-12 06:36:50
面试题....有点难

可否提供示例代码,小弟谢了..

-------------------------------------------------------


4.在一个主从表中以ADODataSet为例,假若主表有一个为金额汇总的字段它的结果
是明细表的金额字段的汇总,请写出事件代码并说明为什么要用此事件。


5.在一个主从表中以ADODataSet为例, 主表的记录删除了从表的记录也要全部删除
请写出实现的事件代码.


6.只用EnCodeDate、DeCodeDate写一个函数实现由指定的日期返回上个月这个日期。
提示如果是指定的日期是 2006-03-29上个月的日期为2006-02-28.
...全文
268 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
spirit_sheng 2006-10-13
  • 打赏
  • 举报
回复
// 以下为性能最优的算法, 只调用一次 DecodeDate
// 比上面我的程序少调用一次DecodeDate
function DecreaseMonth(ADate: TDateTime): TDateTime;
var
Year, Month, DayNow, DayMonth: WORD;
begin
DecodeDate(ADate, Year, Month, DayNow);
Result := ADate - DayNow;
if Month in [5, 7, 10, 12] then
// 这些月份的前一个月为30天
DayMonth := 30
else if Month = 3 then
begin
if Year mod 4 <> 0 then
DayMonth := 28
else if (Year mod 100 = 0) and (Year mod 400 <> 0) then
DayMonth := 28
else
DayMonth := 29;
end
else
DayMonth := 31;
if DayMonth > DayNow then
Result := Result - DayMonth + DayNow;
end;
spirit_sheng 2006-10-13
  • 打赏
  • 举报
回复
哪用那么麻烦, 其实只用DecodeDate一个函数就可以搞定

// 以下这个函数实现你要的功能, 只需要使用 DecodeDate 和加减法就可以了
function DecreaseMonth(ADate: TDateTime): TDateTime;
var
Year, Month, DayNow, DayMonth: WORD;
begin
DecodeDate(ADate, Year, Month, DayNow);
Result := ADate - DayNow;
DecodeDate(Result, Year, Month, DayMonth);
if DayMonth > DayNow then
Result := Result - DayMonth + DayNow;
end;

// 以下为测试部分
procedure TForm1.Button1Click(Sender: TObject);
var
tmpDate: TDateTime;
begin
tmpDate := Now;
ShowMessage(FormatDateTime('yyyy-mm-dd', DecreaseMonth(tmpDate)));
tmpDate := EncodeDate(2006, 3, 31);
ShowMessage(FormatDateTime('yyyy-mm-dd', DecreaseMonth(tmpDate)));
tmpDate := EncodeDate(2004, 3, 31);
ShowMessage(FormatDateTime('yyyy-mm-dd', DecreaseMonth(tmpDate)));
end;
do2008 2006-10-12
  • 打赏
  • 举报
回复
偶写的那个函数,罗嗦了一点,,但功能还应该是正确的

输入 返回
2004-3-30 2004-2-29
2005-3-30 2005-2-28
2006-3-29 2006-2-28.
2006-3-31 2006-2-28.

2006-4-30 2006-3-30.
....
do2008 2006-10-12
  • 打赏
  • 举报
回复
4,5 偶一般只用AdoQuery,用AdoDataSet不多,写来

6.函数

//输入参数:指定日期
//返回:指定的日期的上个月这个日期
function fun_DayOfLastMonth(dt : TDatetime ):TDatetime;
type
TMonthSet = set of 1..12;
var
Year, Month, Day, Hour, Min, Sec, MSec: Word;
Set2: TMonthSet;
MaxDay2:Word;
begin
DecodeDate(dt, Year, Month, Day);
Set2 := [2,4, 6, 9, 11];


//获取年、月
Month := Month -1;//上一月
if (Month =0) then
begin
Month := 12;
year := year -1;//上一年
end;

//判断是否闰年
if ((0 =(year mod 4)) and (0 <> (Year mod 100 )) ) or (0 = (year mod 400)) then
MaxDay2 := 29
else
MaxDay2 := 28;

//判断月份当月的最大天数
if (Month in Set2 ) then
begin
if (Month = 2) and (Day >MaxDay2 ) then
Day := MaxDay2;

if Day > 30 then
Day := 30;
end;

result:= EncodeDate(year,Month,Day);

end;
yukileo 2006-10-12
  • 打赏
  • 举报
回复
面试之前给你题? = =

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧