Xml 如何使用Delphi修改或永久删除DBGrid中的字段?

Xml 如何使用Delphi修改或永久删除DBGrid中的字段?,xml,delphi,delphi-7,tclientdataset,dbgrid,Xml,Delphi,Delphi 7,Tclientdataset,Dbgrid,如何永久删除/修改数据库网格中的字段? 我使用以下代码: 注意:CDS=ClientDataSet DBG=DBGrid 我使用的数据库是*.xml uses Windows, SysUtils, Forms, ExtCtrls, Buttons, DB, DBClient, DBGrids, Grids, Controls, StdCtrls, Dialogs, Classes; type TForm1 = class(TForm) B2: TSpeedButto

如何永久删除/修改数据库网格中的字段? 我使用以下代码: 注意:CDS=ClientDataSet DBG=DBGrid 我使用的数据库是*.xml

uses
  Windows, SysUtils, Forms, ExtCtrls, Buttons, DB, DBClient, DBGrids,
  Grids, Controls, StdCtrls, Dialogs, Classes;

type
  TForm1 = class(TForm)
        B2: TSpeedButton;
        B3: TSpeedButton;
        DS: TDataSource;
        CDS: TClientDataSet;
        DBG: TDBGrid;
        SD: TSaveDialog;
        RG: TRadioGroup;
        E1: TEdit;
        E2: TEdit;
        L1: TLabel;
        L2: TLabel;
        B1: TSpeedButton;
        B4: TSpeedButton;
        B5: TSpeedButton;
        OD: TOpenDialog;
    var
        FN, FDragOfs: Integer;
        FDragging: Boolean;

    procedure TForm1.FormShow(Sender: TObject);
    begin
       FN := 1;
       RG.ItemIndex := 0;
    end;

    on Button Create --->

    try
       FN := FN + 1;
       CDS.Active := false;
    with CDS.FieldDefs.AddFieldDef do
    begin
       Name := E1.Text;
    case RG.ItemIndex of
       0 :
    begin
       DataType := ftString;
       Size := StrToInt(E2.Text);
    end;
       1 :
       DataType := ftInteger;
    end;

    end;
       CDS.CreateDataSet;
       E1.Text := 'Field'+IntToStr(FN);
       RG.ItemIndex :=0;
    finally
       CDS.Active := True;
    end;

    on Button Export To File ---->

    if not SD.Execute then
       exit
    else
    begin
       CDS.SaveToFile(SD.filename,dfxml);
       CDS.Active := false;
       CDS.FileName := SD.FileName;

    on Button Delete --->

        CDS.Fields.Remove (DBG.Columns.Items [DBG.SelectedIndex] .Field);
        //DBG.Columns.Delete(DBG.SelectedIndex);
        DBG.Columns.RebuildColumns;

    DB Structur e.g like this : 

        <?xml version="1.0" standalone="yes"?> 
         <DATAPACKET Version="2.0">
        <METADATA>
        <FIELDS>
        <FIELD attrname="Number" fieldtype="i4"/>
        <FIELD attrname="Date" fieldtype="string" WIDTH="20"/>
        <FIELD attrname="Name" fieldtype="string" WIDTH="20"/>
        <FIELD attrname="Phone" fieldtype="string" WIDTH="20"/>
        <FIELD attrname="Address" fieldtype="string" WIDTH="20"/>
        <FIELD attrname="Manager" fieldtype="string" WIDTH="20"/>
        </FIELDS>
        <PARAMS/>
        </METADATA>
        <ROWDATA>
        </ROWDATA>
        </DATAPACKET>
使用
Windows、SysUtils、窗体、ExtCtrls、按钮、DB、DBClient、DBGrids、,
网格、控件、stdctrl、对话框、类;
类型
TForm1=类(TForm)
B2:t速度按钮;
B3:TSpeedButton;
DS:TDataSource;
CDS:TClientDataSet;
DBG:TDBGrid;
SD:TSaveDialog;
RG:TRadioGroup;
E1:TEdit;
E2:TEdit;
L1:TLabel;
L2:TLabel;
B1:t速度按钮;
B4:TSpeedButton;
B5:TSpeedButton;
OD:TOpenDialog;
变量
FN,FDragOfs:整数;
FDragging:布尔值;
程序TForm1.FormShow(发送方:TObject);
开始
FN:=1;
RG.ItemIndex:=0;
终止
打开按钮创建--->
尝试
FN:=FN+1;
CDS.Active:=假;
使用CDS.FieldDefs.AddFieldDef do
开始
名称:=E1.文本;
案例RG.ItemIndex of
0 :
开始
数据类型:=ftString;
大小:=stroint(E2.Text);
终止
1 :
数据类型:=ftInteger;
终止
终止
CDS.CreateDataSet;
E1.文本:=‘字段’+IntToStr(FN);
RG.ItemIndex:=0;
最后
CDS.Active:=真;
终止
按钮上的“导出到文件”-->
如果不是SD,那么执行
出口
其他的
开始
SaveToFile(SD.filename,dfxml);
CDS.Active:=假;
CDS.FileName:=SD.FileName;
打开按钮删除--->
CDS.Fields.Remove(DBG.Columns.Items[DBG.SelectedIndex].Field);
//DBG.Columns.Delete(DBG.SelectedIndex);
DBG.Columns.RebuildColumns;
数据库结构,例如:
因此,问题是如何用运行时不需要的另一个名称字段删除/替换(重命名或修改),我想删除这一行。 例如:

<FIELD attrname = "Date" fieldtype = "string" WIDTH = "20" />

“删除后”字段不会出现,但当我获取应用程序并重新运行数据库时,会像以前一样再次加载sa'at


对不起,我的英语不好。

您需要保存CD,而不保存您删除的字段。因为您还没有演示如何加载它,所以很难说如何加载。如果您使用的是XML或二进制CD(单机版),则可以使用
SaveToFile
。如果数据通过
DataSetProvider
来自外部源(例如,某个地方的实际DB),则需要修改SQL语句(并删除IDE中的持久字段),或在启动时使用代码将其删除(请参见
CDS.FieldDefs
属性)。在“保存到文件”按钮上,如下所示,如果不是SD.Execute,则退出else begin CDS.SaveToFile(SD.filename,dfxml);CDS.Active:=假;CDS.FileName:=SD.FileName;终止我不知道
SD
是什么,所以我不知道
SD.Execute
做什么。(
SD
=
TSaveDialog
,也许吧?)从我坐的地方看不到你的代码。请不要在评论中添加详细信息;你的问题,并将它们添加到那里,在那里可以正确格式化,人们可以看到它们。同样,是否有持久字段(在设计时使用字段编辑器添加)?如果是这样,您需要使用
CDS.FieldDefs
将其删除,正如我在上一篇评论中所说的。再次强调,请不要在评论中添加内容。请改为提问,并在此处添加信息。我们也不会去其他地方看DB结构;编辑时,可以将其作为文本表包含在问题中。所需的信息必须在这里,在问题本身,所以未来的读者可以访问它。谢谢