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

解决方案 »

  1.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[table1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    select * from table1
      

  2.   

    to : Erice(白雪公猪) 能解释一下代码的意思吗。小妹不才,看不明白
      

  3.   

    用于 SQL SERVER 
    判断是否存在名字为table1
     的数据表,如果存在,就访问!!!
      

  4.   

    type  TYourRec = record
        ID: integer;
        Name: string;
        Sex: String; //怎么这个要用string的呀?有这么多性别么?
        Age: integer;
        PPrev: PYourRec;
      end;
      PYourRec = ^TYourRec;
    var
      qry: TQuery;
      pUrRec, pUrRec1: PYourRec;
    begin
      qry := TQuery.Create(nil);
      ...//一些初始化操作,例如数据库属性等。
      qry.SQL.Add('select * from your tbl');
      try
        qry.Open;
        pUrRec := nil;
        pUrRec1 := nil;
        while not qry.eof do
        begin
          New(pUrRec1);
          pUrRec1^.ID := qry.FieldByName('ID').asInteger;
          pUrRec1^.Name := qry.FieldByName('Name').AsString;
          ...//照葫芦化瓢      pUrRec1^.pPrev := pUrRec;
          pUrRec ;= pUrRec1;      qry.next;
        end;    //pUrRec现在就是你要的链表的尾巴了。
      finally
        qry.close;
        qry.free;
      end;
    end;
      

  5.   

    可是在delphi里,不认啊,他们的语法不一样啊。急
      

  6.   

    TTable控件里面有一个Exists函数,可以用来判别表是否存在。Delphi的帮助里面有它的一段例子代码。
      

  7.   

    同意楼上。
    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;
      

  8.   

    我用的是ADO控件,查询也是ADOQuery啊。这个TTable控件没有啊,这种情况下怎么判断表是否存在呢?
    楼上这位大哥多支持了,小妹刚刚上手。
      

  9.   

    你为什么要用 TTable 呢?
      

  10.   

    我没用ttable,我用的是adoquery,所以我不知道在ado下怎么实现从
    数据库里查存不存在表table1。
      

  11.   

    zeroxing(胸无半点墨,腰有万贯财;此般理想高,怎奈做不到!--) 的思路很正确,自已调一下应该可以实现的。
      

  12.   

    //查找表或视图是否存在
    function FindTable(var ATableName: string): boolean;
    var
      myQuery: TAdoQuery;
    begin
      try
        myQuery := TAdoQuery.Create(nil);
        try
          with myQuery do
          begin
            Close;
            SQL.clear;
            SQL.text :=
              'Select * from InFormation_Schema.tables where Table_Name='''
              + ATableName + '''';
            Open;
            if IsEmpty then
              result := False
            else
              result := true;
          end;
        finally
          myQuery.Free;
        end;
      except
        showmessage('错误的数据库操作');
      end;
    end;
      

  13.   

    SQL.Text := 'if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[table1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    select * from table1 ';
    if adoquery.RecordCount > 0  then
     open
    else 
     exit ;
      

  14.   

    基本同意 loveWife(我爱红) 
    但SQL.clear;
            SQL.text :=
              'Select * from InFormation_Schema.tables where Table_Name='''
              + ATableName + '''';改为
          adoquery1.SQL.text :='Select * from sysobjects where name=''+YOURTABLENAME+''';
      

  15.   

    我刚才按各位的方法试了,可是在
    type
      Pname =^Tname
      Tname = Record
        ID: integer;
        Name: string;
        Sex: string;
        Age: integer;
      end;
    创建记录的时候,出现错误‘Expected ':'but '='found ’错误语句在’Tname = Record‘的’=‘上,为什没??????????这是对的呀?求救
      

  16.   

    我写错了 
    应该是
      Pname =^Tname;//少了分号
      

  17.   

    把Tname = Record 的 “=”删了重写一个
      

  18.   

    exists 函数不是很好用的吗?  何必那么麻烦啊!
      

  19.   

    qry: TADOQuery;
    qry := TADOQuery.Create(nil); 。。           //一些初始化操作,例如数据库属性等。  qry.SQL.Add('select * from your cfg');哪位大哥能帮我写一下初始化的代码啊?
      

  20.   

    有一个简单的查表的方法,通用的procedure TMainForm.Button1Click(Sender: TObject);
    var
      SL: TStrings;
    begin
      SL := TStringList.Create;
      try
        adoCon.Open;
        adoCon.GetTableNames(SL, False);
        if SL.IndexOf('table1')<>-1 then begin
          //有这个表。用adoQuery执行一个查询,循环结果记录集就行
        end;
      finally
        SL.Free;
        adoCon.Close;
      end;
    end;
      

  21.   

    1.用adox对数据库进行结构化查询,查询表是否存在
    2.链表应该也不难,以前学pascal是好像用的比较多,现在很少用了,一般都用类对象实现
      

  22.   

    没有过结构,
    至于链表,多数用TStrings我认为,与其它语言相比,TStrings是delphi亮点之一。up!
      

  23.   

    MM的问题回答的人就是多,
       !!!
              up
      

  24.   

    大致浏览了一下,楼主好象没说数据库类型啊!
    通过Delphi异常也可以实现判断!
      

  25.   

    如果你是用SQL SERVER 数据库,我就会做第一问。
    第二问你为什么不用现成的类实现呢?
      

  26.   

    呵呵,MM?现在用MM问问题挺多的。。哈。
      

  27.   

    我的问题挂了好几天了,还没解决,是不是标题上没加“MM”呀?^_^ 开个玩笑,
    不过借光做个链接,希望能把问题解决,大家都去看看,UP一下,人气也旺一点呀。两个问题是一样的,只不过一个用delphi写的,一个用VC写的,不过都出现了同样的问题,就是
    内存越来越大。
    http://community.csdn.net/Expert/topic/3649/3649016.xml?temp=.1845972   // delphi
    http://community.csdn.net/Expert/topic/3656/3656672.xml?temp=.363949    // vc
      

  28.   

    MM:
       TADOQUERY 的open 和 EXECSQL 两个属性 是有不同的,OPNE 是有反回值的,而EXCESQL必须是没有反回值的SQL语句.懂了吗?天使MM