- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
目前我有一个捕获登录数据的表单,一个带有 TIWDBGrid 的表单,它应该返回与我从我的 mysql 数据库登录时创建的 user_id 关联的任何主机,以及一个共享数据模块。
下面是我的登录页面代码
unit login_unit;
giao diện
sử dụng
Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, IWCompButton,
IWCompLabel, Vcl.Controls, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl,
IWControl, IWCompEdit;
kiểu
Tlogin_form = class(TIWAppForm)
enter_usermame_TIWEdit: TIWEdit;
enter_password_TIWEdit: TIWEdit;
Username: TIWLabel;
Password: TIWLabel;
login_TIWButton: TIWButton;
returned_user_id_TIWEdit: TIWEdit;
procedure login_TIWButtonClick(Sender: TObject);
công cộng
kết thúc;
implementation
{$R *.dfm}
uses email_data, host_lookup_unit;
procedure Tlogin_form.login_TIWButtonClick(Sender: TObject);
của chúng tôi
host_lookup_form:Thost_lookup_Form;
bắt đầu
email_data_DataModule.Login_userProc.Prepare;
email_data_DataModule.Login_userProc.ParamByName('user_name_').Value := enter_usermame_TIWEdit.Text;
email_data_DataModule.Login_userProc.ParamByName('pass_word_').Value := enter_password_TIWEdit.Text;
email_data_DataModule.Login_userProc.Execute;
email_data_DataModule._user_id := email_data_DataModule.Login_userProc.ParamByName('user_id_').Value;
returned_user_id_TIWEdit.Text := email_data_DataModule.Login_userProc.ParamByName('user_id_').Value;
email_data_DataModule.Hosts_requested_frm_user_idProc.Prepare;
email_data_DataModule.Hosts_requested_frm_user_idProc.ParamByName('user_id_').Value := email_data_DataModule._user_id;
email_data_DataModule.Hosts_requested_frm_user_idProc.Execute;
thost_lookup_form.Create(Self).Show;
kết thúc;
initialization
Tlogin_form.SetAsMainForm;
end.
我的 host_look up 页面有一个 TIWDBGrid 组件,它看起来像下面这样:
unit host_lookup_unit;
giao diện
sử dụng
Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, Vcl.Controls,
IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompGrids,
IWDBGrids, IWCompButton;
kiểu
Thost_lookup_Form = class(TIWAppForm)
IWDBGrid1: TIWDBGrid;
công cộng
kết thúc;
implementation
{$R *.dfm}
uses email_data;
end.
我确保将 DataSource 选项设置为 email_data_DataModule.hosts_table_requested_TDataSource
最后我的数据模块的代码如下:
unit email_data;
giao diện
sử dụng
Forms,
SysUtils, Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error,
FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MySQL, FireDAC.Phys.MySQLDef,
FireDAC.VCLUI.Wait, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client;
kiểu
Temail_data_DataModule = class(TDataModule)
EmaildbConnection: TFDConnection;
Login_userProc: TFDStoredProc;
hosts_table_requested_TDataSource: TDataSource;
Hosts_requested_frm_user_idProc: TFDStoredProc;
riêng tư
công cộng
_user_id : integer;
kết thúc;
function email_data_DataModule:Temail_data_DataModule;
implementation
{$R *.dfm}
uses ServerController;
function email_data_DataModule:Temail_data_DataModule;
bắt đầu
result := UserSession.email_data_DataModule;
kết thúc;
end.
我如何确保将数据从 Hosts_requested_frm_user_idProc 填充到我的 IWDBGrid?
提前致谢,抱歉发了这么长的帖子
câu trả lời hay nhất
您的申请存在一些问题:
首先,您所有的表单都需要将 WebApplication 对象作为所有者,因此将您创建 IWForm 的行更改为
procedure Tlogin_form.login_TIWButtonClick(Sender: TObject);
của chúng tôi
host_lookup_form:Thost_lookup_Form;
bắt đầu
...
thost_lookup_form.Create(WebApplication).Show;
kết thúc;
其次,我认为您不应该使用存储过程来检索数据,而应该使用查询对象。如果您使用的是 FireDAC,请考虑将其更改为将检索结果集的 TFDQuery。
此外,您必须将 TDataSource 与 IWDBGrid 放在相同的形式中,并通过 IWDBGrid.DataSource 属性连接它们。
将声明DataModule的单元添加到IWForm的uses子句中(在接口(interface)部分),并声明一个表单的字段。所以你应该有这样的东西:
unit host_lookup_unit;
giao diện
sử dụng
Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, Vcl.Controls,
IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompGrids,
IWDBGrids, IWCompButton,
email_data; // <- Include your DM here
kiểu
Thost_lookup_Form = class(TIWAppForm)
IWDBGrid1: TIWDBGrid;
hosts_table_requested_TDataSource: TDataSource;
riêng tư
FDataModule: Temail_data_DataModule;
công cộng
kết thúc;
implementation
{$R *.dfm}
procedure Thost_lookup_Form .host_lookup_FormCreate(Sender: TObject);
bắt đầu
FDataModule := email_data_DataModule; // set your field referencing the DM here and use it within your form. Don't use the email_data_DataModule() function anymore!
hosts_table_requested_TDataSource.DataSet := FDataModule.Login_userQuery; // Connect your DataSource and your DataSet, via code. This is the best way to do it!
kết thúc;
我还强烈建议您从表单中删除处理设置参数和打开查询的逻辑。此代码属于 DataModule!
你应该有这样的东西:
unit email_data;
giao diện
sử dụng
Forms,
SysUtils, Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error,
FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MySQL, FireDAC.Phys.MySQLDef,
FireDAC.VCLUI.Wait, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client;
kiểu
Temail_data_DataModule = class(TDataModule)
EmaildbConnection: TFDConnection;
Login_userQuery: TFDQuery;
Hosts_requested_frm_user_idQuery: TFDQuery;
riêng tư
F_user_id: Integer;
công cộng
function SetUserNameAndPassword(const AUserName, AUserPassword: string): Integer;
kết thúc;
function email_data_DataModule:Temail_data_DataModule;
implementation
{$R *.dfm}
uses ServerController;
function email_data_DataModule: Temail_data_DataModule;
bắt đầu
result := UserSession.email_data_DataModule;
kết thúc;
function Temail_data_DataModule.SetUserNameAndPassword(const AUserName, AUserPassword: string): Integer;
bắt đầu
Login_userQuery.Prepare;
Login_userQuery.ParamByName('user_name_').Value := AUserName;
Login_userQuery.ParamByName('pass_word_').Value := AUserPassword;
Login_userQuery.Open;
F_user_id := Login_userQuery.ParamByName('user_id_').Value;
Result := Login_userQuery.ParamByName('user_id_').Value;
Hosts_requested_frm_user_idQuery.Prepare;
Hosts_requested_frm_user_idQuery.ParamByName('user_id_').Value := F_user_id;
Hosts_requested_frm_user_idQuery.Open;
kết thúc;
end.
您现在需要做的就是构建并运行应用程序。它应该有效。
注意:以上所有代码都未经测试(我是在记事本中编写的,而不是在 Delphi IDE 中编写的)因此可能存在拼写错误和其他一些错误。
关于mysql - 我试图了解如何使用 TFDStoredProc(FireDac 组件)填充 TIWDBGrid(IntraWeb 组件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600711/
在 Delphi Firedac 中,我有一个很长的查询。我想重用它只是通过这样的参数更改列的名称 select f1, f2 from t1 where id = :par1 and :colimn
我正在使用FireDAC的Array DML功能将大量数据插入到我的远程MS SQL数据库中。 它可以正常工作,但需要一些时间来完成执行方法。当执行方法运行时,我想知道FireDAC的内部进度,以便可
您好,我正在使用Firebird(2.5)作为数据库使用Firedac(Delphi Seattle),当我使用TFDQuery运行此查询时,未返回任何记录: SELECT ID FROM USERS
我创建了一个非常简单的控制台应用程序并尝试使用 Firedac 访问 Firebird 数据库。我正在尝试使用私有(private)定义设置来实现连接池,如下所述:http://docwiki.emb
我使用 Delphi XE7 和 FireDAC 来访问 SQLite。 当我将数据放入 TEXT 字段时,任何尾随空格或 #0 字符都会被截断。 我可以在 SQLite 或 FireDAC 中更改一
我正在开发一个在启动时带有登录表单的应用程序。 在用户写入登录数据之前,我想谨慎地连接到 SQL 服务器。 问题是,当我的服务器连接速度慢或路径错误时,应用程序正在寻找服务器或尝试连接,但此时应用程序
我目前正在开发一个多线程服务器应用程序,我计划使用 Firedac 进行数据访问。从此处提供的文档:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/
我主要在后台线程中使用FireDAC,偶尔在主GUI线程中使用。 根据文档,有4种可能的执行模式,在我看来,只有2种是合适的: amBlocking The calling thread and GU
我正在尝试使用 FireDac 查询数据库。这是我的代码; procedure TfSMSViewer.LoadSMSFromDatabase(path: AnsiString); var con
我在 MS SQL Server 上创建了以下存储过程 CREATE PROCEDURE sppl_ParamTest @ID int = 666 AS BEGIN SELECT @ID;
我将 FireDac 与 Oracle 12c 数据库和 Delphi Seattle 结合使用。 我有一张员工表 EmployeeID - NUMBER GENERATED ALWAYS AS ID
我使用的是这里的示例: establishing connection 这样做: procedure TDataModule2.DataModuleCreate(Sender: TObject); b
我正在尝试用 Firedac MemoryTables 替换 Delphi ClientDatasets,它运行良好,但在处理大数据时速度非常慢我在数据模块中创建 FireDac 内存表并从表单填充它
我无法使用以下指令更新数据库中的行: fdquery1.Edit; fdquery1.fieldByName('prova').AsString := 'asdasd'; fdquery1.Open
我正在将 XE6 与 FireDac 一起使用。我有一个 FDMemTable,其中 ItemVals 作为 ftfloat 字段。我想使用 SUM(ItemVals) 的聚合函数,但我只想添加值 >
如何使用 FireDac 组件检查 DBMS 是否支持事务? 通常,我使用类似以下代码的内容,使用 dbExpress 在我的 DAO 类中执行事务。 ... connection: TSQLConn
我正在 Delphi 10.1 Berlin 下使用 FireDac。 为了向用户显示数据,我使用 TDBEdit 等数据感知控件。 我使用 TFDQuery 和 TDataSource 将它们与控件
我正在尝试使用 FireDAC 中的宏来预处理我的 SQL 查询。我在数据模块上有一个 TADQuery 对象,其 SQL 设置如下: Select * from MyTable join Oth
我想将一个非空非自动递增整数作为我的主键,但我无法在设计时使用 Firedac 来做到这一点。 TIntegerfield 没有任何参数可以让我将其设为主要参数。 TFDTable 也没有参数,我可以
我在 Firebird 数据库中定义了这个存储过程: create or alter procedure GET_MSG ( IDLNG smallint, IDMSG integer
Tôi là một lập trình viên xuất sắc, rất giỏi!