我想要用代码实现这样的问题。
有一个.mdb文件(新建出来的),首先检查这个数据库文件是否存在一个表,如果没有指定的表,那么就创建它,这样的代码应该如何写啊。我用那个什么ADOConnection.GetTableNames方法不行,老是触发异常,然后就直接跳出,不再执行了!各位老大,帮帮忙吧!

解决方案 »

  1.   

    function TDM.MyTableExists(ATableName: String): Boolean;  //判断给定表是否存在
    var
      SL: TStrings;
      I: Integer;
      S: String;
    begin
      Result := False;
      S := UpperCase(ATableName);
      SL := TStringList.Create;
      try
        DM.ADOConnection.GetTableNames(SL, False); //取得表名  //直接这里内部异常
        for I := 0 to (SL.Count - 1) do
        begin
          if UpperCase(SL[I])= S then
          begin
            Result := True;
            Break;
          end;{if}
        end;{for}
      finally
        SL.Free;
      end;{try}
    end;
      

  2.   

    看一看下面的区别
    DM.ADOConnection.GetTableNames(SL, False); //取得表名  //直接这里内部异常
                  ---- 缺了点什么
    DM.ADOConnection1.GetTableNames(SL, False); 
                 ------
      

  3.   

    The example below fetches a list of all tables in an ADO data store. It then traverses this list, making an entry in another table with each table抯 name and number of records.procedure TForm1.Button1Click(Sender: TObject);var
      SL: TStrings;
      index: Integer;
    begin
      SL := TStringList.Create;
      try
        ADOConnection1.GetTableNames(SL, False);
        for index := 0 to (SL.Count - 1) do begin
          Table1.Insert;
          Table1.FieldByName('Name').AsString := SL[index];
          if ADOTable1.Active then ADOTable1.Close;
          ADOTable1.TableName := SL[index];
          ADOTable1.Open;
          Table1.FieldByName('Records').AsInteger := ADOTable1.RecordCount;      Table1.Post;
        end;
      finally
        SL.Free;
        ADOTable1.Close;
      end;
    end;
      

  4.   

    outer2000(天外流星) 大哥,你的代码并没有是没有表的时候自动创建一个表出来啊,对不起啊,我初学数据库编程,我这个方面很弱,你能用中文详细的解释一下吗?分不够你说,我再开帖子给你就是了
      

  5.   

    创建表用SQL语句啊,CREATE TABLE
      

  6.   

    我知道啊!我发现好像问题不是代码的问题,好像是我因为是动态创建的ADOConnection1没有给它的ConnectString赋值的缘故,好像是这个问题。请问outer2000(天外流星) 大哥,你代码中的Table1是用来干什么的啊!是否是给表中的字段赋值的?有没有讲ADO方面的好一点的基础开始的书啊,我根本没有看过数据库的书!
      

  7.   

    呵呵,这个我也没仔细看,是HELP中的代码;
      

  8.   

    我添加代码表的SQL语句:
    try
          main.Cmd.CommandText:='create table dm'+trim(edit1.Text)+' (xcode varchar(9) not null,xname varchar(30) null,lName varchar(20) null,LPhone varchar(15) null,[key] varchar(5) null,parent varchar(5) null,primary key(xcode))';
          main.Cmd.Execute;
        except
          messagebox(handle,'添加失败','提示',mb_ok);
        end;
      

  9.   

    有没有讲ADO方面的好一点的基础开始的书啊,我根本没有看过数据库的书!
      

  10.   

    我的拙见
    1 代码似乎没有问题,不会使你的dbconnection没有激活吧:)
    2 创建表的语句看看:
    adoquery.sql.add('create table a(b int)');
    adoquery.exec3 ado偶觉得在delphi任何一本数据库编程的书都讲有,比较简单,sorry,的确不知道什么适合初学
    --------------------------------------
    看见了么,
    那支蛾子,
    正飞向太阳,
    那就是我!
    --------------------------------------
      

  11.   

    那么你能说一下有没有什么书可以系统的讲解如何编写数据库程序呢,我认为可能还是首先要掌握SQL语言,然后掌握这些控件的用法,但是很奇怪的是,如何让别的诸如TreeView、ListView这些标准控件显示数据库表中的内容呢?能否不用第三方控件?
      

  12.   

    function TDM.MyTableExists(ATableName: String): Boolean;  //判断给定表是否存在
    var
      SL: TStringList;
    begin
      Result := False;
      SL:=TStringList.Create ;
      ADOConnection1.GetTableNames(SL);
      if not (mdbtables.IndexOf(ATableName)=-1) then
      Result := True;
    end;看看行不行!!
      

  13.   

    而且我发现触发异常我发现好像问题不是代码的问题,好像是我因为是动态创建的ADOConnection1没有给它的ConnectString赋值的缘故,好像是这个问题。但是我在动态创建ADOConnection1然后给它的ConnectString赋值后还是要触发异常,我都要疯了