解决后再送分!!!

解决方案 »

  1.   

    SQL的alter table不行吗?不行就不知道怎么办了。
      

  2.   

    给你一个例子!先要联结ACCESS数据源在用ALTER TABLE来修改.
    procedure dbgridtoacess;
    var
     dbname,tablename:string;
     opendlg: Topendialog;
     sql1,sql2,sql3,sql4:string;
     i:integer;
    begin
     opendlg:=Topendialog.Create(nil);
     opendlg.InitialDir:=extractfilepath(application.ExeName);
     opendlg.Title:='请选择输出的Acess数据库名:';
     opendlg.Execute;
     if (opendlg.FileName<>'') and (ExtractFileExt(opendlg.FileName)='.mdb') then dbname:=trim(opendlg.FileName)
     else exit;
     opendlg.Free;
     fm_bf.adocn.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+dbname+';Persist Security Info=False';
     fm_bf.adocn.LoginPrompt:=false;
     fm_bf.adocn.Connected:=true;
     for i:=0 to fm_main.DBGrid.FieldCount-1 do
     begin
       case fm_main.DBGrid.Fields[i].DataType of
        ftstring:tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' varchar('+inttostr(fm_main.DBGrid.Fields[i].DataSize)+'),';
        ftInteger:tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' int('+inttostr(fm_main.DBGrid.Fields[i].DataSize)+'),';
        ftfloat:tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' float('+inttostr(fm_main.DBGrid.Fields[i].DataSize)+'),';
        ftMemo:tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' text'+',';
        ftDateTime:tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' datetime'+',';
        ftCurrency:tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' money('+',';
        ftblob:tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' image'+',';
       else
         tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' varchar('+inttostr(fm_main.DBGrid.Fields[i].DataSize)+'),';
       end;
       // tablename:=tablename+fm_main.DBGrid.DataSource.DataSet.Fields[i].FieldName+' varchar(50)'+',';
     end;
     sql1:='create table '+fm_main.TreeView1.Selected.Text+'('+copy(tablename,1,length(tablename)-1)+')';
     sql2:='drop table '+fm_main.TreeView1.Selected.Text;
     sql3:='select * from '+fm_main.TreeView1.Selected.Text;
    { if fm_bf.exesql(sql3,0) then
     begin
      fm_bf.exesql(sql2,1);
      fm_bf.exesql(sql1,1);
     end
     else }
      fm_bf.exesql(sql1,1);
    { sql1:='select * from  '+fm_main.TreeView1.Selected.Text;
     fm_bf.ado_zj.Close;
     fm_bf.ado_zj.SQL.Clear;
     fm_bf.ado_zj.SQL.Text:=sql1;
     fm_bf.ado_zj.Open;
     fm_main.executesql(sql1,1);
     fm_bf.ado_bf.Close;
     fm_bf.ado_bf.SQL.Clear;
     sql1:='select * into '+fm_main.TreeView1.Selected.Text+' from ';
     sql1:=sql1+' OPENROWSET(''SQLOLEDB'''+',';
     sql1:=sql1+'''coolfilm'';';
     sql1:=sql1+'''sa'';''781213'',';
     sql1:=sql1+'''SELECT * FROM cz.dbo.ybbm'')';
     sql2:='select * into '+fm_main.TreeView1.Selected.Text+' from  vvv';
     fm_bf.ado_bf.SQL.Text:=sql1;
     sql1:='insert into '+fm_main.TreeView1.Selected.Text+' select * from ';
     sql1:=sql1+' OPENROWSET(''SQLOLEDB'''+',';
     sql1:=sql1+'''coolfilm'';';
     sql1:=sql1+'''sa'';''781213'',';
     sql1:=sql1+'''SELECT * FROM cz.dbo.ybbm'')';
     fm_bf.ado_bf.SQL.Text:=sql1;
     fm_bf.ado_bf.ExecSQL; }
     //fm_bf.adocn.Connected:=false;
     sql4:='insert into OPENROWSET(''Microsoft.Jet.OLEDB.4.0'''+','''+dbname+''';''admin'''+';'''''+','+fm_main.TreeView1.Selected.Text+') '
          +'select * from '+fm_main.TreeView1.Selected.Text;
     fm_main.executesql(sql4,1);
    end;
      

  3.   

    你这一段里也没有ALTER语句呀?
    而且我用alter DB set a = b,老显示不正确的SQL语句,why?
      

  4.   

    alter table tablename  set a=b 
    你在试一试
      

  5.   

    不行啊,老显示alter语法错误,555555555555
    我只是想用adoquery控件修改ACCESS里的字段名呀,字段名是用户建的,也得能删除,能修改呀,现在修改不会,建了字段就改不了名,这样不行啊。
      

  6.   

    ADOCommand1.CommandText :='ALTER TABLE 表名 DROP 字段名';      ADOCommand1.Execute;
    ADOCommand1.CommandText :='ALTER TABLE 表名 ADD 字段名';
    ADOCommand1.Execute;