1、data\*.dbf要导入mybase.mdb中,且表的格式和数据不能有变化。
2、特别是Access表中的字段属性“允许空字符”该如何设置。
3、要用代码实现。

解决方案 »

  1.   

    首先在mybase.mdb中创建相应的表和字段,然后将数据从data\*.dbf导入mybase.mdb中。
    “允许空字符”就是在创建字段是使用 null 即可,如
    create table REG_Log (
    ID                   int                  identity,
    CID                  varchar(8)           not null,
    LogTime              datetime             null,
    LogType              char(8)              null,
    LogInfo              varchar(200)         null,
    constraint PK_REG_LOG primary key  (ID)
    )
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    adoquery1.Close;
    adoquery1.SQL.clear;
    adoquery1.SQL.Add('select * into newtable from hjck in ('c:\temp''dbase5.0;'));
    adoquery1.Open;
    end;end.newtable为access中的表,hjck为dbase表。
    adoquery1连接newtable所在的数据库。
      

  3.   

    或者这样做:在导之前要先建好字段和结构相匹配的Access表:  G_String:='Insert into '+Grd_Down.Cells[2,xh]+' values(';
      for xh1:=0 to B_Dataset.FieldCount-1 do  //B_Dataset:源表数据集控件
      begin
        G_String:=G_String+F_GetField(B_Dataset,xh1,1)
        if xh1<B_Dataset.FieldCount-1 then G_String:=G_string+',';
      end;
      Command.Commandtext:=G_String;  //Command:连接目的表的AdoCommand控件下面的函数并不完整,可自己查看datatype(fieldtype)的相关帮助。Function F_GetField(B_DataSet:TDataSet;B_Zdh:integer;B_Mz:integer=0):String;
    //根据给出的字段号返回该字段的Sql字串,数据表为Set_Ora,字段号从0开始计.B_Mz为0时返回字段名,1时返回字段值
    begin
      With B_DataSet do
      if B_Mz=0 then Result:=fields[B_Zdh].FieldName
      else
      begin
        if (Fields[B_Zdh].DataType =ftWideString) or (Fields[B_zdh].DataType =ftString) then
        begin
          Result:=iif(fields[B_Zdh].asstring='','null',''''+Fields[B_Zdh].asstring+'''');
          exit;
        end;
        if Fields[B_Zdh].DataType = ftFloat then
        begin
          Result:=iif(fields[B_Zdh].asstring='','null',floatToStrF(Fields[B_Zdh].AsFloat,ffFixed,11,2));
          exit;
        end;
        if (Fields[B_Zdh].DataType = FtSmallInt) or (Fields[B_Zdh].DataType =ftInteger)
          or (Fields[B_Zdh].DataType=FtBCD) then
        begin
          Result:=iif(fields[B_Zdh].asstring='','null',fields[B_Zdh].AsString);
          exit;
        end;
        if Fields[B_Zdh].DataType=ftDate then
        begin
          Result:=iif(Fields[B_Zdh].asstring='','null','#'+formatDateTime('yyyy-mm-dd',fields[B_Zdh].asDateTime)+'#');
          exit;
        end;
        Result:='';   //尚需增加布尔等类型的判断.
      end;
    end;
      

  4.   

    select * into newtable from hjck in ('c:\temp''dbase5.0;)
    这样的语句我没试过不知行不行,不过也可以做两个连接然后再把。DBF的数据赋给ACCESS,如果要加一些条件可加上一些IF语句,如:
      Dataset1.field[1].value:=Dataset2.field[1].value
      

  5.   

    用batchmove控件去做不就行了!
    指定数据源和接受的数据集就行了;
      

  6.   

    to  cg1120(代码最优化-§帮助那些值得帮助的人§) 
    第一种方法完全不能用.
    第二种方法我没试.
    也许我没说清楚,我需要根据源表动态创建新表.to zgheng(光头) 
    batchmove控件的接收数据集不能连接ado控件啊.