我正在尝试用MySQL连接两个表单,我不能很好地解释它。
当我点击他(点击他的ID或ID Održ或名字或姓氏)时,我想以其他形式显示用户的名字和姓氏。
我如何使用MySQL做到这一点?我是Delphi和MySQL的初学者。
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;
**第三:**在明细表中,有两种可能的实现:
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;
1条答案
按热度按时间niwlg2el1#
这纯粹与Delphi有关,而与DBMS(MySQL或其他)无关。您要尝试实现的是在第二个窗体上显示来自主窗体数据集的数据以获取详细信息(显示为模式)。
您需要更具体地说明您的实现:
以下是适用于您的情况的可能步骤:假设您的数据集控件名为“”DataSet“”,主窗体为“”Form1“”,详细信息窗体为“”Form2“”。
**首先:**如果您的DataSet在主窗体上,为了避免循环依赖,您必须声明:
如果您的DataSet位于独立的“DataModule”上,则必须声明:
**第二:**转到DBGrid“OnCellClick”事件(因为您只想单击单元格),编写代码以检查列的FieldName是“”ID“”、“”Last Name“”还是您想要的任何名称,然后显示详细信息表单(Showmodal)
**第三:**在明细表中,有两种可能的实现:
或者像这样:
**Fourth:**存在一个已知问题,第二个Form“”OnShow“”事件仅在表单创建后第一次调用“”ShowModal“”时激发,而不是在后续调用中激发。作为一种解决方法,您必须在关闭详细信息表单时释放或隐藏它。您可以通过Detail Form“”OnClose“”事件来实现这一点,方法是为Close操作(“”caFree“”或“”Caide“”)设置一个值。“”
**第五:**如果要从详细信息表单更新当前记录,则必须在详细信息表单中放置一个用于验证的控件(如按钮),该控件带有一个“onClick”事件处理程序,该事件处理程序将提交对数据集的更改并关闭详细信息表单。还有一个窗体的‘’ModalResult‘’属性,当为其赋值非零值时,将关闭模式窗体并将该值返回给在主窗体中调用的函数‘’ShowModal‘’:
如果在模式表单中调用Close方法,则“modalResult”将自动设置为“mrCancel”。下面是一个更新记录的示例,不需要‘’modalResult‘’属性(如果您的DataSet位于DataModule上,则将“Form1”替换为DataModule的名称):