正在做1个同学登记软件,碰到了些问题~~~Edit1.text:='小王';问1:如果 Edit1.text 等于 表中的 "姓名(列名)"  那么在 "登记时间(列名)" 中登记 (当前数据库所在服务器的时间)问2:如果 "登记时间(列名)" 中 该同学已经登记过了 那么把(当前数据库所在服务器的时间) - (当时登记的时间)结果保存在Label1.caption中

解决方案 »

  1.   

    用存储过程来做,getdate函数来获得系统时间
      

  2.   

    下面的代码放在Button click 事件中, 另外代码没有调试const
      RegSQL = 'SELECT * FROM 登记表 WHERE 姓名=''%S''';
    begin
      ADOQuery1.SQL.Text := Format(RegSQL, [Edit1.Text]);
      if ADOQuery1.Active and (ADOQuery1.RecordCount > 0) then begin
        ADOQuery1.Edit;
        ADOQuery1.FieldByName('登记时间').AsDateTime := Now();
        ADOQuery1.Post;  
        Label1.Caption := ADOQuery1.FieldByName('登记时间').AsString; 
      end else
        ShowMessage('没有找该学生记录');
      

  3.   

    ADOQuery1.SQL.Text := Format(RegSQL, [Edit1.Text]); 
    后面要加上
    ADOQuery1.Open;
      

  4.   

    with adoquery1 do 
    begin
     if active then close;
     sql.clear;
    //如果 Edit1.text 等于 表中的 "姓名(列名)"  是不是就是判断表中是否存在该人员信息
     sql.text:='select * From 表 where 姓名='+quotedstr(edit1.text);
     open;
     if not isempty then //判断人员是否存在
      if fieldbyname('登记时间').isnull then //判断登记时间列是否为空
        begin
          close;
          sql.clear;
          sql.text:='update 表 set 登记时间=getdate() where 姓名='+quotedstr(edit1.text);//添加登记时间
          execsql;
        end
      else
        label1.caption:=fieldbyname('登记时间').asstring;//不懂第二点意思,在此显示原来登记的时间
      if active then close;
      
    end;
      

  5.   

    提示:datetime 与 text 不兼容
      

  6.   

    n29882942
    我的 登记时间(列名) 是TEXT类型的
      

  7.   

    自己把第1个问题解决了 convert(char(10),getdate(),121第2个问题是 在登记的时候 getdate()能不能加10天?
      

  8.   

    select count(*) as 人数 from tablename where 登记时间>date() group by 姓名
      

  9.   

    或者这样
    adoquery1.close;
    str:='select count(*) as 人数 from tablename where 登记时间 >#'+datetostr(date)+'# group by 姓名';
    adoquery1.sql.clear;
    adoquery1.sql.add(str);
    adoquery1.open;
      

  10.   

    DATEADD   
      在向指定日期加上一段时间的基础上,返回新的   datetime   值。   
        
      语法   
      DATEADD   (   datepart   ,   number,   date   )     
        
      参数   
      datepart   
        
      是规定应向日期的哪一部分返回新值的参数。下表列出了   Microsoft®   SQL   Server™   识别的日期部分和缩写。   
        
      日期部分   缩写     
      Year   yy,   yyyy     
      quarter   qq,   q     
      Month   mm,   m     
      dayofyear   dy,   y     
      Day   dd,   d     
      Week   wk,   ww     
      Hour   hh     
      minute   mi,   n     
      second   ss,   s     
      millisecond   ms     
        
        
      number   
        
      是用来增加   datepart   的值。如果指定一个不是整数的值,则将废弃此值的小数部分。例如,如果为   datepart   指定   day,为   number   指定   1.75,则   date   将增加   1。   
        
      date   
        
      是返回   datetime   或   smalldatetime   值或日期格式字符串的表达式。有关指定日期的更多信息,请参见   datetime   和   smalldatetime。     
        
      如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果   two   digit   year   cutoff   为   2049(默认),则   49   被解释为   2049,2050   被解释为   1950。为避免模糊,请使用四位数的年份。   
        
      返回类型   
      返回   datetime,但如果   date   参数是   smalldatetime,返回   smalldatetime。   
        
      示例   
      此示例打印出   pubs   数据库中标题的时间结构的列表。此时间结构表示当前发布日期加上   21   天。   
        
      USE   pubs   
      GO   
      SELECT   DATEADD(day,   21,   pubdate)   AS   timeframe   
      FROM   titles   
      GO   
        
      下面是结果集:   
        
      timeframe                                         
      ---------------------------     
      Jul   3   1991   12:00AM                       
      Jun   30   1991   12:00AM                     
      Jul   21   1991   12:00AM                     
      Jul   13   1991   12:00AM                     
      Jun   30   1991   12:00AM                     
      Jul   9   1991   12:00AM                       
      Mar   14   1997     5:09PM                     
      Jul   21   1991   12:00AM                     
      Jul   3   1994   12:00AM                       
      Mar   14   1997     5:09PM                     
      Nov   11   1991   12:00AM                     
      Jul   6   1991   12:00AM                       
      Oct   26   1991   12:00AM                     
      Jul   3   1991   12:00AM                       
      Jul   3   1991   12:00AM                       
      Nov   11   1991   12:00AM                     
      Jul   3   1991   12:00AM                       
      Jul   3   1991   12:00AM                       
        
      (18   row(s)   affected) select dateadd(day,10,getdate())
      

  11.   

    我的“登记时间(列名)”是TEXT数据类型  错误提示不能比较  
      

  12.   

    怎么转换 我用strtodate(登记时间) 不行啊  怎么写?
      

  13.   

    cast(c1   as   varchar(8000))  可以将text类型c1字段转换成varchar类型
      

  14.   

    如何查询 "登记时间(列名)"中的日期 大于 当前服务器日期 的数量有多少  注:"登记时间(列名)"中的日期 是text类型
      

  15.   

    如果你前面上用
    convert(char(10),getdate(),121 )转换成char可以这么写,
    不过你为什么要用TEXT型呢,用VARCHAR就行select count(*) as 人数 from tablename 
    where 登记时间 >convert(char(10),getdate(),121 )
    group by 姓名
      

  16.   

    group by 姓名  这句不要!
      

  17.   

    可是 我该成别的 别的东西都错乱了  TEXT型该怎么办呢 能不能转换下再比较呢?
      

  18.   

    RS:=String; 
     
      ADOQuery1.close;
      ADOQuery1.sql.clear;
      ADOQuery1.sql.add('select count(*) as RS from 表 where 登记时间 > convert(char(10),getdate(),121 )');
      ADOQuery1.open;
      RS:=ADOQuery1.FieldByName('RS').AsString;
      Label2.Caption:=RS;
    这样写 说TEXT不能比较或排序  如何把TEXT转成能比较的(SQL里不变类型)
      

  19.   

    你把登记时间转换成varchar再比较
      

  20.   

    select count(*) as RS from 表 where cast(登记时间 as varchar(8000)) > convert(char(10),getdate(),121 )
      
      

  21.   

    TEXT 没办法吗  我转过 一转成varchar 很多数据都出问题了