我要在程序中动态的创建一个access数据库表,下面是我得代码。运行还没有成功。
我想问的是:(1)已经创建了ODBC数据源,然后把TQuery的databasename属性设为该数据源的名称,是不是就可以在这里面创建数据库表了?即,这样做可行吗?
(2)已经创建的数据库没有密码,但运行时却要求输入用户名和密码来登陆,否则就无法连接。出现异常,程序中断了。不知道怎么回事?
谢谢各位指教

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      table1:TQuery;
      tablename:string;
    begin
    try
      tablename:=inputbox('班级','请在这里输入班级名称','');
      table1:=TQuery.Create(self);
      with table1 do
        begin
          databasename:='database';
          with sql do
          begin
            clear;
            add('creat table');
            add(tablename);
            add('(num int,id int,name char(10),ins char(50),cls char(50),sum int)');      end;
          ExecSQL;
         sql.Clear;
          sql.Add('creat index 学号索引 on');
          sql.Add(tablename);
          sql.Add('(id)');
          execsql;    end;
    except
      MessageDlg('创建数据库表失败',mtWarning,[mbOk], 0);
    end;
       {以上代码动态的创建一个数据库表,表的名称为该班的名称,为从excel导入数据做准备}end;
      

  2.   

    登陆可以通过database1的lgoinPrompt=false,同时双击database1填入username=xxx,password=xxx来去掉
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DBTables, DB, Grids, DBGrids;type
      TForm1 = class(TForm)
        Button1: TButton;
        Database1: TDatabase;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      Query1: TQuery;
      tablename: string;
    begin
      try
        tablename:=inputbox('班级','请在这里输入班级名称');
        Query1 := TQuery.Create(Application);
        Query1.DatabaseName := 'dm1';
        if database1.Connected=false then
        database1.Connected;
        with Query1 do
        begin
        SQL.Text := 'create table ' + tablename + ' (num int,id int,name char(10),ins char(50),cls char(50),sum int)';
        ExecSQL;
        SQL.Clear;
        sql.Add('create index 学号索引 on');
        sql.Add(tablename);
        sql.Add('(id)');
        execsql;
        DataSource1.DataSet:=Query1;
        Query1.SQL.Text:='SELECT * FROM '+tableName;
        Query1.Open;
        end;
      except
        MessageDlg('创建数据库表失败', mtWarning, [mbOk], 0);
      end;end;end.
      

  4.   

    Access  不懂,帮你顶吧。
      

  5.   

    我上面写的代码试过了,保证可用,如果你还有什么不明白的尽管问,
    而且你的代码中的create 写成creat 不应该呀!
      

  6.   

    谢谢各位,已经可以创建新表了。
    但是我想按Smallmaker说的那样去掉登陆窗口,不知道在哪儿设置,我把那个语句写在了代码中,但是运行会出错。
    还有,每次运行完后,运行的工程文件就会死掉,不响应(已经完成任务,创建了新表)。强制关掉后,就不能运行第二次了。关掉重新打开才行。请问,这样的异常怎么处理。
    我初学delphi,见笑了。
      

  7.   

    在database1的loginPrompt属性中设置
    如果还有什么问题的话,你可以将你的源程序(数据库)一块发给我,保证给你解决!
    [email protected]