焦急,我是新手,请问谁有动态调整字段顺序的代码?100分! ( 积分: 100 )

  • 主题发起人 主题发起人 hzzz_lgh3399
  • 开始时间 开始时间
H

hzzz_lgh3399

Unregistered / Unconfirmed
GUEST, unregistred user!
我在SQL server表里面有30个字段,想显示某些字段,以及可以随意调整这些字段位置,请问怎样能实现?我用的是d7+ado+sql server 。给个代码给我学习一下?
 
我在SQL server表里面有30个字段,想显示某些字段,以及可以随意调整这些字段位置,请问怎样能实现?我用的是d7+ado+sql server 。给个代码给我学习一下?
 
不能完全理解你的问题。

我觉得有两种方法,一种是设定字段顺序后,重新用 AdoQuery 取一次数据,如果不想再次访问数据库,那也可以只是改变显示的顺序,例如用stringGrid之类的东西来显示。
 
楼主的问题是如何让用户可以自定义显示哪些字段及设置它们的顺序。
ADOConnection有两个很有用的方法是
procedure TADOConnection.GetFieldNames(const TableName: string; List: TStrings);
procedure TADOConnection.GetTableNames(List: TStrings; SystemTables: Boolean);
这两个函数可用于动态获取表名和字段名,并让它显示在Tstrings中,然后写个针对Tstrings的排序的界面和算法就差不多了
 
楼主是不是想在显示的时候,可以通过修改字段显示顺序来达到结果的按要求显示?
比如用DBGride显示查询结果。然后可以在其他地方调整字段显示顺序,要求DBGride 做出相应的变化?
 
如果是这样,那么可以使用listbox来做调整顺序的功能,然后通过Sql语句来刷新DBGride显示,如果是这样请回 lyfe_1980@163.com
 
使用动态SQL实现.
确定你需要的顺序,再生成SQL语句执行就可以了
 
这个东西几句话讲不明白的。
 
规划:
1。用Listbox选择并组合字段组合。
2。动态SQL查询。
实现:
1.做2个Listbox,
2.第1个Listbox显示表中全部字段(30个)。
3.第2个Listbox显示需要查询的字段。
4.编程实现选择所需显示字段。
5. 根据第2个Listbox显示需要查询的字段生成SQL查询字符串。
6.用ADOquery动态查询,并显示在DBGrid或其他控件。
 
好,这个问题我来解决
因为还要上班,
下午把源代码贴出来
 
就直接用DBGRIDEH吧,这些功能都是现成的,好用得很,我用的是EhLib v3.3 直接放一个表格上去就行了,运行时,你想调顺序就点着列表头来拖动就行了,至于想隐藏字段什么的,你就在列表头上点右键菜单就行了。
 
app2001 我没有用过Dbgrideh,那里有的下载?
能否发送一个
URL也可以
lyfe_1980@163.com
 
http://www.2ccc.com/article.asp?articleid=2312
 
你的问题我已经解决了
已经发送到你的邮箱hzzz_lgh3399@sina.com
请注意查收。
你用的时候 ,记得修改一下你的数据库连接
和标的名字。
字段名字是从数据表中动态获得
双击列表框实现添加和移出功能。
绝对解决你的问题
有问题可以再问
 
谢谢 app2001 ,刚才一直在帮搂主写程序
写完才下载的。
谢谢
 
各位DFW帮忙看看,楼主的问题解决方法,有没有需要修改的地方?


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, StdCtrls, ADODB, Grids, DBGrids;

type
TForm1 = class(TForm)
DBGridView: TDBGrid;
ADOConnection1: TADOConnection;
ADOQueryView: TADOQuery;
ADOQueryEditFields: TADOQuery;
listShowFields: TListBox;
ButShowView: TButton;
DataSource1: TDataSource;
listGetfields: TListBox;
ButUp: TButton;
ButDown: TButton;
procedure FormShow(Sender: TObject);
procedure listGetfieldsDblClick(Sender: TObject);
procedure listShowFieldsDblClick(Sender: TObject);
procedure ButUpClick(Sender: TObject);
procedure ButDownClick(Sender: TObject);
procedure ButShowViewClick(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var
I :integer;
StrfieldName:string;
StrSQLGetAllFields:string;
begin
strsqlgetallfields:='select * from s_score_sen1'; //S_Score_sen1 为表名(因为楼主没给我数据库结构,所以用自己的表来代替) 修改连接
with self.ADOQueryEditFields do //修改时把表的名字改一下,以下相同
begin
close;
sql.Clear ;
sql.Add(Strsqlgetallfields);
open;

for i:=0 to self.ADOQueryEditFields.FieldCount -1 do
begin
strfieldname:=Trim(fields.Fields.FieldName);
self.listgetFields.Items.Add(strfieldname);
end;
end;
end;



procedure TForm1.listGetfieldsDblClick(Sender: TObject);
begin
if self.listGetfields.ItemIndex >=0 then
begin
Listshowfields.Items.Add(Listgetfields.Items.Strings[Listgetfields.ItemIndex]);
Listgetfields.DeleteSelected;
end;
end;

procedure TForm1.listShowFieldsDblClick(Sender: TObject);
begin
if self.listshowfields.ItemIndex >=0 then
begin
Listgetfields.Items.Add(Listshowfields.Items.Strings[Listshowfields.ItemIndex]);
Listshowfields.DeleteSelected;
end;
end;

procedure TForm1.ButUpClick(Sender: TObject);
begin
self.ButDown.Enabled :=true;
if self.listShowFields.ItemIndex >=0 then
with self.listShowFields do
begin
if itemindex>0 then
begin
self.ButUp.Enabled :=true;
Items.Exchange(ItemIndex,ItemIndex-1) ;
end
else
self.ButUp.Enabled :=false;
end;
end;

procedure TForm1.ButDownClick(Sender: TObject);
begin
self.ButUp.Enabled :=true;
if self.listShowFields.ItemIndex >=0 then
with self.listShowFields do
begin
if itemindex<items.Count-1 then
begin
self.Butdown.Enabled :=true;
Items.Exchange(ItemIndex,ItemIndex+1) ;
end
else
self.Butdown.Enabled :=false;
end;
end;

procedure TForm1.ButShowViewClick(Sender: TObject);
var
StrSqlShowView:String;
i:integer;
begin
StrSQLshowview:='select ';
for i:=0 to self.listShowFields.Items.Count-2 do
begin
strsqlshowview :=Strsqlshowview+ trim(self.listShowFields.Items.Strings)+',';
end;
Strsqlshowview:=strsqlshowview+ trim(self.listShowFields.Items.Strings[self.listShowFields.Items.count-1])+' ';
strsqlshowview:=strsqlshowview+'from S_Score_Sen1';
with self.ADOQueryView do
begin
close;
sql.Clear ;
sql.Add(Strsqlshowview);
open;
end;
end;

end.
 
HuangJH比较勤快,精神鼓励一下:D
 
谢谢楼上
希望赶紧揭帖,我等分开锅呢!
昨天刚刚创建的帐号,以前的被封掉了
提倡认真解决问题
在解决问题中提高,在解决问题中助人!
 
多谢各位,我试一试。已送分!可惜不能附上具体的例子!

做人贵在收诺言!!!
 
后退
顶部