如何在我点击用户的ID或数据时以其他形式显示用户的名字和姓氏

vxf3dgd4  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(128)

我正在尝试用MySQL连接两个表单,我不能很好地解释它。

当我点击他(点击他的ID或ID Održ或名字或姓氏)时,我想以其他形式显示用户的名字和姓氏。

我如何使用MySQL做到这一点?我是Delphi和MySQL的初学者。

niwlg2el

niwlg2el1#

这纯粹与Delphi有关,而与DBMS(MySQL或其他)无关。您要尝试实现的是在第二个窗体上显示来自主窗体数据集的数据以获取详细信息(显示为模式)。

您需要更具体地说明您的实现:

  • 数据集的位置:在主窗体上还是在独立的数据模块上?
  • 此外,您没有指定所选记录的值将如何在详细信息表单中使用:在标签、变量或其他数据库感知控件中?
  • 是否存在双向关系(在详细表单上编辑将编辑主表单上的记录)?

以下是适用于您的情况的可能步骤:假设您的数据集控件名为“”DataSet“”,主窗体为“”Form1“”,详细信息窗体为“”Form2“”。

**首先:**如果您的DataSet在主窗体上,为了避免循环依赖,您必须声明:

  • 实现中的详细表单单位使用主表单单位的一部分。
  • 界面中的主表单单位使用详细表单单位的一部分。

如果您的DataSet位于独立的“DataModule”上,则必须声明:

  • 实现中的详细表单单位使用主表单单位的一部分。
  • 接口中的数据模块单位使用两种形式的单位的一部分。

**第二:**转到DBGrid“OnCellClick”事件(因为您只想单击单元格),编写代码以检查列的FieldName是“”ID“”、“”Last Name“”还是您想要的任何名称,然后显示详细信息表单(Showmodal)

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  //Add whatever fields you want
  If (Column.FieldName = 'Id') or (Column.FieldName = 'Last Name') then
   Form2.ShowModal;  
end;

**第三:**在明细表中,有两种可能的实现:

  • 如果您具有支持DB的控件(TDBEdit、TDBLabel等),则可以设置其“”DataSource“”和“”Datafield“”属性以获取数据并与其交换数据,例如“”Form1.Dataset“”或“”DataModule1.Dataset“”。并且每次显示详细信息表单时都会刷新数据。
  • 如果要在变量或自定义逻辑中使用所选记录的值(如将TLabel的标题更改为类似‘’User is%s,id%u‘’的内容,或用作筛选另一个数据集的外键),则必须在详细信息表单‘’OnShow‘’事件中获取并设置这些值,如下例所示:
procedure TForm2.FormShow(Sender: TObject);
begin
  Label1.Caption := Format('Details of %s %s - Id : %u', [Form1.Dataset.FirstNameField.AsString, Form1.Dataset.LastNameField.AsString, Form1.Dataset.IdField.AsInteger]);
end;

或者像这样:

procedure TForm2.FormShow(Sender: TObject);
var
  FirstName, LastName: string;
  Id: Integer;
begin
  FirstName := Form1.Dataset.FirstNameField.AsString;
  LastName := Form1.Dataset.LastNameField.AsString;
  Id := Form1.Dataset.IdField.AsInteger;
end;

**Fourth:**存在一个已知问题,第二个Form“”OnShow“”事件仅在表单创建后第一次调用“”ShowModal“”时激发,而不是在后续调用中激发。作为一种解决方法,您必须在关闭详细信息表单时释放或隐藏它。您可以通过Detail Form“”OnClose“”事件来实现这一点,方法是为Close操作(“”caFree“”或“”Caide“”)设置一个值。“”

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caHide;
end;

**第五:**如果要从详细信息表单更新当前记录,则必须在详细信息表单中放置一个用于验证的控件(如按钮),该控件带有一个“onClick”事件处理程序,该事件处理程序将提交对数据集的更改并关闭详细信息表单。还有一个窗体的‘’ModalResult‘’属性,当为其赋值非零值时,将关闭模式窗体并将该值返回给在主窗体中调用的函数‘’ShowModal‘’:

  • 如果使用此属性,则详细信息表单上的验证按钮必须为返回值赋值,并且在主表单上,您必须检查返回值并从详细信息中接收作为变量的更新值。
  • 但您也可以避免使用它,以便将更新逻辑保留在详细信息表单上。

如果在模式表单中调用Close方法,则“modalResult”将自动设置为“mrCancel”。下面是一个更新记录的示例,不需要‘’modalResult‘’属性(如果您的DataSet位于DataModule上,则将“Form1”替换为DataModule的名称):

procedure TForm2.BtnSaveClick(Sender: TObject); 
begin 
  try
    Form1.Dataset.Edit;
    try 
      Form1.Dataset.FirstNameField.AsString := EditFirstName.Caption;
      Form1.Dataset.LastNameField.AsString := EditLastName.Caption;
      Form1.Dataset.Post; 
    except
      Form1.Dataset.Cancel;
    end;
  finally
    Close;
  end;
end;

相关问题