如何动态添加和删除字段(100分)

  • 主题发起人 主题发起人 alongtiger
  • 开始时间 开始时间
A

alongtiger

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在运行期间对paradox表的动态字段进行添加和删除?请指教!!
 
以下是Delphi 3中 TTable中Create Table的例子, 我作了一些说明:

with Table1 do

begin
Active := False; { The Table component must not be active }

{ First, describe the type of table and give it a name }
DatabaseName := 'DBDEMOS';
TableType := ttParadox;
TableName := 'CustInfo';
//若不想指定某数据库, 而在本地硬盘上建立临时数据时,用以下方式替代以上三行
// DatabaseName := '';
// TableType := ttParadox;
// TableName := 'C:/Temp/CustInfo.db';

{ Next, describe the fields in the table }
with FieldDefs do
begin
Clear;
Add('Field1', ftInteger, 0, True);
Add('Field2', ftString, 30, False);
end;

{ Next, describe any indexes }
with IndexDefs do

begin
Clear;
{ The first index has no name because it is a Paradox primary key }
Add('', 'Field1', [ixPrimary, ixUnique]);
Add('Fld2Indx', 'Field2', [ixCaseInsensitive]);
end;

{ Now that we have specified what we want, create the table }
CreateTable;
end;

----------------------------------------------------------------------
若使用想SQL语句建立; 可以用下列方式(我经常使用SQL);

const CreateSQL='Create Table "%s" (%s)'; //SQL建表框架
var TempQuery:Tquery;
DefField :string; //字段名和数据类型描述部分
tableName :string; //表名称
begin
//字段名和数据类型描述, 每个字段用,号分开
Deffield := ' Field1 Integer, Field2 CHAR(30) ';

tableName := 'C:/TEMP/DB01.DB';
TempQuery := Tquery.Create(application); //建立TQuery对象
with TempQuery do begin
try
SQL.TEXT := format(CreateSQL,[tableName,deffield]); //填充Tquery中的SQL语句;
try
ExecSQL; //执行SQL命令
except
//..错误处理
end;
finally
free; //释放Tquery对象
end;
end;

end;

具体SQL的语法参看Delphi中Local SQL Help ;
那有create Table, create Index, drop table等语句的语法介绍

回复人:cmtan


如果要照已有的原库建数据库,可以这样

tblOld.Open; tblOld.Close;
....
tblNew.FieldDefs.Assign(tblOld.FieldDefs);
tblNew.IndexDefs.Assign(tblOld.IndexDefs);
tblNew.Create;
 
用sql非常简单
 
Close ;
sql.Clear ;
sql.add('Alter table ....'
 
使用sql简单些,
用delphi来实现的话,帮助中就有示例.
 
谢谢,各位大侠!!
我的问题是如何在运行期如何对已存在的paradox表动态字段(我用的是TTable)
进行添加和删除.以前没说清楚,不好意思!!

另外,请举一个关于TFieldDef.Create的例子,谢谢!!!
 
>>已存在的paradox表动态字段
没搞太懂是什么意思。
就用个Query来执行Sql,用Alter添加字段,Drop删除字段。
要注意的是,对表结构进行操作,需要把所以打开表的地方全部Close调。

>>另外,请举一个关于TFieldDef.Create的例子,谢谢!!!
下面是Delphi的帮助文档
with Table1 do begin
Active := False;
DatabaseName := 'DBDEMOS';
TableType := ttParadox;
TableName := 'CustInfo';

{ Don't overwrite an existing table }

if not Table1.Exists then begin
{ The Table component must not be active }
{ First, describe the type of table and give }
{ it a name }
{ Next, describe the fields in the table }
with FieldDefs do begin
Clear;
with AddFieldDef do begin
Name := 'Field1';
DataType := ftInteger;
Required := True;
end;
with AddFieldDef do begin

Name := 'Field2';
DataType := ftString;
Size := 30;
end;
end;
{ Next, describe any indexes }
with IndexDefs do begin
Clear;
{ The 1st index has no name because it is
{ a Paradox primary key }
with AddIndexDef do begin
Name := '';
Fields := 'Field1';
Options := [ixPrimary];
end;
with AddIndexDef do begin

Name := 'Fld2Indx';
Fields := 'Field2';
Options := [ixCaseInsensitive];
end;
end;
{ Call the CreateTable method to create the table }
CreateTable;
end;
end;
 
大家好,看来我还是没把问题说清楚.
我使用的是paradox表,用的是TTable.现在Paradox表已经存在,并且该表中的字段全是
动态字段.我是希望在运行期间可以添加和删除字段.
就是说在运行期间对一个""已存在""的paradox表的字段进行添加和删除操作,不是在运
行期间创建一新表.请您不要用SQL写,我还是一菜鸟,看不懂.谢谢!!
 
我看也只能用SQL来解决吧
ALTER TABLE table_reference DROP [COLUMN] column_reference |
ADD [COLUMN] column_reference [,reference DROP [COLUMN] column_reference |
ADD [COLUMN] column_reference...]
其实也很简单,比如我要在表Test加一个Integer型的字段ID,那我就在TQuery里执行:
alter table test add id integer
如果是删除的话就在TQuery里执行:
alter table test drop id
你要做的就是根据表名,字段名以及字段类型生成上面的SQL罢了。

你的意思是想用TTable自己的方法来实现? 不过我好象没见过这样的应用。
 
多谢,各位大侠!!!
 

遇到问题
我让table 和 query 共用一个数据源datasource ,然后用query 来对数据库表中的字段
进行添加和删除操作 结果出现 数据源不能循环调用的错误提示.
希望各位大侠能继续支持,谢谢!!!!
 

Similar threads

D
回复
0
查看
744
DelphiTeacher的专栏
D
D
回复
0
查看
718
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部