科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux上的DB2中生成动态数据输入表单 (2)

Linux上的DB2中生成动态数据输入表单 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在本文中,为了动态构建视图和表单,我将检查 ® DB2® Universal Database™ (UDB) 元数据。特别是,我将使用 Linux 上的 ® Kylix 3™ 和 Borland dbExpress 数据访问驱动程序,来分析 DB2 UDB 数据库表、字段(名称和类型).

作者:ChinaITLab 来源:ChinaITLab 2007年10月17日

关键字: 操作系统 表单 DB2 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

Meta Data TabSheet 由左边的 TListBox 控件和右边的 TCheckListBox 控件组成,前者将用 DB2 UDB SAMPLE 数据库表中的表名进行填充,后者将用已选定表中的有效字段名进行填充。

Generate 按钮将准备并执行 SQL 语句,将由此产生的数据放入一个窗格中(在 Data Grid 选项卡上),或者放入单独的数据感知控件中(在 Data Controls 选项卡中)。

检索 TableNames

首先要做的事情是检索数据库中的可用表名。假定 SQLConnection 组件可以建立到 DB2 UDB 数据库的连接(在本例中,是 SAMPLE 数据库或其他任何数据库),您只能显式打开连接,然后,您可以调用 GetTableNames 方法。该方法期望将 TStrings 变量作为第一个参数。而不是声明并使用我们自己的 TStringList 作为第一个参数,您可以直接将结果分配给 ListBox 的 Items 属性,如下面代码片段所示:

  
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  SQLConnection1.Connected := True;
  SQLConnection1.GetTableNames(ListBox1.Items, False);
  PageControl1.ActivePageIndex := 0
  end;
  

在创建表单时(即,在 OnCreate 事件处理程序中),执行该代码的结果是:当启动应用程序时,用所有可用表填充 TListBox 控件。

分析字段定义

下一步取决于最终用户。为了选择特定的表,显示可用字段,最终用户必须双击 ListBox 控件中的表。这将激活一个事件处理程序,该程序采用 ListBox 中的表名,并为该表检索元数据。从元数据来看,您必须使用字段名的列表,将它们放置在第二个列表框 TCheckListBox 中。

为了做到这一点,您可以使用 TSQLDataSet 组件,将 CommandType 设置为 ctTable,并将 CommandText 设置为从第一个 TListBox 控件中选定的表的名称,该表可以在 ListBox1.Items[ListBox1.ItemIndex] 中找到。然后,一定不要激活(或者打开) TSQLDataSet,这一点很重要,因为它会将 select * 从您选定的表名发送到数据库,在此时,这项操作并不是您想要的。您应该调用 TSQLDataSet.FieldDefs.Update 方法,该方法只为字段定义检索元数据,没有为选定的表本身检索实际记录数据。

使用该字段定义元数据,您就可以遍历单独的字段定义,将字段的名称放置在 TCheckListBox 中(您还可以包括该字段的类型,但是,该类型您在下一步中才会用到,即,在为选定的字段创建适当的数据感知控件时才会用到)。

检索字段定义并更新 TCheckListBox 的源代码片段如下所示:

 

 
  procedure TForm1.SelectTableClick(Sender: TObject);
  var
  i: Integer;
  begin
  ClientDataSet1.Active := False;
  SQLDataSet1.CommandType := ctTable;
  if ListBox1.ItemIndex >= 0 then
  SQLDataSet1.CommandText := ListBox1.Items[ListBox1.ItemIndex];
  SQLDataSet1.FieldDefs.Update; // get meta information
  CheckListBox1.Clear;
  for i:=0 to Pred(SQLDataSet1.FieldDefs.Count) do
  CheckListBox1.Items.Add(SQLDataSet1.FieldDefs[i].Name)
  end;
  

注意,在添加新的字段名之前,应该清除 TCheckListBox,这样,最终用户就可以连续双击不同的表名,查看每次出现在 TCheckListBox 表中的新的字段列表。

以下截屏显示了第一次双击位于表单左边 TListBox 中的 EMPLOYEE 表的效果,然后,可以检查复选框,获得位于表单右边的 TCheckListBox 表中的前 11 个字段。

 

 

图 3. 元数据:表和字段

下一步是生成 SQL 语句,只选择指定表(本例中是 EMPLOYEE)中复选的字段,然后在数据格以及数据感知控件中显示结果。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章