SQL简单问题(送100分)
正在做1个同学登记软件,碰到了些问题~~~
Edit1.text:='小王';
问1:如果 Edit1.text 等于 表中的 "姓名(列名)" 那么在 "登记时间(列名)" 中登记 (当前数据库所在服务器的时间)
问2:如果 "登记时间(列名)" 中 该同学已经登记过了 那么把(当前数据库所在服务器的时间) - (当时登记的时间)结果保存在Label1.caption中
[解决办法]
下面的代码放在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('没有找该学生记录');
[解决办法]
ADOQuery1.SQL.Text := Format(RegSQL, [Edit1.Text]);
后面要加上
ADOQuery1.Open;
[解决办法]
- Delphi(Pascal) code
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;