unit Unit2; interface
uses Windows, Messages, SysUtils, Variants,classes,dbclient,unit3;
type
tuser=class(tobject)
private
datamod:tdatamodfrm;
public
function getpowe(Name:string):string;
constructor create;
destructor destroy;override;
end;
implementation
constructor tuser.create;
begin
datamod:=tdatamodfrm.Create(nil);
end ;
destructor tuser.destroy;
begin
freeandnil(datamod);
inherited;
end;
function tuser.getpowe(Name:string):string;
begin
with datamodfrm.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from yonghu where uq='''+Name+'''');
open;
end;
result:=datamodfrm.ADOQuery1.fieldbyname('powe').AsString;
end;
这是类的设计部分
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, unit2,StdCtrls; type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
user:tuser;
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation
{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin
user:=tuser.Create;
if (edit1.text='') or (edit2.text='') then
begin
showmessage('请输入完整');
exit;
end;
if user.getpowe(edit1.Text)=edit2.text then
begin
showmessage('成功');
end
else
begin
showmessage('不成功');
end;
user.Free;
end; end.
类的使用 这是个简单的类的实现列子 通过用户名验证密码 可是我输入的用户名 密码全正确 理应该显示
showmessage('成功');
可是显示的却是
showmessage('不成功');
请问各位高手 问题出在哪啊 小弟刚接触DELPHI 以前学的都是VB 对类的理解有限 帮帮解决下
用户名数据类型VARCHAR(15) 密码数据类型VARCHAR(20)能不能帮我解决下 要能实现的 或者直接给我个代码能实现的也可以
非常急 自己做个软件 如果不用类 要重复的堆代码 太累了 可维护性也差 哪位大侠就帮我解决下吧 最好在机器上实验过了 谢谢
uses Windows, Messages, SysUtils, Variants,classes,dbclient,unit3;
type
tuser=class(tobject)
private
datamod:tdatamodfrm;
public
function getpowe(Name:string):string;
constructor create;
destructor destroy;override;
end;
implementation
constructor tuser.create;
begin
datamod:=tdatamodfrm.Create(nil);
end ;
destructor tuser.destroy;
begin
freeandnil(datamod);
inherited;
end;
function tuser.getpowe(Name:string):string;
begin
with datamodfrm.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from yonghu where uq='''+Name+'''');
open;
end;
result:=datamodfrm.ADOQuery1.fieldbyname('powe').AsString;
end;
这是类的设计部分
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, unit2,StdCtrls; type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
user:tuser;
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation
{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin
user:=tuser.Create;
if (edit1.text='') or (edit2.text='') then
begin
showmessage('请输入完整');
exit;
end;
if user.getpowe(edit1.Text)=edit2.text then
begin
showmessage('成功');
end
else
begin
showmessage('不成功');
end;
user.Free;
end; end.
类的使用 这是个简单的类的实现列子 通过用户名验证密码 可是我输入的用户名 密码全正确 理应该显示
showmessage('成功');
可是显示的却是
showmessage('不成功');
请问各位高手 问题出在哪啊 小弟刚接触DELPHI 以前学的都是VB 对类的理解有限 帮帮解决下
用户名数据类型VARCHAR(15) 密码数据类型VARCHAR(20)能不能帮我解决下 要能实现的 或者直接给我个代码能实现的也可以
非常急 自己做个软件 如果不用类 要重复的堆代码 太累了 可维护性也差 哪位大侠就帮我解决下吧 最好在机器上实验过了 谢谢
最好哪位仁兄 能把在机器上可以无问题的代码给我个 好心人也可以把我这个代码在机器上测试下 谢谢了 等到晚上10点
result:=datamodfrm.ADOQuery1.fieldbyname('powe').AsString;的返回查询值的语句该怎么写呢?因为返回的是BOOLEAN型 而RESULT是STRING型的 请高手帮我解答下
begin
with datamodfrm.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from yonghu where uq='''+Name+'''');
open;
end;
result := not (datamodfrm.ADOQuery1.bof and datamodfrm.ADOQuery1.eof); //Query.bof and Query.eof为真时,数据集没有记录,也就是找不到该用户名
if (result) then
password:=datamodfrm.ADOQuery1.fieldbyname('powe').AsString;
else
password := '';
end; 调用时
var
pwd: string;
...
begin
...
user := ...;try
if not user.getpowe(edit1.Text, pwd) then
begin
showmessage('用户不存在');
exit;
end;if (pwd <> edit2.text) then
begin
showmessage('password错误');
exit;
end;
finally
user.destroy();
end;showmessage('Ok');你可能还有两个问题是,
1,sql.Add('select * from yonghu where uq='''+Name+'''');
如果你的用户名是忽略大小写的,这里没有处理2,你原来的实现
procedure TForm1.Button1Click(Sender: TObject);begin
user:=tuser.Create;
if (edit1.text='') or (edit2.text='') then
begin
showmessage('请输入完整');
exit;
end;
if user.getpowe(edit1.Text)=edit2.text then
begin
showmessage('成功');
end
else
begin
showmessage('不成功');
end;
user.Free;
end; 当if (edit1.text='') or (edit2.text='') then时,user变量造成内存泄露(没有free)
procedure updatexinxi(updatesql:string);
就拿修改做个列子吧 哪个高手给个代码 给一个 我自己就能理解明白了 其他的就解决了
修改
AdoQuery1.Close;
AdoQuery1.Clear;
AdoQuery1.Sql.text := 'UpDate Table set Field = ..';
AdoQuery1.ExecSql;