我的主窗体上显示错误的数据库名称

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;