请问如何在程序中动态创建Access表?DataBase控件为Db,要求在该数据库内动态创建表,且表要添加“Name”(文本类型)和“Branch”(数字类型)两个字段,还要规定两个字段的宽度,代码如何写?除了用Sql语句外,还有无别的方法?请给出详细代码,谢谢。

解决方案 »

  1.   

    那么用Sql语句怎么写呢?请给出具体代码。
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls, ComObj;type
      TSQLConfigDataSource = function( hwndParent: HWND;
                                       fRequest: WORD;
                                       lpszDriver: LPCSTR;
                                       lpszAttributes: LPCSTR ) : BOOL; stdcall;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var
        CreateAccess:OleVariant;
      pFn: TSQLConfigDataSource;
      hLib: LongWord;
      strDriver, strAttr: string;
      fResult: BOOL;
    begin
      try
        CreateAccess:=CreateOleObject('ADOX.Catalog');
        CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\new.mdb');
        hLib := LoadLibrary( 'ODBCCP32' );    // load from default path
        if( hLib <> NULL ) then begin
          @pFn := GetProcAddress( hLib, 'SQLConfigDataSource' );
          if( @pFn <> nil ) then begin
            // force (re-)create DSN
            strDriver := 'Microsoft Access Driver (*.mdb)';
            strAttr := Format( 'DSN=newdb'+#0+
                               'DBQ=%s'+#0,
                               ['c:\new.mdb'] );
            fResult := pFn( 0, 4, @strDriver[1], @strAttr[1] );
          end;
        end;
      except
        raise Exception.Create('create db failed');
      end;
      try
        dbAccess.LoginPrompt := False;
        dbAccess.DatabaseName := 'newdb';
        dbAccess.Connected := True;
        qryMain.DatabaseName := dbAccess.DatabaseName;
        with qryMain,SQL do begin
          Close;
          Clear;
          Add(' create table TMP_REQ_FORM_DATA (Name varchar(1)  primary key,');
          Add('Branch number(4) not null)');
          ExecSQL;
        end;
      except
        on e: Exception do begin
          raise Exception.Create(e.Message);
        end;
      end;
    end;end.