1.参考4
2.参考TDatabase.GetTableNames()
3.数据量增加了
4.
device_id AutoNumber

解决方案 »

  1.   

    楼上的大哥:
    1.我说的是建库,不是建表!
    2.谢谢!
    3.如何解决?
    4.但是用 device_id autoinc 创建.db时是可以的!
      

  2.   

    2:(看是否这个表存在)
    A:
    ADO连接:
     //得到所有的表;
    Listbox1.Items.Clear;
     try
      aTableList:=tstringlist.Create ;
      adoconnection1.GetTableNames (aTableList,false);
      for iCount:=0 to aTableList.Count -1 do
        Listbox1.items.add(aTableList.strings[icount]);
     finally
      aTableList.Free;
     end;
    B:
    with Query1 do
    begin
        Close;
        Sql.Text :=' If Exists(Select * from TableName) 
                     begin
                         ...
                     end
        ExecSql;
        Close;
    end;
      

  3.   

    1:建库(借花献佛)
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Catalog: _Catalog;
      Table: _Table;
      Index : _Index;
      //FKey : _key;
      strCon:string;//定义连接字符串
      yourname:string;
      yourpwd:string;
    begin
        yourname:=trim(edit1.Text);
        yourpwd:=trim(edit2.text);
        Catalog := CoCatalog.Create;
        strCon := 'Provider=Microsoft.Jet.OleDB.4.0;'
        //通过Jet OleDb直接操作Access数据库
        +'Data Source=c:\windows\desktop\'+yourname+'.mdb;'
        //数据库位置
        +'Jet OLEDB:Engine Type=5;'
        //Jet 4.x格式,如为4,则Jet 3.x格式
        +'Locale Identifier=0x0804;'
         //支持简体中文(一定要有)
        +'Jet OLEDB:Database Password='+yourpwd;//修改密码也在此;
        //加入密码
        Catalog.Create(strCon); //建立数据库
        {建立数据表和索引}
        Catalog.Set_ActiveConnection(strCon);
        //连接到数据库    with Catalog do
        begin //建立数据表
        Table:= CoTable.Create(); //建立Table实例    with Table do
        begin
        Name := 'MyTable1';    //建表 MyTable1
        Table.ParentCatalog := Catalog ;
        Columns.Append('ID',adInteger,8);
        
        Columns.Item['ID'].Properties.Item['AutoIncrement'].Value := true;
        
        Columns.Append('Name',adVarWChar,40);
        Columns.Append('Parent_ID',adInteger,8);
        Columns.Item['Parent_ID'].Properties['Default'].Value := 0;
                                               
        Columns.Append('Sort_ID',adInteger,8);
        Columns.Append('Counter',adInteger,8);
        Columns.Item['Counter'].Properties.Item['Default'].Value := 0;    //数据类型详见MDAC SDK
        Tables.Append(Table);  //建表 MyTable1    Index := CoIndex.Create() as _Index; //建立索引
        with Index do
        begin
        Name:='Idx1';
        PrimaryKey := True ;
        Unique := True;
        Columns.Append('ID',adInteger,8);
        _Release;
        end;
        Table.Indexes.Append(Index,EmptyParam);    Table._Release;
        Table:= CoTable.Create();
        end;           //with table do
        end;           //with catalog doend;end.
      

  4.   

    MDB里'自动编号'的字段不让用户来操作的.
    在ACCESS的'工具'菜单里可以压缩MDB文件,
    用程序应该也行,看查查以前的压缩的粘子吧.
      

  5.   

    另外用ADOX可以直接建库,看看MSDN,李维关于ADO的那本书里也有提到ADOX的.
      

  6.   

    3:你里边的东东多了,所以,它就大了
    给你一段代码,将原来的数据库压缩后,删除现有的文件,并改名
    {压缩数据库}
    procedure TForm1.NCompactClick(Sender: TObject);
    var
      X:  OleVariant;
      sourcefiles,tempfiles:string;
    begin
      sourcefiles := 'DelphiTips.mdb';
      tempfiles :=  'DelphiTipsTemp.mdb';
      ADOConnection1.Connected:=false;
      try
        X := createoleobject('JRO.JetEngine');
        X.CompactDatabase('Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ' + sourcefiles,'Provider = Microsoft.Jet.OLEDB.4.0;Data Source = '+ tempfiles);
        if fileExists(sourcefiles) and FileExists(tempfiles) then
        if deleteFile(sourcefiles) then
          RenameFile(tempfiles,sourcefiles);
        messagedlg('压缩数据库成功!',mtinformation,[mbOK],0);  
      except
        x.Release;
      end;
      ADOConnection1.Connected := true;
    end;//这是对ACCESS2000的。另外要uses  comobj
      

  7.   

    device_id AutoNumber 试过,也不行!
      

  8.   

    1.如何实现sql直接创建数据库(不是建表)?
    4.创建表时:
        SQL.Clear;
        SQL.Add('CREATE TABLE device');
        SQL.Add('(');
    //    SQL.Add('device_id autoinc,');
        SQL.Add('device_office char(10),');
        SQL.Add('device_unit char(10),');
        SQL.Add('device_name char(10),');
        SQL.Add('device_model char(24),');
        SQL.Add('device_maker char(16),');
        SQL.Add('device_serial char(16),');
        SQL.Add('device_price numeric(10,2),');
        SQL.Add('device_date date,');
        SQL.Add('device_status char(8)');
        SQL.Add(')');
        ExecSQL;
    被注视的那一句(定义为自动编号型)为什么报错?1与4未解决!
      

  9.   

    你看好了,这是自动建库//其实上边已经说了,只是你不去仔细看,这次给一个更明白的
    {$R *.DFM}
    //动态创建数据库
    procedure TProperForm.BitBtn1Click(Sender: TObject);
    var
      CreateAccess:OleVariant;
      DataBaseName:ansiString;
      ConnectStr:ansistring;
    begin
      SaveDialog1.Title:='保存项目文件';
      SaveDialog1.FileName:=ProjectNamesx;
      if SaveDialog1.Execute then
      begin
        DataBaseName:=SaveDialog1.FileName;
        ConnectStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataBaseName+'.mdb;';
        CreateAccess:=CreateOleObject('ADOX.Catalog');
        CreateAccess.Create(ConnectStr);
        with ProjectDatamodule do
        begin
         try
          ProjectConnection.ConnectionString:=ConnectStr+'Persist Security Info=true';
          ProjectConnection.Connected:=true;
           ....建表的话,在这儿建;
              except
          application.MessageBox('没有正确的建立数据库','错误',mb_ok+mb_iconinformation);
          HasProjectOpened:=false;
          close;
          exit;
         end;
        end;另一个问题在看中
      

  10.   

    AutoNumber
    SQL.Clear;
        SQL.Add('CREATE TABLE device');
        SQL.Add('(');
    //    SQL.Add('device_id autoinc,'); //在ACCESS中,就不存在 AutoInc
    这种数据类型,所以,你用它作类型肯定要出错,你可以试一试AutoNumber;
        SQL.Add('device_office char(10),');
        SQL.Add('device_unit char(10),');
        SQL.Add('device_name char(10),');
        SQL.Add('device_model char(24),');
        SQL.Add('device_maker char(16),');
        SQL.Add('device_serial char(16),');
        SQL.Add('device_price numeric(10,2),');
        SQL.Add('device_date date,');
        SQL.Add('device_status char(8)');
        SQL.Add(')');
        ExecSQL;
      

  11.   

    to ihihonline(小小->充电中……)大哥:
    不好意思,刚才出去了
    1.俺刚学习,有些代码看不动!望见凉!
    2.你给俺的建库代码:
    CreateOleObject
    ProjectConnection
    等都提示未定义!
    3.AutoNumber试过了,不行!
    我仔细看过了,access有'自动编号'这个类型!
      

  12.   

    是的,它有自动编号这个类型,这个类型就是autoNumber;
    要不给你发一个例程算了,你自己慢慢看
      

  13.   

    谢谢,俺的邮箱是[email protected]!再帮帮俺呀!
      

  14.   


       楼上的朋友:
       自动编号类别字段是这样定义的: FLDNAME long identity(N,N)
       然后你要让数据库支持一些复杂的SQL ,你还需要设置数据库的一些性能参数