我的主窗体上显示错误的数据库名称
wrong database name showing on my main form
看来我无法让它正常工作。不知何故,我弄乱了 "if then"
顺序。
我在登录表单上得到了这个:
procedure TLogin_Form.AdvGlowButton1Click(Sender: TObject);
begin
Data_Module.LOGIN.Active:=false;
Data_Module.LOGIN.SQL.Clear;
Data_Module.LOGIN.SQL.Text:= 'select [LOC_ID],[USER],[PASSWORD],[ACCESS] from USERS where [USER] ='+QuotedStr(cxlookupcombobox1.text) +' and [PASSWORD]='+QuotedStr(cxTextEdit1.Text);
Data_Module.LOGIN.Open;
if Data_Module.LOGIN.FieldByName('PASSWORD').AsString<>'' then
begin
if Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger = 1 then
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db1.adb';
Data_Module.ACRDatabase1.DatabaseName :='database1';
Data_Module.ACRDatabase1.Connected:=True;
if Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger = 2 then
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db2.adb';
Data_Module.ACRDatabase1.DatabaseName :='database2';
Data_Module.ACRDatabase1.Connected:=True;
ModalResult := mrOK
end
else
ModalResult := mrNone;
cxtextEdit1.Clear;
dxStatusBar1.Panels[1].Text :='wrong password !';
cxtextEdit1.SetFocus;
end;
ModalResult OK显示主窗体。
只是为了检查数据库名称是否显示正确....
procedure TMain_Form.FormShow(Sender: TObject);
begin
if Data_Module.ACRDatabase1.Connected then
AdvOfficeStatusBar1.Panels[0].Text := Data_Module.ACRDatabase1.DatabaseName
else
AdvOfficeStatusBar1.Panels[0].Text :='';
end;
不知何故,我的主窗体上出现了错误的数据库名称。
我究竟做错了什么 ?尝试了各种方法都失败了。
另外我想知道 "case" 语句是否可以在这里使用:
case Data_Module.LOGIN.FieldByName('LOC_ID').Value of 1:begin
因为我有大约 5 个数据库可供选择?
我们在编写多行代码时使用 Begin End 块。
procedure TLogin_Form.AdvGlowButton1Click(Sender: TObject);
begin
Data_Module.LOGIN.Active:=false;
Data_Module.LOGIN.SQL.Clear;
Data_Module.LOGIN.SQL.Text:= 'select [LOC_ID],[USER],[PASSWORD],[ACCESS] from USERS where [USER] ='+QuotedStr(cxlookupcombobox1.text) +' and [PASSWORD]='+QuotedStr(cxTextEdit1.Text);
Data_Module.LOGIN.Open;
if Data_Module.LOGIN.FieldByName('PASSWORD').AsString<>'' then
begin
if Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger = 1 then
begin
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db1.adb';
Data_Module.ACRDatabase1.DatabaseName :='database1';
End
else if Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger = 2 then
begin
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db2.adb';
Data_Module.ACRDatabase1.DatabaseName :='database2';
end;
Data_Module.ACRDatabase1.Connected:=True;
ModalResult := mrOK
end
else
ModalResult := mrNone;
cxtextEdit1.Clear;
dxStatusBar1.Panels[1].Text :='wrong password !';
cxtextEdit1.SetFocus;
end;
是的,你可以像那样使用 case 语句。
with case of statement
case Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger of
1:Begin
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db1.adb';
Data_Module.ACRDatabase1.DatabaseName :='database1';
End;
2:Begin
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db2.adb';
Data_Module.ACRDatabase1.DatabaseName :='database2';
End;
end;
看来我无法让它正常工作。不知何故,我弄乱了 "if then" 顺序。
我在登录表单上得到了这个:
procedure TLogin_Form.AdvGlowButton1Click(Sender: TObject);
begin
Data_Module.LOGIN.Active:=false;
Data_Module.LOGIN.SQL.Clear;
Data_Module.LOGIN.SQL.Text:= 'select [LOC_ID],[USER],[PASSWORD],[ACCESS] from USERS where [USER] ='+QuotedStr(cxlookupcombobox1.text) +' and [PASSWORD]='+QuotedStr(cxTextEdit1.Text);
Data_Module.LOGIN.Open;
if Data_Module.LOGIN.FieldByName('PASSWORD').AsString<>'' then
begin
if Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger = 1 then
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db1.adb';
Data_Module.ACRDatabase1.DatabaseName :='database1';
Data_Module.ACRDatabase1.Connected:=True;
if Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger = 2 then
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db2.adb';
Data_Module.ACRDatabase1.DatabaseName :='database2';
Data_Module.ACRDatabase1.Connected:=True;
ModalResult := mrOK
end
else
ModalResult := mrNone;
cxtextEdit1.Clear;
dxStatusBar1.Panels[1].Text :='wrong password !';
cxtextEdit1.SetFocus;
end;
ModalResult OK显示主窗体。
只是为了检查数据库名称是否显示正确....
procedure TMain_Form.FormShow(Sender: TObject);
begin
if Data_Module.ACRDatabase1.Connected then
AdvOfficeStatusBar1.Panels[0].Text := Data_Module.ACRDatabase1.DatabaseName
else
AdvOfficeStatusBar1.Panels[0].Text :='';
end;
不知何故,我的主窗体上出现了错误的数据库名称。 我究竟做错了什么 ?尝试了各种方法都失败了。
另外我想知道 "case" 语句是否可以在这里使用:
case Data_Module.LOGIN.FieldByName('LOC_ID').Value of 1:begin
因为我有大约 5 个数据库可供选择?
我们在编写多行代码时使用 Begin End 块。
procedure TLogin_Form.AdvGlowButton1Click(Sender: TObject);
begin
Data_Module.LOGIN.Active:=false;
Data_Module.LOGIN.SQL.Clear;
Data_Module.LOGIN.SQL.Text:= 'select [LOC_ID],[USER],[PASSWORD],[ACCESS] from USERS where [USER] ='+QuotedStr(cxlookupcombobox1.text) +' and [PASSWORD]='+QuotedStr(cxTextEdit1.Text);
Data_Module.LOGIN.Open;
if Data_Module.LOGIN.FieldByName('PASSWORD').AsString<>'' then
begin
if Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger = 1 then
begin
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db1.adb';
Data_Module.ACRDatabase1.DatabaseName :='database1';
End
else if Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger = 2 then
begin
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db2.adb';
Data_Module.ACRDatabase1.DatabaseName :='database2';
end;
Data_Module.ACRDatabase1.Connected:=True;
ModalResult := mrOK
end
else
ModalResult := mrNone;
cxtextEdit1.Clear;
dxStatusBar1.Panels[1].Text :='wrong password !';
cxtextEdit1.SetFocus;
end;
是的,你可以像那样使用 case 语句。
with case of statement
case Data_Module.LOGIN.FieldByName('LOC_ID').AsInteger of
1:Begin
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db1.adb';
Data_Module.ACRDatabase1.DatabaseName :='database1';
End;
2:Begin
Data_Module.ACRDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName)+ '..\database\db2.adb';
Data_Module.ACRDatabase1.DatabaseName :='database2';
End;
end;