数据库ca,表ba内容如下
A 1
A 2
B 3
B 4
C 5
C 6
显示为如下
A
|-1
|-2
B
|-3
|-4
C
|-5
|-6
请高手把源代码贴一下,万分感谢
A 1
A 2
B 3
B 4
C 5
C 6
显示为如下
A
|-1
|-2
B
|-3
|-4
C
|-5
|-6
请高手把源代码贴一下,万分感谢
解决方案 »
- 异常
- 谁的速度最快?
- DATABASE连接SQL2000报错!(两层)连接数据库成功但表格无法打开,说对象lxgl不存在!
- 在delphi中的listbox能否有vb中同样的功能呢?
- 其实是这样,见代码
- 将delphi程序改写成powerbuilder程序,试试看!
- 怎样给;listview按数字大小排序?
- 高分求rxrichedit的demo(rxlib for delphi6),以下的问题不知道如何解决???
- 请各位帮忙,解释一个一个Record类型 (Delphi)
- C++Builder XE子窗体位置一直在主窗体之前,如何修改?
- 可否自制一个游戏M人机器,如何实现(可否举个例子)
- delphi的记录允不允许嵌套定义,如何定义?
i: integer;
firstnode: TTreeNode;
FieldName,Number: String;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select FieldName from ba group by FieldName');
adoquery1.Open;
adoquery1.first;
while not ADOquery1.Eof do
begin
FirstNode := TreeView1.Items.Add(TreeView1.Items.GetFirstNode,FieldName);
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select * from ba where YourName = FieldName');
adoquery2.Open;
adoquery2.first;
while not ADOquery1.Eof do
begin
TreeView1.Items.AddChild(FirstNode,ADOQUERY2.FieldByName('Number').AsString);
adoquery2.next;
end;
adoquery1.next;
end;
end;
begin
Result := Copy(mStr, 1, Pos(mDelimiter, mStr) - 1);
end; { StrLeft }function ListCount(mList: string; mDelimiter: string = ','): Integer;
var
I, L: Integer;
begin
Result := 0;
if mList = '' then Exit;
L := Length(mList);
I := Pos(mDelimiter, mList);
while I > 0 do begin
mList := Copy(mList, I + Length(mDelimiter), L);
I := Pos(mDelimiter, mList);
Inc(Result);
end;
Inc(Result);
end; { ListCount }function ListValue(mList: string; mIndex: Integer; mDelimiter: string = ','): string;
var
I, L, K: Integer;
begin
L := Length(mList);
I := Pos(mDelimiter, mList);
K := 0;
Result := '';
while (I > 0) and (K <> mIndex) do begin
mList := Copy(mList, I + Length(mDelimiter), L);
I := Pos(mDelimiter, mList);
Inc(K);
end;
if K = mIndex then Result := StrLeft(mList + mDelimiter, mDelimiter);
end; { ListValue }function DataSetToText(mDataSet: TDataSet; mStrings: TStrings;
mFieldNames: string = '*'; mDelimiter: string = #9): Boolean;
var
vBook: string;
vFieldName: string;
I: Integer;
S: string;
begin
Result := False;
if (not Assigned(mDataSet)) or (not mDataSet.Active) or
(not Assigned(mStrings)) then Exit;
vBook := mDataSet.Book;
mDataSet.DisableControls;
mStrings.BeginUpdate;
try
mStrings.Text :=
StringReplace(Trim(mDataSet.FieldList.Text), #13#10,
mDelimiter, [rfReplaceAll]);
if mFieldNames = '*' then
mFieldNames := StringReplace(Trim(mDataSet.FieldList.Text), #13#10,
',', [rfReplaceAll]);
mDataSet.First;
while not mDataSet.Eof do begin
S := '';
for I := 0 to ListCount(mFieldNames) - 1 do begin
vFieldName := ListValue(mFieldNames, I);
if mDataSet.FieldList.IndexOf(vFieldName) < 0 then
S := S + mDelimiter + '<Error>'
else S := S + mDelimiter + mDataSet.FieldByName(vFieldName).DisplayText;
end;
Delete(S, 1, Length(mDelimiter));
mStrings.Add(S);
mDataSet.Next;
end;
finally
mDataSet.Book := vBook;
mDataSet.EnableControls;
mStrings.EndUpdate;
end;
Result := True;
end; { DataSetToText }function TreeNodeString(mTreeNode: TTreeNode; mDelimiter: string = '\'): string;
begin
Result := '';
while Assigned(mTreeNode) do begin
Result := mTreeNode.Text + mDelimiter + Result;
mTreeNode := mTreeNode.Parent;
end;
Delete(Result, Length(Result) - Length(mDelimiter) + 1, MaxInt);
end; { TreeNodeString }function LineTextToTreeView(mStrings: TStrings; mTreeView: TTreeView;
mDelimiter: string = '\'): Boolean;
var
I, J, K: Integer;
vStrPath: string;
vStrText: string;
vTreeNode: TTreeNode;
vBoolFind: Boolean;
begin
Result := False;
if not (Assigned(mTreeView) and Assigned(mStrings)) then Exit;
mTreeView.Items.BeginUpdate;
try
mTreeView.Items.Clear;
for I := 0 to mStrings.Count - 1 do begin
vStrPath := '';
vTreeNode := nil;
for J := 0 to ListCount(mStrings[I], mDelimiter) - 1 do begin
vStrText := ListValue(mStrings[I], J, mDelimiter);
vStrPath := vStrPath + mDelimiter + vStrText;
vBoolFind := False;
for K := 0 to mTreeView.Items.Count - 1 do
if mDelimiter + TreeNodeString(mTreeView.Items[K], mDelimiter) =
vStrPath then begin
vTreeNode := mTreeView.Items[K];
vBoolFind := True;
Break;
end;
if vBoolFind then Continue;
vTreeNode := mTreeView.Items.AddChild(vTreeNode, vStrText);
end;
end;
finally
mTreeView.Items.EndUpdate;
end;
Result := True;
end; { LineTextToTreeView }///////Begin Demo
procedure TForm1.Button1Click(Sender: TObject);
var
vStringList: TStringList;
begin
vStringList := TStringList.Create;
try
DataSetToText(Table1, vStringList, 'Filed1,Field2');
vStringList.Delete(0); //删除字段名~~
LineTextToTreeView(vStringList, TreeView1, #9);
finally
vStringList.Free;
end;
end;
///////End Demo