(1) d是TdateTime;
  DecodeDate(d, yyyy, mm1, dd);
  DecodeDate(d+1, yyyy, mm2, dd);
  if mm1=mm2 then
    ShowMessage('n')
  else
    ShowMessage('y');

解决方案 »

  1.   

    (2)比较麻烦。如果你是使用SQL Server,可以:查SQL Server的手册,按要求写一DLL,
    此DLL可以向其他机器通过网络发送“通知”;其次写一Trigger,此Trigger调用“外部函
    数”----也就是你写的DLL。
    其实如果全部程序都是你写的,定期查询也行:为要监视的表写个Trigger,有write时触发,
    行为是在Log表中记录什么时候什么人做了什么;Client端定时(例如20秒)查询此表...(3)
    try
      ...    // 尝试连接数据库
    except
      Application.Terminal;
    end;
    限制只运行一个副本方法很多,最简单是download一个。
      

  2.   

    谢谢!ether(void)  
    要是想判断这天是不是本周的星期5呢?该怎么做!
      

  3.   

    问题1:我有例子
    需要请联系 [email protected]
      

  4.   

    关于问题三,我这里有几种方法:    一、 查找窗口法
        这是最为简单的一种方法。在程序运行前用FindWindow函数查找具有相同窗口类名
    和标题的窗口,如果找到了,就说明已经存在一个实例。在项目源文件的初始化部分添
    加以下代码:
        Program OneApp
        Uses
        Forms,Windows;(这里介绍的几种方法均需在项目源文件中添加Windows单元,以後
    不再重复了)
        Var Hwnd:Thandle;
        Begin
         Hwnd:=FindWindow('TForm1','SingleApp');
         If Hwnd=0 then
         Begin
         Application.Initialize;
         Application.CreateForm(Tform1, Form1);
         Application.Run;
         End;
        End;    **THandle的Unit为Windows**    FindWindow()函数带两个叁数,其中的一个叁数可以忽略,但笔者强烈建议将两个
    叁数都用上,免得凑巧别的程序也在使用相同的类名,就得不到正确的结果了。另外,
    如果是在Delphi IDE窗口中运行该程序,将一次都不能运行,因为已经存在相同类名和
    标题的窗口:设计时的窗体。    二、使用互斥对像
        如果觉得查找窗口的方法效率不太高的话,可以使用创建互斥对像的方法。尽管互
    斥对像通常用於同步连接,但用在这个地方也是非常方便的。仅用了4句代码就轻松搞定
        VAR Mutex:THandle;
        begin
         Mutex:=CreateMutex(NIL,True,'SingleApp');
         IF GetLastError<>ERROR_ALREADY_EXISTS THEN//如果不存在另一实例
         BEGIN
         Application.CreateHandle;
         Application.CreateForm (TExpNoteForm, ExpNoteForm);
         Application.Run;
         END;
         ReleaseMutex(Mutex);
        end.    **THandle的Unit为Windows**    三、全局原子法
        我们也可以利用向系统添加全局原子的方法,来防止多个程序实例的运行。全局原
    子由Windows 系统负责维持,它能保证其中的每个原子都是唯一的,管理其引用计数,
    并且当该全局原子的引用计数为0时,从内存中清除。我们用GlobalAddAtom 函数向全局
    原子添加一个255个字节以内的字符串,用GlobalFindAtom来检查是否已经存在该全局原
    子,最後在程序结束时用GlobalDeleteAtom函数删除添加的全局原子。示例如下:    Uses Windows
        const iAtom='SingleApp';
        begin
        if GlobalFindAtom(iAtom)=0 then
        begin
        GlobalAddAtom(iAtom);
        Application.Initialize;
        Application.CreateForm(TForm1,Form1);
        Application.Run;
        GlobalDeleteAtom(GlobalFindAtom(iAtom));
        end
        else
        MessageBox(0,'You can not run a second copy of this App','',mb_OK);
        end.    利用全局原子的引用计数规则,我们还可以判断当前共运行了该程序的多少个实例

        var i:Integer;
        begin
        I:=0;
        while GlobalFindAtom(iAtom)<>0 do
        begin
        GlobalDeleteAtom(GlobalFindAtom(iAtom));
        i:=i+1;
        end;
        ShowMessage(IntToStr(I));
        end;
      

  5.   

    问题1:
     function  DayMax(DateA:TDateTime):TDateTime
       const kk:array[1..12] of Integer=
        (31,28,31,30,31,30,31,31,30,31,30,31);
     var Year,month,day:Word;
       begin
        DecodeDate(DateA,Year,Month,Day);
        if (((Year Mod 4)=0 ) and ((Year Mod 100)<>0)) or
         ((Year Mod 400)=0) then kk[2]:=29 else kk[2]:=28;
           Result:=EncodeDate(Year,Month,kk[Month])
       end;
    //***************************************************************Function DateToWeekStr(Val:TDateTime):String; stdcall;
       Const DayOfWeekArrayStr:array[1..7] of string=
        ('星期日','星期一','星期二',
         '星期三','星期四','星期五','星期六');
       begin
        Result:=DayOfWeekArrayStr[DayOfWeek(Val)];
       end;
      

  6.   

    我回答第一个问题,很简单,而且肯定成功,将当前要判断的日期与该日期的月分加一个月的头一天在减一天(即月底)作比较,如:2000-10-31 ,该日期月份为10月,用incmonth()加一月的第一天,即2000-11-1 减去一天即是2000-10的月底,再用2000-10-31日与之比较,不是很简单吗
      

  7.   

    2.用异常捕捉:
        try
         ...........
        except
            on E:Exception do
              if POS('another user',E.message)<>0 then
              Application.MessageBox (PChar('保存失败,因为另一个用户已经改变了此纪录' ) ,'信息提示',Mb_Ok+Mb_Iconinformation)
           else 
           Application.MessageBox (PChar('由于以下原因,操作失败!:'+E.Message )
                                                         ,'信息提       示',Mb_Ok+Mb_IconError);
           Exit;