怎样在已有数据的数据库中添加字段(100分)

  • 主题发起人 主题发起人 wuwo
  • 开始时间 开始时间
ALTER TABLE "customer.db" ADD "customer.db"."#ID" CHAR(3)
不要用bde explorer里加
 
利用存储过程

ALTER TABLE table1 ADD (a1 varchar2(6));

这里指oracle,其它数据库类似
 
用tfields.add方法可以吗?
sql server:
alter table table1 add column_b VARCHAR(20) NULL
 
我用的是DBF数据库(单机),想添加一个长度为30的字串字段,用SQL或TABLE该如何写?
 
用sql语句:alter table "数据库名" add 字段一 字段类型(字段长度),字段二。。。。
例如:ALTER TABLE "names.db" ADD lastname CHAR(25)
如是实数类型,这‘字段长度’后还有‘小数位数’,两者用逗号隔开。
例如:alter table "students.db" add score numeric(5,2)
 
可是这样写就出错呀,我想添加一个字段然后建立索引
with Query1 do
begin
Active:=False;
Sql.clear;
sql.Add('ALTER TABLE "data.dbf" ADD book CHAR(30)');
sql.add('CREATE UNIQUE INDEX myindex ON "DATA.DBF" book');
ExecSQL;
end;
该怎么办?

 
alter table table1 add no varchar(30)
不在在bde explorer,否则它会清空你的数据表
在此是指Sql Server7.0
 
UTable.FieldDefs.Add('FieldName',DataType,FieldWidth,True/False)
 
有两种方法: 一种使用TTable控件,另一种使用TQuery控件
(代码如下,假设添加一个名为Name的字符串型字段)

1. 使用TTable控件
...
var
NewField: TFieldDef; //声明一个新字段
begin
Table1.Active:=Ture;
NewField:=Table1.FieldDefs.AddFieldDef;
with NewField do
begin
Name:='Name'; //名称
DataType:=ftString; //类型
Size:=8; //大小
Required:=False; //是否必须输入数据
end;
Table1.Active:=False;
Table1.CreateTable;
end;

2. 使用TQuery控件 //主要是设置SQL语句
...
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('Alter table 表名 Add Name char(8)');
Prepare;
ExecSQL;
end;
...
 
各位,我是说两条SQL语句一起执行就出错,一条语句就OK

sql.Add('ALTER TABLE "data.dbf" ADD book CHAR(30)');
sql.add('CREATE UNIQUE INDEX myindex ON "DATA.DBF" book');

Why???
 
也许sql语句是同时执行的,上面还没有建立好你就开始索引了!
不知会不会是这个问题!
 
你可以试试先将下面的第一句代码:
sql.Add('ALTER TABLE "data.dbf" ADD book CHAR(30)');
后添加sql.execSQL; sql.clear;
然后再执行后一句: sql.add('CREATE UNIQUE INDEX myindex ON "DATA.DBF" book');
再加入sql.execSQL;
原因是,如果第一句没有执行sql.execSQL语句时,数据库中新字段book并没有立即加入,
所以第二句将会出错。
 
wuwo:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
我都试过不行,各位有什么办法吗?
 
多人接受答案了。
 
后退
顶部