假如在数据库db1中有一个表table1(ID[integer],Name[string],sex[string],age[]integer])
我想在delphi里实现当程序运行得时候,首先检查此表存不存在,如果存在得话,把里面的一一数据读出来,
构造一个个记录 Tname = Record,然后动态构建一个链表,把这些记录存入链表里。
  求实现得代码。俺在线等待。

解决方案 »

  1.   

    type
      Pname =^Tname
      Tname = Record
        ID: integer;
        Name: string;
        Sex: string;
        Age: integer;
      end;procedure GetData;
    var
      myname: Pname;
    begin
      with adoquery do
        begin
          Close;
          SQL.Text := 'select * from table1';
          Open;
          if not IsEmpty then
          begin
            //开始填充链表
            First;
            while not eof do
            begin
              new(myname);
              myname^.ID:= FieldByName(ID).AsInteger;
              myname^.Name:= FieldByName(Name).AsString;
              myname^.Sex:= FieldByName(Sex).AsString;
              myname^.Age:= FieldByName(Age).AsInteger;  
              next;
            end;
         end;
      end;
    end;
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;
    type  TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        procedure FormShow(Sender: TObject);
        procedure FormCreate(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
     type
      plink=^Tname;
      Tname=record
      ID: integer;
      Name: string;
      Sex: string;
      Age: integer;
      next:plink;
      end;
     var link:plink;
    {$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
    var
      tempp,p:plink;
    begin
         with adoquery1 do
         begin
          Close;
          SQL.Text := 'select * from table1';
          Open;      if not IsEmpty then
          begin
            //开始填充链表
            First;        while not eof do
            begin
                  new(tempp);
                  tempp^.ID:= FieldByName('ID').AsInteger;
                  tempp^.Name:= FieldByName('Name').AsString;
                  tempp^.Sex:= FieldByName('Sex').AsString;
                  tempp^.Age:= FieldByName('Age').AsInteger;
                  tempp^.next:=nil;
                  if link=nil then   //如果链表为空表
                  begin
                       new(link);  //创建链表
                       link:=tempp;
                  end
                  else //如果链表不为空
                  begin
                       p:=link;
                       while p^.next<>nil do   //找表尾
                         p:=p^.next;
                       p^.next:=tempp;   //将新节点添加到表尾
                  end;
                  next;
            end;
         end;
         listbox1.Clear;  //清列表框
         p:=link;
         repeat  //遍历列表,将所有节点数据域中的数据赋给listbox1的items属性
         listbox1.Items.Add(inttostr(p^.ID)+p^.Name+p^.sex+inttostr(p^.age));
         p:=p^.next;
         until p=nil;end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
         link:=nil;
    end;end.