当前位置: 代码迷 >> PB >> pb 动态创建表字段、数据表,该怎么处理
  详细解决方案

pb 动态创建表字段、数据表,该怎么处理

热度:232   发布时间:2016-04-29 05:28:14.0
pb 动态创建表字段、数据表
各位,请教。现想实现如下功能:
GRID类型的数据表里从某表中查询了50个字段,程序发放给客户,但可能客户那的数据表是旧版本的,字段可能只有30个,想动态的检测都少了哪些字段,然后动态的添加上。添加完之后再创建一个个自定义的数据表,字段及类型与这个这50个字段的表完全一样的(我是有其它的用处)。
请问各位高手,如何实现,请帮写一些代码,谢谢!
------解决方案--------------------
sqlca.autocommit=true //自动提交,不能少
ls_sql="create table a( a int null ....) " //建表
execute immediate :ls_sql;
ls_sql="alter table a add b int null" //加字段
execute immediate :ls_sql;
sqlca.sqlautocommit=false
------解决方案--------------------
引用:
sqlca.autocommit=true //自动提交,不能少
ls_sql="create table a( a int null ....) " //建表
execute immediate :ls_sql;
if sqlca.sqlcode=-1 then messagebox('',sqlca.sqlerrtext)
ls_sql="alter table a add b int null" //加字段
execute immediate :ls_sql;
if sqlca.sqlcode=-1 then messagebox('',sqlca.sqlerrtext)
sqlca.sqlautocommit=false


最好加上判断
------解决方案--------------------
查询数据库的系统表.
sysobjects,该表包含了所有的数据库对象名,包括表,视图,存储过程等.syscolumns,该表包含了表对象的定义,包括字段定义以及字段的各种属性
------解决方案--------------------
咱用的方法就是每一个列都执行add一下
------解决方案--------------------
1.需要你把最新的表保存在一个配置文件或者一个数据窗口里,然后在程序运行时,判断一下最新表里的字段在用户的数据库上是否有,如果没有,自动生成动态的SQL,然后动态执行。判断用户数据库上的字段是否有可以用系统表,也可以用

select * from table来动态创建一个数据窗口,然后再比对。

2.也可以不判断目前的结构,直接执行sql,如果alter table add column_nam varchar2(100)之类的,如果没有,会执行成功,如果有,会失败但不影响。

3.最重要的一点,数据结构改动后,后台的触发器和存储过程等可能会部分失效,需要重新编译
  相关解决方案