unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, DBCtrls, Mask, Grids, DBGrids, Menus,
WinSkinData;type
TfrMain = class(TForm)
MainMenu1: TMainMenu;
StatusBar1: TStatusBar;
DBGrid1: TDBGrid;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBComboBox1: TDBComboBox;
DateTimePicker1: TDateTimePicker;
SkinData1: TSkinData;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
StaticText1: TStaticText;
StaticText2: TStaticText;
StaticText3: TStaticText;
StaticText4: TStaticText;
procedure FormCreate(Sender: TObject);
procedure N3Click(Sender: TObject);
private
procedure openTable;
{ Private declarations }
public
{ Public declarations }
end;var
frMain: TfrMain;implementation{$R *.dfm}
uses data,pass,public1;
procedure TfrMain.FormCreate(Sender: TObject);
begin
openTable;
StatusBar1.Panels[7].Text:=DateToStr(date); end;procedure Tfrmain.openTable;
begin DBGrid1.DataSource:=frData.DataSource1;
frData.DataSource1.DataSet:=frData.ADOTable2;
frData.DataSource1.Enabled:=True;
frData.ADOTable2.Close;
frData.ADOTable2.Connection:=frData.ADOConnection1;
frData.ADOTable2.Close;
frData.ADOTable2.TableName:='account';
frData.ADOTable2.Active:=True;
end;
procedure TfrMain.N3Click(Sender: TObject);
begin
close;
end;end.以上是主窗口的代码;
unit Pass;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TfrPass = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
StaticText1: TStaticText;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
passOK:BOOLEAN;
{ Public declarations }
end;var
frPass: TfrPass;implementation{$R *.dfm}
uses data,public1;
procedure TfrPass.Button1Click(Sender: TObject);
begin
frData.ADOTable1.Connection:=frdata.ADOConnection1;
frData.ADOTable1.Close;
frData.ADOTable1.TableName:='pass';
frData.ADOTable1.Open; if Trim(edit1.Text)=Trim(frdata.ADOTable1.FieldByName('password').AsString) then
begin
frPass.Close ;
passOK:=True; end
else
begin
MessageDlg('密码错误!请与管理员联系!',mtInformation,[mbYes,mbNo],0);
PassOK:=False;
end;
frData.ADOTable1.Close;end;procedure TfrPass.Button2Click(Sender: TObject);
begin
close;
end;procedure TfrPass.FormCreate(Sender: TObject);
begin
frData.ADOConnection1.ConnectionString:=public1.link;
frData.ADOConnection1.LoginPrompt:=false;
end;end.
以上是登陆窗口的代码!
program MyAccount;uses
Forms,
main in 'main.pas' {frMain},
data in 'data\data.pas' {frData: TDataModule},
public1 in 'public\public1.pas',
Pass in 'PASS\Pass.pas' {frPass};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TfrData, frData);
Application.CreateForm(TfrPass, frPass);
frpass.ShowModal;
if frpass.passOK then
begin
frpass.Free;
Application.CreateForm(TfrMain, frMain);
Application.Run;
end
else
Application.Terminate;end.
以上是工程文件的代码
我将连接数据库的控件(ADOConnection1,ADOTable1;ADOTable2; DataSour1)放在DataModule内,公式的常量放在PLULIC1内,当我在登录窗口内一按下关闭按钮时,系统显示出错(Access violation at address 4dd7640a in module ,read of address 4dd7640a,这是什么原因,是我的逻辑有识吗,如果是的话怎样改法,才能OK
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, DBCtrls, Mask, Grids, DBGrids, Menus,
WinSkinData;type
TfrMain = class(TForm)
MainMenu1: TMainMenu;
StatusBar1: TStatusBar;
DBGrid1: TDBGrid;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBComboBox1: TDBComboBox;
DateTimePicker1: TDateTimePicker;
SkinData1: TSkinData;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
StaticText1: TStaticText;
StaticText2: TStaticText;
StaticText3: TStaticText;
StaticText4: TStaticText;
procedure FormCreate(Sender: TObject);
procedure N3Click(Sender: TObject);
private
procedure openTable;
{ Private declarations }
public
{ Public declarations }
end;var
frMain: TfrMain;implementation{$R *.dfm}
uses data,pass,public1;
procedure TfrMain.FormCreate(Sender: TObject);
begin
openTable;
StatusBar1.Panels[7].Text:=DateToStr(date); end;procedure Tfrmain.openTable;
begin DBGrid1.DataSource:=frData.DataSource1;
frData.DataSource1.DataSet:=frData.ADOTable2;
frData.DataSource1.Enabled:=True;
frData.ADOTable2.Close;
frData.ADOTable2.Connection:=frData.ADOConnection1;
frData.ADOTable2.Close;
frData.ADOTable2.TableName:='account';
frData.ADOTable2.Active:=True;
end;
procedure TfrMain.N3Click(Sender: TObject);
begin
close;
end;end.以上是主窗口的代码;
unit Pass;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TfrPass = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
StaticText1: TStaticText;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
passOK:BOOLEAN;
{ Public declarations }
end;var
frPass: TfrPass;implementation{$R *.dfm}
uses data,public1;
procedure TfrPass.Button1Click(Sender: TObject);
begin
frData.ADOTable1.Connection:=frdata.ADOConnection1;
frData.ADOTable1.Close;
frData.ADOTable1.TableName:='pass';
frData.ADOTable1.Open; if Trim(edit1.Text)=Trim(frdata.ADOTable1.FieldByName('password').AsString) then
begin
frPass.Close ;
passOK:=True; end
else
begin
MessageDlg('密码错误!请与管理员联系!',mtInformation,[mbYes,mbNo],0);
PassOK:=False;
end;
frData.ADOTable1.Close;end;procedure TfrPass.Button2Click(Sender: TObject);
begin
close;
end;procedure TfrPass.FormCreate(Sender: TObject);
begin
frData.ADOConnection1.ConnectionString:=public1.link;
frData.ADOConnection1.LoginPrompt:=false;
end;end.
以上是登陆窗口的代码!
program MyAccount;uses
Forms,
main in 'main.pas' {frMain},
data in 'data\data.pas' {frData: TDataModule},
public1 in 'public\public1.pas',
Pass in 'PASS\Pass.pas' {frPass};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TfrData, frData);
Application.CreateForm(TfrPass, frPass);
frpass.ShowModal;
if frpass.passOK then
begin
frpass.Free;
Application.CreateForm(TfrMain, frMain);
Application.Run;
end
else
Application.Terminate;end.
以上是工程文件的代码
我将连接数据库的控件(ADOConnection1,ADOTable1;ADOTable2; DataSour1)放在DataModule内,公式的常量放在PLULIC1内,当我在登录窗口内一按下关闭按钮时,系统显示出错(Access violation at address 4dd7640a in module ,read of address 4dd7640a,这是什么原因,是我的逻辑有识吗,如果是的话怎样改法,才能OK
Application.Initialize;
Application.CreateForm(TfrData, frData);
Application.CreateForm(TfrPass, frPass);
frpass.ShowModal;
if frpass.passOK then
begin
frpass.Free;
Application.CreateForm(TfrMain, frMain);
Application.Run; ---〉放到最下边吧
end
else
begin
Application.Terminate;
Exit;
end;
end.另外,尽可能的把代码少放到FormCreate中