Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103632430
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-14 13:16:45

 来源:ChinaITLab  

生成动态 SQL 语句

通过将 TSQLDataSet 的 CommandType 属性设置为 ctQuery,可以启动 Generate 按钮(图 3 中可以看见它)的 OnClick 事件处理程序。这时,不需要在 CommandText 中指定 TableName,但实际的 SQL 语句会从指定的表中选择复选的字段。您可以从把 SELECT 分配给 CommandText 属性开始,然后遍历 TCheckListBox 控件中的项。注意,您无需再次从选定的表中检索元数据,因为相应的字段名已经添加到 TCheckListBox 中,因此,您可以只使用该控件中的字段名(只需验证其复选属性是否被设为 True,以便使用每个单独的字段名)。

下方代码片段中的变量 comma 是必需的,除了首字段之外,要确保每个字段前面都插入了一个逗号。这将在选定字段列表中产生一个包含一个或多个字段的有效 SQL 语句 。

  
  procedure TForm1.btnGenerateClick(Sender: TObject);
  var
  i,Y: Integer;
  comma: Boolean;
  begin
  ClientDataSet1.Active := False;
  SQLDataSet1.CommandType := ctQuery;
  SQLDataSet1.CommandText := 'SELECT ';
  comma := False;
  for i:=0 to Pred(CheckListBox1.Items.Count) do
  begin
  if CheckListBox1.Checked[i] then
  begin
  if not comma then comma := True
  else
  SQLDataSet1.CommandText := SQLDataSet1.CommandText + ', ';
  SQLDataSet1.CommandText := SQLDataSet1.CommandText + CheckListBox1.Items[i]
  end
  end;
  if ListBox1.ItemIndex >= 0 then
  SQLDataSet1.CommandText :=
  SQLDataSet1.CommandText + ' FROM ' + ListBox1.Items[ListBox1.ItemIndex];
  //ShowMessage(SQLDataSet1.CommandText);
  
  ClientDataSet1.Active := True;
  
  PageControl1.ActivePageIndex := PageControl1.ActivePageIndex + 1
  end;
  

在完成对字段列表的操作之后,您惟一需要做的就是添加 FROM 字符串,该字符串后面是数据库表的名称,您仍然可以在 TListBox 控件中找到该表。在完成这一步骤之后,您可以将 TClientDataSet 组件的 Active 属性设置为 True,这将激活 TSQLDataSet 组件中的 SQL 命令,使数据有效。

阅读(363) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~