我现在有两个表,Table1、Table2:
Table1表结构如下:
编号 姓名 性别table2表结构如下:
编号 项目名称 性质
001 年龄 1
002 生日 1
003 性别 0 问题如下:
我现要把table2项目名称字段下的记录把它作为字段名增加到Table1里,
(Tabel2表:性质=1为要增加的,性质=0为不要增加的)
即修改后的Table1表结构如下:
编号 姓名 性别 年龄 生日我现在的作法是:
Update table set //但这只能更改表里的记录,不能更改表结构。
怎样按上面讲的更改表结构,请高手指点。
Table1表结构如下:
编号 姓名 性别table2表结构如下:
编号 项目名称 性质
001 年龄 1
002 生日 1
003 性别 0 问题如下:
我现要把table2项目名称字段下的记录把它作为字段名增加到Table1里,
(Tabel2表:性质=1为要增加的,性质=0为不要增加的)
即修改后的Table1表结构如下:
编号 姓名 性别 年龄 生日我现在的作法是:
Update table set //但这只能更改表里的记录,不能更改表结构。
怎样按上面讲的更改表结构,请高手指点。
解决方案 »
- 我和社区->帖子配色设置里的第二版,较接近原来的
- 关于execl数据导入sql的问题
- 我的问题是右键单击空白处他总是弹出最后一次拥有焦点的节点的弹出菜单
- 求教关于文本文件读入速度的问题
- 谁小学数据学得好?
- 如何利用程序来控制NAT设备,建立端口映射
- 强烈抗议,长时间不结贴!!!!!!!!!!!!!!!!!!!!!!!!!!
- 请问如何用流的方法向SQLServer数据库中读写blob的image字段
- 当dbgrid的行焦点变化,我如何捕捉这一事件?
- 怎么在当前节点处增加同层节点或子节点?????
- 想把blob size 修改得大一些,打开bde管理器,意外发现不能修改该项(默认32),后台sqlserver2000?
- VCL源代码中,那些 汇编 模样 的代码 是真汇编么??能直接拷贝 到其他编译工具(如vc)中用吗??
add 年龄 int,生日 datetime
go
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('alter table1 table2 add 年龄 int,生日 datetime');
Open;
// ExecSQL;
end;
运行时就出错,提示如下:
DBISAM Engine Error # 11949 SQL error - 'TABLE keyword expected, instead found 'table1''
你没有实现我要的要求
我现要把table2项目名称字段下的记录把它作为字段名增加到Table1里,
(Tabel2表:性质=1为要增加的,性质=0为不要增加的)
即修改后的Table1表结构如下:
编号 姓名 性别 年龄 生日
begin
Close;
SQL.Clear;
SQL.Add('alter table table1 add 年龄 int,生日 datetime');
ExecSQL;
end;
不能用open,而且你的sql语句有问题,增加字段的格式
为:alter table tablename add 字段1 数据类型1,字段2 数据类型2.....
运行时就出错,提示如下:
DBISAM Engine Error # 11949 SQL error - 'End of ALTER TABLE statement expected, instead found '生日''
请看清楚以下问题:
我现在要的是把table2项目名称字段下的记录把它作为字段名增加到Table1里,
(Tabel2表:性质=1为要增加的,性质=0为不要增加的)
即修改后的Table1表结构如下:
编号 姓名 性别 年龄 生日
varchar(20)或 int 或datetime 或 numeric(18,2)
with query1 do
begin
close;
sql.clear;
sql.add('declare @fieldname varchar(50), @fieldtype varchar(50), @useble bit');
sql.add('declare addfield cursor for select fieldname, fieldtype, useble from table2');
sql.add('open addfield');
sql.add('fetch next from addfield into @fieldname, @fieldtype, @useble');
sql.add('while @@fetch_status=0');
sql.add('begin');
sql.add('if @useble=1 ');
sql.add('exec (''alter table table1 add ''+@fieldname+'' ''+@fieldtype+'' '')');
sql.add('fetch next from addfield into @fieldname, @fieldtype, @useble');
sql.add('end');
sql.add('close addfield');
sql.add('deallocate addfield');
sql.exesql;
我的数据库为DBISAM4.05好象不支持那些语法呀,还有没有其它的办法。
我现在的意思是通过程序方式根据table2表里的项目名称字段下的记录作为字段名动态往Table1表中添加。
望高手指点,谢谢!
while not adoquery2.eof then
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('alter table table1 add //adoquery2.fieldbyname().as* int);
ExecSQL;
end;
说说你要实现什么 我觉得你的设计思路有点问题
然后按照楼上的alter table一项一项的添加
我现在是要实现动态修改表Table1
根据table2表里的项目名称字段下的记录作为字段名动态往Table1表中添加。
var
name:string;
begin with query2 do
begin
close;
SQL.Clear;
sql.Add('select 编号,项目名称,字段类型,性质 from table2');
ExecSQL;
First;
end; while not Query2.eof do
begin
with query1 do
begin
name:=query2.ParamByName('项目名称').asstring; //Error
sql.add('alter table table1 add '+ name +' string'); //Error
execsql;
end;
query2.next;
end;
end;
var
name:string;
begin with query2 do
begin
close;
SQL.Clear;
sql.Add('select 编号,项目名称,字段类型,性质 from table2');
ExecSQL;
First;
end; while not Query2.eof do
begin
with query1 do
begin
name:=query2.ParamByName('项目名称').asstring; //Error
sql.add('alter table table1 add '+ name +' string'); //Error
execsql;
end;
query2.next;
end;
end;
with query2 do
begin
close;
SQL.Clear;
sql.Add('select 编号,项目名称,字段类型,性质 from table2');
ExecSQL; 《-------------这行
First;
end;
都没有打开数据集,怎么first??用select语句要使用open。你这段程序根本都执行不到你说有错误的地方,我就纳闷,你那错误怎么出来的!
按你说的改了,错误提示如下:
''学号'' is not a valid component name.
begin
with query1 do
begin
name:=query2.ParamByName('项目名称').asstring; //不知道你'项目名称'这个参数在哪里?是不是应该改成fieldbyname
sql.add('alter table table1 add '+ name +' string'); //Error
execsql;
end;
query2.next;
end;
end;
你说的那个我也试过不行呀,'项目名称'是table2表里的字段名,
我现在要把根据table2表里的项目名称字段下的记录作为字段名动态往Table1表中添加。
错误提示如下:
''学号'' is not a valid component name.
--我现在有两个表,Table1、Table2:
--Table1表结构如下:
--编号 姓名 性别
--
--table2表结构如下:
--编号 项目名称 性质
--001 年龄 1
--002 生日 1
--003 性别 0 --问题如下:
--我现要把table2项目名称字段下的记录把它作为字段名增加到Table1里,
--(Tabel2表:性质=1为要增加的,性质=0为不要增加的)--即修改后的Table1表结构如下:
--编号 姓名 性别 年龄 生日
--探测表1 并删除
if exists (select 1
from sysobjects
where id = object_id('tbl1')
and type = 'U')
drop table tbl1
go--探测表2 并删除
if exists (select 1
from sysobjects
where id = object_id('tbl2')
and type = 'U')
drop table tbl2
go
--建表1
create table tbl1
(
[编号] char(10),
[姓名] char(10),
[性别] char(10)
)
贴到查询分析器里 直接执行
create table tbl2
(
[编号] char(10),
[项目名称] char(10),
[性质] char(10)
)--插入数据到表2
insert into tbl2 values('001','年龄','1')
insert into tbl2 values('002','生日','1')
insert into tbl2 values('003','性别','0')--输出表1更改前结构
select * from tbl1--更改表1结构
declare @sql varchar(8000)
set @sql = ' '
select @sql = @sql + 'alter table tbl1 add ['+rtrim(ltrim([项目名称]))+'] char(20) '
from (select distinct [项目名称] from tbl2 where [性质]='1') as a
exec(@sql)
go--输出表1更改后结构
select * from tbl1
name:string;
begin with query2 do
begin
close;
SQL.Clear;
sql.Add('select 项目名称 from table2 where 性质=1');
open;
First;
end; while not Query2.eof do
begin
with query1 do
begin
close;
sql.clear;
name:=query2.fieldyName('项目名称').asstring;
sql.add('alter table table1 add '+ name +' nvarchar(10) NUll');
execsql;
end;
query2.next;
end;
end;
我的代码是SQL的语法吧,我的数据库为DBISAM4.05的,好象不支持那些语法呀,能不能改一下。
TO: capoatguitar(菠萝蜜汁红塔山)
你改了之后也不是一样,出现这个错误提示
''学号'' is not a valid component name.
改完后发到我邮箱里,[email protected]
jnonlie.meibu.com/download/DBISAM.rar
jnonlie.meibu.com/download/222.rar
改完后发到我邮箱里,[email protected]
jnonlie.meibu.com/download/DBISAM.rar
jnonlie.meibu.com/download/222.rar