怎样用程序实现增加、修改、删除字段名(字段名由用户输入,是变量)

解决方案 »

  1.   

    我程序里的一个单元,你自己看看吧:unit viewtype;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, RzLstBox, RzChkLst, RzButton, ExtCtrls, RzPanel;type
      TviewtypeF = class(TForm)
        RzGroupBox1: TRzGroupBox;
        Addlxlx: TRzBitBtn;
        Dellxlx: TRzBitBtn;
        Editlxlx: TRzBitBtn;
        exitlf: TRzBitBtn;
        RzCheckList1: TRzCheckList;
        procedure AddlxlxClick(Sender: TObject);
        procedure DellxlxClick(Sender: TObject);
        procedure EditlxlxClick(Sender: TObject);
        procedure exitlfClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure RzCheckList1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      viewtypeF: TviewtypeF;implementationuses Unit3;{$R *.DFM}procedure TviewtypeF.AddlxlxClick(Sender: TObject);
    var
      Inputyn:boolean;
      fieldname,lxlxSQL:string;
    begin
      try
        Inputyn:= InputQuery('ÇëÊäÈë', 'ÇëÊäÈëÒ»¸öеÄÁªÏµÀàÐÍ£º        ', fieldname);
        if Inputyn then
        begin
          rzchecklist1.Items.Add(trim(fieldname));
    {      DataModule3.lxlxQ.close;
          DataModule3.lxlxQ.sql.clear;
          DataModule3.lxlxQ.sql.add('ALTER TABLE ÁªÏµÀàÐÍ ADD '+trim(fieldname)+' BIT');
          DataModule3.lxlxQ.ExecSQL;}
          lxlxSQL:='ALTER TABLE ÁªÏµÀàÐÍ ADD '+trim(fieldname)+' BIT';
          DataModule3.ADOConnection1.Execute(lxlxSQL);
          DataModule3.ADOConnection1.Close;
          DataModule3.ADOConnection1.Open;
          DataModule3.cpreg.Open;
          DataModule3.cpreg.Active:=true;
          DataModule3.lxlxT.Open;
          DataModule3.lxlxT.Active:=true;
          rzchecklist1.Selected[0];
        end;
      except
        showmessage('Êý¾ÝÌí¼Ó³ö´í!');
      end;
    end;procedure TviewtypeF.DellxlxClick(Sender: TObject);
    var
      lxlxSQL:string;
    begin
      try
    {    DataModule3.lxlxQ.close;
        DataModule3.lxlxQ.sql.clear;
        DataModule3.lxlxQ.sql.add('ALTER TABLE ÁªÏµÀàÐÍ DROP '+trim(rzchecklist1.SelectedItem));
        DataModule3.lxlxQ.ExecSQL;}
        lxlxSQL:='ALTER TABLE ÁªÏµÀàÐÍ DROP '+trim(rzchecklist1.SelectedItem);
        DataModule3.ADOConnection1.Execute(lxlxSQL);
        rzchecklist1.DeleteSelectedItems;
        DataModule3.ADOConnection1.Close;
        DataModule3.ADOConnection1.Open;
          DataModule3.cpreg.Open;
          DataModule3.cpreg.Active:=true;
          DataModule3.lxlxT.Open;
          DataModule3.lxlxT.Active:=true;
          rzchecklist1.SetFocus;
      Addlxlx.Enabled:=true;
      Dellxlx.Enabled:=false;
      Editlxlx.Enabled:=false;  except
        showmessage('Êý¾Ýɾ³ý³ö´í!');
      end;
    end;procedure TviewtypeF.EditlxlxClick(Sender: TObject);
    var
      i:integer;
      FNameLST:Tstringlist;
      Inputyn:boolean;
      fieldname,selcheck:string;
    begin
      try
        selcheck:=rzchecklist1.SelectedItem;
        Inputyn:= InputQuery(rzchecklist1.SelectedItem+'¸ÄÃûΪ£º', 'ÇëÊäÈëеÄÁªÏµÀàÐÍÃû³Æ£º        ', fieldname);
        if Inputyn then
        begin
          try
            if DataModule3.ADOConnection1.InTransaction=false then
            begin
              DataModule3.ADOConnection1.BeginTrans;          DataModule3.lxlxQ.close;
              DataModule3.lxlxQ.sql.clear;
              DataModule3.lxlxQ.sql.add('alter table ÁªÏµÀàÐÍ add '+trim(fieldname)+' bit');
              DataModule3.lxlxQ.ExecSQL;
              DataModule3.lxlxQ.close;
              DataModule3.lxlxQ.sql.clear;
              DataModule3.lxlxQ.sql.add('update ÁªÏµÀàÐÍ set '+trim(fieldname)+'='+rzchecklist1.SelectedItem);
              DataModule3.lxlxQ.ExecSQL;
              DataModule3.lxlxQ.close;
              DataModule3.lxlxQ.sql.clear;
              DataModule3.lxlxQ.sql.add('alter table ÁªÏµÀàÐÍ drop '+rzchecklist1.SelectedItem);
              DataModule3.lxlxQ.ExecSQL;
     {         DataModule3.lxlxQ.Close;
              DataModule3.lxlxQ.Open;
              lxlxSQL1:='alter table ÁªÏµÀàÐÍ add '+trim(fieldname)+' bit';
              lxlxSQL2:='update ÁªÏµÀàÐÍ set '+trim(fieldname)+'='+selcheck;
              lxlxSQL3:='alter table ÁªÏµÀàÐÍ drop '+selcheck;
              DataModule3.ADOConnection1.Execute(lxlxSQL1);
    //          DataModule3.ADOConnection1.Close;
    //          DataModule3.ADOConnection1.Open;          DataModule3.ADOConnection1.Execute(lxlxSQL2);
    //          DataModule3.ADOConnection1.Close;
    //          DataModule3.ADOConnection1.Open;          DataModule3.ADOConnection1.Execute(lxlxSQL3);
      //        rzchecklist1.Items.SetText(Pchar(fieldname));
    //                      rzchecklist1..settext:=fieldname;
      }          DataModule3.ADOConnection1.CommitTrans;
              DataModule3.ADOConnection1.Close;
              DataModule3.ADOConnection1.Open;
          DataModule3.cpreg.Open;
          DataModule3.cpreg.Active:=true;
          DataModule3.lxlxT.Open;
          DataModule3.lxlxT.Active:=true;
          rzchecklist1.SetFocus;
            Addlxlx.Enabled:=true;
          Dellxlx.Enabled:=false;
          Editlxlx.Enabled:=false;        end;
          except
            DataModule3.ADOConnection1.RollbackTrans;
          end;    end;
        rzchecklist1.Items.Clear;
        FNameLST:= TStringList.Create;
        DataModule3.lxlxT.GetFieldNames(FNameLST);
        for i:=2 to FNameLST.Count-1 do
        begin
         rzchecklist1.Items.Add(FNameLST.Strings[i]);
        end;
        FNameLST.Free;
      except
        showmessage('¸ÄÃû·¢Éú´íÎó!');
      end;end;procedure TviewtypeF.exitlfClick(Sender: TObject);
    begin
      close;
    end;procedure TviewtypeF.FormShow(Sender: TObject);
    var
      i:integer;
      FNameLST:TStringList;
    begin
      rzchecklist1.Items.Clear;
      FNameLST:= TStringList.Create;
      DataModule3.lxlxT.GetFieldNames(FNameLST);
      for i:=2 to FNameLST.Count-1 do
      begin
       rzchecklist1.Items.Add(FNameLST.Strings[i]);
      end;
      FNameLST.Free;
      Addlxlx.Enabled:=true;
      Dellxlx.Enabled:=false;
      Editlxlx.Enabled:=false;
    end;procedure TviewtypeF.RzCheckList1Click(Sender: TObject);
    begin
      Addlxlx.Enabled:=true;
      Dellxlx.Enabled:=true;
      Editlxlx.Enabled:=true;end;end.
      

  2.   

    cg1120(代码最优化-§雪是冷的,人是暖的§) 
    我水平太低,你略微解释一下可以吗?
    zfq308(富强) 
    在详细说一下你的方法,好吗
      

  3.   


    简单的讲,就是在delphi里用带参数的SQL语句修改表结构
      

  4.   

    唉,就用SQL语句不就可以吗!
      

  5.   

    icd(骆驼)  rzxml(一鸣)  有这样的语句吗? 我的字段名是动态的,由用户输入,如果有,请写一下好吗?谢
      

  6.   

    TRzGroupBox;  TRzBitBtn; TRzBitBtn; TRzBitBtn; TRzBitBtn;TRzCheckList 这是些什莫组件?
      

  7.   

    cg1120(代码最优化-§雪是冷的,人是暖的§)——大虾,为什么不把你的代码多用点with ... do格式化一下呢?改一下的话,会非常好看一些地。
      

  8.   

    用sql语句的话应该能够实现!
      

  9.   

    sql中
    alter 表 add column 列名 类型 长度
      

  10.   

    程序里有三个按钮过程,分别是增加、修改、删除字段名:
    procedure TviewtypeF.AddlxlxClick(Sender: TObject);
    procedure TviewtypeF.DellxlxClick(Sender: TObject);
    procedure TviewtypeF.EditxlxClick(Sender: TObject);
    CheckList作为编辑界面,以显示数据库字段名
      

  11.   

    cg1120(代码最优化-§雪是冷的,人是暖的§) 
    RzGroupBox; RzBitBtn; RzBitBtn; RzBitBtn; RzBitBtn;RzCheckList 这是些什莫组件?就是GroupBox; BitBtn......组件吗?
      

  12.   

    RzGroupBox; RzBitBtn; RzBitBtn; RzBitBtn; RzBitBtn;RzCheckList
    控件变成普通控件应该也可以,但有些数据库不支持修改字段名字,比如oracle8i
      

  13.   

    对表A增加字段B,非关键字,char(10),不能为空,默认值‘’
    Alter Table A add B char(10) not null default ('')
    对表A增加字段C,非关键字,Float,不能为空,默认值0.00
    Alter Table A add C Float not null default (0.00)删除字段和修改字段最好不要给用户使用因为很容易丢失数据。
      

  14.   

    添加:ADOQuery1.close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.add('insert into 表名(字段名) values(你要加   的       值) ');
      
          ADOQuery1.ExecSQL;
    删除:就需要把ADOQuery1.SQL.add('后面的sql语句改成delete ....(自己知道把)
    修改:就需要把ADOQuery1.SQL.add('后面的sql语句改成update ...
    着不是就好了吗??
      

  15.   

    修改字段名这种功能,数据库不是直接支持的,我是用的事务方式对字段操作的,先新建个字段,这个字段是就是你修改的名字,把旧字的记录值用SQL写进来,再把旧字段删除,呵呵
    不知道还有没有更好的方法?!
    :)
      

  16.   

    将表字段和类型做成一个字典表,然后由用户维护字典表,使用SQL命令来生成表然后添加数据,应该可以的。       机器有毛病,后面这几个字删除不了,就这样吧。y数 据数据表