本人菜鸟,刚接触DELPHI  
試著做树结构时遇到问题,请高手帮忙解答,   請問該如何以 ADOQuery 連結 SQL Sever,
並且以 Edit 輸入查詢值後,按下 Button1
由 TreeView 顯示查詢到的值?

解决方案 »

  1.   

    两个步骤
    1.设置sql语句: 'select * from table where 字段='+QuotedStr(Edit1.Text)
    2.数据集打开后,根据记录的上下级关系去生成树,代码论坛里有很多,搜一下
    http://topic.csdn.net/u/20090311/11/5b284b86-7434-412e-8c66-67f06a432d97.html
    看看上面这个帖子,里面有一个代码,看BuildTree和BuildNode
      

  2.   

    两个步骤
    1.设置sql语句: 'select * from table where 字段='+QuotedStr(Edit1.Text)
    2.数据集打开后,根据记录的上下级关系去生成树,代码论坛里有很多,搜一下
    http://topic.csdn.net/u/20090311/11/5b284b86-7434-412e-8c66-67f06a432d97.html
    看看上面这个帖子,里面有一个代码,看BuildTree和BuildNode
      

  3.   

    两个步骤
    1.设置sql语句: 'select * from table where 字段='+QuotedStr(Edit1.Text)
    2.数据集打开后,根据记录的上下级关系去生成树,代码论坛里有很多,搜一下
    http://topic.csdn.net/u/20090311/11/5b284b86-7434-412e-8c66-67f06a432d97.html
    看看上面这个帖子,里面有一个代码,看BuildTree和BuildNode
      

  4.   


    TO bdmh 大大~
    1.設置SQL語句~我還是學書本上的做了.雖然長了些~但可以
      ADOQuery1.sql.add('select * from MF where bom_no Like ''%'+edit1.Text+'%''');
      而您給的是否為Adoquery1.sql.add('select * from MF where bom_no=')+quotedstr(edit1.text); <<是否我寫錯?因為沒辦法耶2.您給我看的帖子,我有很努力的研究,但看不太懂。不過我會繼續研究看看附上我寫的CODE..一直有ADOTFB:Parameter'bom_no' not found 錯,但我不知道原因unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, DBGrids, ComCtrls, RpCon, RpConDS, RpBase, RpSystem,
      RpDefine, RpRave, DB, ADODB;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        DBGrid1: TDBGrid;
        Label1: TLabel;
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        ListBox1: TListBox;
        DataSource1: TDataSource;
        ADOConnection1: TADOConnection;
        ADOMFB: TADOQuery;
        ADOTFB: TADOQuery;
        ADOUKS: TADOQuery;
        RvProject1: TRvProject;
        RvSystem1: TRvSystem;
        RvDataSetMFB: TRvDataSetConnection;
        RvDataSetTFB: TRvDataSetConnection;
        RvDataSetUKS: TRvDataSetConnection;
        procedure Button2Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure ListBox1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure TreeView1Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }  end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    Newnode: TTreeNode;
    begin
    with   adoMFB   do
      begin
      sql.clear;
      sql.add('select * from MF_BOM where BOM_NO Like ''%'+edit1.Text+'%''');
      close;
      open;
      Newnode:=treeview1.items.add(nil,adomfb.fieldbyname('BOM_NO').value); 
      while not adoMFB.eof   do
         begin
         newnode:=treeview1.Items.AddChild(newnode,adomfb.fieldbyname('PRD_NO').value);
         with   adoTFB   do
         begin
           sql.Clear;
           sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME from TF_BOM AS T, TF_UKS AS U ');
           Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').value,1,2);
           close;
           open;
           first;
           while not adoTFB.Eof do
           begin
             treeview1.Items.AddChild(newnode,adoTFB.fieldbyname('PRD_NO').value);
             next;
           end;
          end;
            next;
          end;
       end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    RvProject1.Execute;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    try
       ADOConnection1.Connected:=true;
    except
       showmessage('無法中斷連線!');
    end;end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    try
       ADOConnection1.Connected:=true;
    except
       showmessage('無法連線!');
    end;Rvproject1.Open;
    Rvproject1.getreportlist(Listbox1.items,true);
    end;procedure TForm1.ListBox1Click(Sender: TObject);
    begin
    Rvproject1.selectreport(listbox1.Items[listbox1.itemindex],true);
    end;procedure TForm1.TreeView1Click(Sender: TObject);
    begin
    if   treeview1.Selected.Level=1   then
          begin
              with ADOMFB DO
              begin
                SQL.Clear;
                sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO''%'+edit1.Text+'%''');
                Parameters.ParamByName('BOM_NO').Value:=copy(treeview1.Selected.Text,4,2);
                showmessage(copy(treeview1.Selected.Text,4,2));
                CLOSE;
                open;
                //treeview1.Selected:=nil;
              end;
          if   treeview1.Selected.Level=2   then
              With ADOMFB DO
              begin
                  Close;
                  SQL.Clear;
                  SQL.Add('select BOM_NO,PRD_NO,NAME,SPC,QTY from ADOMFB');
                  if Edit1.Text<>'' then
                  sql.Add('where BOM_NO LIKE ''%'+Edit1.text+'%'' ');
                  Parameters.ParamByName('BOM_NO').Value:=copy(treeview1.Selected.Text,2,4);
                  showmessage(copy(treeview1.Selected.Text,2,4));
                  Open;
              end;
         end;
    end;
    end.
      

  5.   

    Adoquery1.sql.add('select * from MF where bom_no=')+quotedstr(edit1.text);  < <是否我寫錯?因為沒辦法耶 
    更改为
    Adoquery1.sql.add('select * from MF where bom_no='+quotedstr(edit1.text)); 
      

  6.   

    一直有ADOTFB:Parameter'bom_no' not found 錯,但我不知道原因 
    这个是因为你的字段名错误,SQLServer认为他是参数了。 sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO ''%'+edit1.Text+'%''');这句错误了
    正确的为
     sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO like'+ QuotedStr('%'+edit1.Text+'%'));
      

  7.   

    Parameters.ParamByName('BOM_NO').Value:=copy(treeview1.Selected.Text,4,2);

    Parameters.ParamByName('BOM_NO').Value:=copy(treeview1.Selected.Text,2,4);
    是多余的,如果你要使用参数的话
    这样
    sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO like :BOM_NO');
    Parameters.ParamByName('BOM_NO').Value:= QuotedStr('%'+edit1.Text+'%')
      

  8.   

    TO SmallHand~
    1.這個我知道我哪寫錯了.感謝你的建議
    2.Button1click做了些修改~你給我的建議我也做修改了.父節點可以順利的出現,而也沒再出現那個錯误讯息。
      但是子節點依舊沒出現,麻煩請在幫我看看糾正..非常感謝
    procedure TForm1.Button1Click(Sender: TObject);
    var
    Newnode: TTreeNode;
    begin
    Treeview1.Items.Clear;
    treeview1.Items.BeginUpdate;
    with adoMFB do
      begin
      sql.clear;
      sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO like'+ QuotedStr('%'+edit1.Text+'%'));
      close;
      open;
      Newnode:=treeview1.items.add(nil,adomfb.fieldbyname('BOM_NO').ASString+(adomfb.FieldByName('NAME')).asstring);
      while not adoMFB.eof   do
         begin
         with adoTFB do
         begin
           sql.Clear;
           sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME from TF_BOM AS T, TF_UKS AS U where T.BOM_NO like :BOM_NO');
           Parameters.ParamByName('BOM_NO').Value:=copy(adoMFB.fieldbyname('BOM_NO').AsString,1,2);
           close;
           open;
           newnode:=treeview1.Items.AddChild(newnode,adoTFB.fieldbyname('BOM_NO').AsString);
           first;
           while not adoTFB.Eof do
           begin
             treeview1.Items.AddChild(newnode,adoTFB.fieldbyname('PRD_NO').ASString);
             next;
           end;
          end;
            next;
          end;
       end;
       treeview1.Items.EndUpdate;
    end;
    procedure TForm1.TreeView1Click(Sender: TObject);
    begin
    if   treeview1.Selected.Level=1   then
          begin
              with ADOMFB DO
              begin
                SQL.Clear;
                sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO like :BOM_NO');
                Parameters.ParamByName('BOM_NO').Value:= QuotedStr('%'+edit1.Text+'%');
                showmessage(copy(treeview1.Selected.Text,4,2));
                CLOSE;
                open;
                //treeview1.Selected:=nil;
              end;
          if   treeview1.Selected.Level=2   then
              With ADOMFB DO
              begin
                  Close;
                  SQL.Clear;
                  sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO like :BOM_NO');
                  Parameters.ParamByName('BOM_NO').Value:= QuotedStr('%'+edit1.Text+'%');
                  showmessage(copy(treeview1.Selected.Text,2,4));
                  Open;
              end;
         end;
    end;