例如我想查询出某个柜组的所有商品的基本信息,包括商品代码,名称,供应商Id,销售数量、库存数量等,然后插入到我定义的一个类中,之后我想从类中取出数据,按照我选择的商品信息排序,例如按库存数量排序。
请各位高手帮忙,谢谢。

解决方案 »

  1.   

    先存到record里面放到TBaseArray里面,然后调用Sort按照相应的排序规则
      

  2.   

    可以参考TStringList的Sort跟CustomSort方法
      

  3.   

    无聊帮你用链表写了个,没有封装到类,
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;
    type
       CommodityLink = ^Commodity;
       Commodity = Record
         CommodityId : String;
         name : String;
         SupplierId : String;
         SaleNumber : integer;
         StockNumber : integer;
         Next :  CommodityLink;
       end;
    type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        Query1: TADOQuery;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      FirstList  : CommodityLink;
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
        New(FirstList);
        FirstList.CommodityId := '';
        FirstList.name := '';
        FirstList.SupplierId := '';
        FirstList.SaleNumber := 0;
        FirstList.StockNumber := 0;
        FirstList.Next := nil;
    end;
    //插入数据
    procedure TForm1.Button1Click(Sender: TObject);
    var
      NewLink,CurentLink,NextLink : CommodityLink;
    begin  Query1.Close;
      Query1.SQL.Text := 'Select * from s';
      Query1.Open;
      Query1.First;  NextLink := FirstList;
      while not query1.Eof do
      begin
        New(NewLink);
        NewLink.CommodityId := Query1.fieldbyName('商品代码').AsString;
        NewLink.name := Query1.fieldbyName('名称').AsString;
        NewLink.SupplierId := Query1.fieldbyName('供应商Id').AsString;
        NewLink.SaleNumber := Query1.fieldbyName('销售数量').AsInteger;
        NewLink.StockNumber := Query1.fieldbyName('库存数量').AsInteger;
        NewLink.Next := nil;    if NextLink = nil then
        begin
          FirstList.Next := NewLink;
        end
        else
          while(NextLink.Next <> nil) do
          begin
            NextLink := NextLink.Next;
          end;
        NextLink.Next := NewLink;
        Query1.Next;
      end;
    end;
    //排序
    procedure TForm1.Button2Click(Sender: TObject);
    var
      CurrentLink,NextLink : CommodityLink;
      temp : integer;
    begin
      CurrentLink := FirstList.Next;
      NextLink := CurrentLink.Next;  while(CurrentLink<> nil ) do
      begin
        NextLink := CurrentLink.Next;
        while(NextLink <> nil) do
        begin
          if CurrentLink.StockNumber > NextLink.StockNumber then
          begin
            temp := CurrentLink.StockNumber;
            CurrentLink.StockNumber := NextLink.StockNumber;
            NextLink.StockNumber := Temp;
          end;
          NextLink := NextLink.Next;
        end;
        CurrentLink := CurrentLink.Next;
      end;
    end;
    //显示排序结果
    procedure TForm1.Button3Click(Sender: TObject);
    var
      CurentLink : CommodityLink;
    begin
      CurentLink := FirstList.Next;
      while (CurentLink.Next <> nil ) do
      begin
        Self.Memo1.Lines.Add(IntToStr(CurentLink.StockNumber));
        CurentLink := CurentLink.Next;
      end;
    end;end.