PB修改数据库表结构的技巧
- 格式:docx
- 大小:17.18 KB
- 文档页数:3
在PB中动态修改数据窗口DW的SQL语句方法注意事项数据库应用程序通常进行一项确定的工作,在编写和编译时就可以确定完整的SQL语句,但是在编译时不能确定SQL语句的具体格式和参数时,只能在程序运行过程中构造SQL语句,需要使用动态SQL语句。
以Format 4 动态SQL 语句为例,使用格式如下:DECLARE Cursor | ProcedureDYNAMIC CURSOR | PROCEDUREFOR DynamicStagingArea ;PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject} ;DESCRIBE DynamicStagingAreaINTO DynamicDescriptionArea ;OPEN DYNAMIC Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea} ;EXECUTE DYNAMIC Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea ;FETCH Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea ;CLOSE Cursor | Procedure ;---- 在使用动态SQL语句时,需准备DynamicStagingArea对象(全局对象SQLSA)和DynamicDescriptionArea对象(全局对象SQLDA)。
定义游标或过程,读取PREPARE语句中的SQL语句以及语句中说明的参数和类型,执行FETCH语句后,调用相关的函数逐条读取并处理检索结果。
---- 动态SQL语句虽然解能够在程序运行过程中构造SQL语句,但在实际应用中较少使用。
若SELECT语句的结果序列一定,可以通过重新指定DataWindow 对象的SELECT语句的方法,达到动态修改SQL语句的功能。
1.插入数据在数据库中插入一条数据使用INSERT语句,格式如下:INSERT INTO 表名(字段列表)VALUES (值列表){USING 事务对象};不同的字段使用逗号(“,”)分隔,并且不包含blob类型的字段;值列表中不同的值之间用逗号分隔,和字段列表中字段的类型对应兼容(最好类型相同),并且字符型和日期型取值用引号引起来。
省略事务对象时使用默认的全局事务对象SQLCA。
下面是一个向表中增加记录的SQL语句:insert into dept (deptno,deptname,workers) values (:ls_deptno, "销售部",10);该例子向表dept中插入一条记录,给该表中的字段deptno赋值为变量ls_deptno的取值,给字段deptname赋值为“销售部”,给字段workers赋值为10。
可能该表中还包含其他的字段,但是一般情况下,这三个字段中最起码应该有主键,除非使用了Identify类型的字段,因为主键肯定是不允许为空的。
如果该表就包含这三个字段,上面的SQL语句可以简写成:insert into dept values (:ls_deptno, "销售部",10);2.删除数据SQL语句删除数据是以行为单位删除的,不能删除某行中某字段的数据。
删除数据的SQL 语句格式是:DELETE FROM 表名WHERE 条件表达式{USING 事务对象};删除游标中和当前数据对应的记录可以使用下面格式的语句:DELETE FROM 表名WHERE CURRENT OF 游标名称;例如,下面的例子删除表dept中workers=10的所有记录:delete from dept where workers=10;再如,下面的例子是删除和光标中当前数据对应的记录:delete from dept where current of dept_cur;3.修改数据使用修改语句可以修改数据表中的一条或多条记录中的一个或多个字段的取值。
PB的小技巧1.如何使DataWindow中的数据只能追加新记录而不能修改。
利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")2. 允许从空的非字符字段跳离string ss = this.dwDescribe(this.GetColumnName()+".coltype")//s = this.dwDescribe("#"+String(this.GetColumn())+".coltype")CHOOSE CASE sCASE "number"IF Trim(this.GetText()) = "" THENint null_numSetNull(null_num)this.SetItem(this.GetRow(),this.GetColumn(),null_num)this.SetActionCode(3)END IFCASE "date"IF Trim(this.GetText()) = "" THENdate null_dateSetNull(null_date)this.SetItem(this.GetRow(),this.GetColumn(),null_date)this.SetActionCode(3)END IFCASE "time"IF Trim(this.GetText()) = "" THENtime null_timeSetNull(null_time)this.SetItem(this.GetRow(),this.GetColumn(),null_time)this.SetActionCode(3)END IFCASE "datetime"IF Trim(this.GetText()) = "" THENdate null_datetimeSetNull(null_datetime)this.SetItem(this.GetRow(),this.GetColumn(),null_datetime)this.SetActionCode(3)END IFEND CHOOSE3. 当我们为Datawindow的每一行显示行号时可以简单的放一个表达式为GetRow() -- 计算列。
pb的ddlb技巧在数据库管理中,DDL(数据定义语言)用于定义数据库的结构,其中包括创建、修改和删除数据库对象。
而PB(PowerBuilder)是一种集成开发环境,用于构建企业级应用程序。
在PB中操作数据库时,可以使用DDL语句来创建、修改和删除数据库对象。
以下是一些PB中使用DDL的技巧:1. 创建表:在PB中,可以使用CREATE TABLE语句来创建数据库表。
可以指定表的名称、列的数据类型、约束等信息。
例如:CREATE TABLE employee (。
emp_id INT PRIMARY KEY,。
emp_name VARCHAR(50),。
emp_salary DECIMAL(10,2)。
);2. 修改表:如果需要修改已存在的表结构,可以使用ALTER TABLE语句。
例如,添加新的列或修改列的数据类型:ALTER TABLE employee.ADD emp_department VARCHAR(50);3. 删除表:如果需要删除已存在的表,可以使用DROP TABLE 语句。
例如:DROP TABLE employee;4. 创建索引:在PB中,可以使用CREATE INDEX语句来创建索引,以提高查询性能。
例如:CREATE INDEX idx_emp_name ON employee (emp_name);5. 删除索引:如果不再需要某个索引,可以使用DROP INDEX 语句来删除它。
例如:DROP INDEX idx_emp_name ON employee;6. 使用事务,在执行DDL语句时,建议使用事务来确保数据的一致性。
可以使用BEGIN TRANSACTION和COMMIT TRANSACTION语句来控制事务的范围。
7. 错误处理,在执行DDL语句时,需要考虑可能出现的错误情况。
可以使用TRY...CATCH块来捕获并处理异常情况,以确保程序的稳定性。
总之,在PB中使用DDL语句需要谨慎对待,确保在操作数据库结构时不会造成数据丢失或不一致。
如何在PB数据窗口中修改数据---设置数据窗口的更新属性数据窗口对象非常强大的原因之一就是能够很容易地修改数据库。
当用户修改了数据窗口中的数据,插入了新的数据行或者删除了数据行以后,只要调用update()函数就可以将修改了的数据保存到数据库中。
但是,这需要一个前提,就是必须设置数据窗口的修改属性。
数据窗口要修改数据表,首先清楚数据窗口只能修改一个数据表。
当数据窗口的数据来源于不止一个数据表时,可以用脚本控制数据窗口的修改属性来对数据表逐个进行修改,这种技术在后面有关章节介绍。
下面介绍一次修改一个数据表的设定方法。
当数据窗口是用来接受用户的手工录入数据时,应该设置两方面的属性才能确保数据窗口能够用来修改数据表。
一个是修改数据窗口的修改属性,另一个是用户可以修改的字段的相关属性值。
首先介绍数据窗口的修改属性的设置。
在数据窗口画板中,使用菜单项Rows->Update Properties,弹出如图所示的窗口。
数据窗口的所有修改属性都集中在该窗口中。
如果数据窗口对应的数据表中定义了主键或者惟一性索引,则数据窗口创建时缺省的就是允许修改,并且正确设置了所有的修改属性。
否则就需要手工进行设置。
前面介绍过,当增加、删除或者重新选择了字段时,PowerBuilder将数据窗口的修改属性置为不允许,这时也应该进行手工设置。
首先应该选中Allow Updates选项,只有选中该选项,才允许继续进行其他属性的设定。
在Allow Updates右面的下拉列表框叫做Table to Update,只能在该下拉列表框中选择一个,并且必须选择一个数据表名,选中的表就是要被更新的表。
选中了Allow Updates属性后,接下来就要指定在数据窗口中哪些列被更新。
在Updateable Columns列表框中用鼠标单击被更新的字段。
当数据窗口中的字段来自不止一个数据表时,这时一定要选择同一个表中的字段,因为一个数据窗口一次只能更新一个数据表。
1.插入数据在数据库中插入一条数据使用INSERT语句,格式如下:INSERT INTO表名(字段列表)VALUES(值列表){USING事务对象};不同的字段使用逗号(“,”)分隔,并且不包含blob类型的字段;值列表中不同的值之间用逗号分隔,和字段列表中字段的类型对应兼容(最好类型相同),并且字符型和日期型取值用引号引起来。
省略事务对象时使用默认的全局事务对象SQLCA。
下面是一个向表中增加记录的SQL语句:insert into dept(deptno,deptname,workers)values(:ls_deptno,"销售部",10);该例子向表dept中插入一条记录,给该表中的字段deptno赋值为变量ls_deptno的取值,给字段deptname赋值为“销售部”,给字段workers赋值为10。
可能该表中还包含其他的字段,但是一般情况下,这三个字段中最起码应该有主键,除非使用了Identify类型的字段,因为主键肯定是不允许为空的。
如果该表就包含这三个字段,上面的SQL语句可以简写成:insert into dept values(:ls_deptno,"销售部",10);2.删除数据SQL语句删除数据是以行为单位删除的,不能删除某行中某字段的数据。
删除数据的SQL 语句格式是:DELETE FROM表名WHERE条件表达式{USING事务对象};删除游标中和当前数据对应的记录可以使用下面格式的语句:DELETE FROM表名WHERE CURRENT OF游标名称;例如,下面的例子删除表dept中workers=10的所有记录:delete from dept where workers=10;再如,下面的例子是删除和光标中当前数据对应的记录:delete from dept where current of dept_cur;3.修改数据使用修改语句可以修改数据表中的一条或多条记录中的一个或多个字段的取值。
pb mysql 方法使用PB MySQL 方法进行数据库管理引言:在现代的互联网时代,数据的管理和存储变得越来越重要。
而MySQL作为一种常用的关系型数据库管理系统,被广泛应用于各种网站和应用程序中。
本文将介绍如何使用PB MySQL方法进行数据库管理,包括数据库的创建、表的设计、数据的插入、查询和更新等操作。
一、创建数据库在PB MySQL中创建数据库非常简单,只需要使用CREATE DATABASE语句即可。
例如,要创建一个名为"mydatabase"的数据库,可以使用以下语句:```sqlCREATE DATABASE mydatabase;```创建数据库时,还可以指定字符集和排序规则等参数,以满足特定的需求。
二、设计表结构在数据库中,数据以表的形式进行存储。
在PB MySQL中,可以使用CREATE TABLE语句来创建表,并指定表的字段、数据类型、约束等信息。
例如,要创建一个名为"users"的表,包含id、name、age和email字段,可以使用以下语句:```sqlCREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),age INT,email VARCHAR(50));```在创建表时,可以根据实际需求设置主键、唯一约束、非空约束等,以保证数据的完整性和一致性。
三、插入数据在数据库中插入数据是非常常见的操作。
在PB MySQL中,可以使用INSERT INTO语句来插入数据。
例如,要向"users"表中插入一条记录,可以使用以下语句:```sqlINSERT INTO users (id, name, age, email)VALUES(1,'John',20,'****************');```可以一次性插入多条记录,只需要在VALUES子句中添加对应的值即可。
PB修改数据库表结构的技巧PB修改数据库表结构的技巧一、修改数据库表结构,数据库表中没有记录方法1:将表结构以Export Table 文件格式输出。
从Database中选择要修改的数据库表T able。
从Objects中选择Export Table/View Syntax to Log,取名保存即选Save Log As,以*.sql格式保存。
从Objects中选择Database Administration。
从File中选择Dos Open,选文件名File name,*.sql,打开进行修改。
从Objects中选择Execute SQL。
即产生一新的数据库表结构。
注意:Table名不要同名。
方法2:将表结构以SQL Syntax 文件格式输出。
从Database中选择要修改的数据库表T able。
按Preview键。
从File中选择Save Rows as,File Format 选SQL Syntax,取表名*.sql保存。
从File中选择Dos Open,打开表名*.sql,进行修改。
取表名后,Execute SQL。
注意:此种方法没有生成Primary Key。
二、修改数据库表结构,保存原数据库表中记录方法1:先修改数据库表结构,用SQL语句转移数据库表中记录将表1生成表1.sql,修改结构,将表1另取名为表2。
运行表2.sql,生成表2。
此时产生一新的数据库表结构。
从Objects中选择Database Administration,写SQL Statement:Insert into 新表名select * from 旧表名;Execute SQL。
将旧表中所有字段内容转入新表中。
删除表1,从File中选择Dos Open,打开文件名File name即表2.sql,将表2统一改为表1。
运行表1.sql,生成新结构的表1,此时无记录。
按步骤3,将表2中的记录全部转入表1中。
若将部分字段转入,写SQL Statement:insert into 新表名(字段1,字段2......)select 字段1,字段2......from 旧表名;Execute SQL。
PB中表的修改对数据窗口和报表的影响的解决办法现在采用原型模型的开发的不少,使得开发中表的修改变得比较平常,为了解决已做的报表、数据界面主体不必重做,下面提出一些解决的方法,希望能对碰到此类问题的开发人员有所帮助,同时也希望能起到抛砖引玉的作用。
1、问题一:表的字段增减。
此问题比较容易解决。
表的字段增加,打开DataWindow窗口,点击Data Source 图标,将新字段在DataWindow窗口的Selection List选中,然后新的字段就会在添加到原datawindow 窗口中,问题也就解决了,不过值得提醒的是若在输入数据DataWindow中添加字段,记得在数据窗口的Update Properties属性中,将新字段在Updateable Columns列表中选中,否则新字段值不能提交;表的字段删除,打开DataWindow窗口,点击Data Source 图标,先执行表的弹出菜单Seselect All,再执行Select All 即可。
2、问题二:表中字段的数据长度的修改打开DataWindow窗口,点击Data Source 图标,先执行表的弹出菜单Seselect All,再执行Select All 即可在数据窗口的Column Specification中看到修改长度的字段已为新的长度。
不过别急,对于字符类型的字段,问题还未完全解决,选中已修改长度的字符类型字段,按鼠标右键,选择Properties,再选择Edit属性中Limit的值为新的长度值,问题才解决。
3、问题三:表中字段的数据类型的修改打开DataWindow窗口,点击Data Source 图标,先执行表的弹出菜单Seselect All,再执行Select All 即可。
4、问题四:表的名称改变字段不变4.1 点击Library库画板,选中要修改的数据窗口或报表。
4.2 按鼠标右键,选择弹出菜单项Export,或选择Entry菜单的Export项将数据窗口或报表到出后缀为.srd的文件,文件名默认为数据窗口或报表的名字。
PB修改数据库表结构的技巧
一、修改数据库表结构,数据库表中没有记录
方法1:将表结构以Export Table 文件格式输出。
从Database中选择要修改的数据库表Table。
从Objects中选择Export Table/View Syntax to Log,取名保存即选Save Log As,以*.sql格式保存。
从Objects中选择Database Administration。
从File中选择Dos Open,选文件名File name,*.sql,打开进行修改。
从Objects中选择Execute SQL。
即产生一新的数据库表结构。
注意:Table名不要同名。
方法2:将表结构以SQL Syntax 文件格式输出。
从Database中选择要修改的数据库表Table。
按Preview键。
从File中选择Save Rows as,File Format 选SQL Syntax,取表名*.sql保存。
从File中选择Dos Open,打开表名*.sql,进行修改。
取表名后,Execute SQL。
注意:此种方法没有生成Primary Key。
二、修改数据库表结构,保存原数据库表中记录
方法1:先修改数据库表结构,用SQL语句转移数据库表中记录
将表1生成表1.sql,修改结构,将表1另取名为表2。
运行表2.sql,生成表2。
此时产生一新的数据库表结构。
从Objects中选择Database Administration,写SQL Statement:Insert into 新表名select * from 旧表名;Execute SQL。
将旧表中所有字段内容转入新表中。
删除表1,从File中选择Dos Open,打开文件名File name即表2.sql,将表2统一改为表
1。
运行表1.sql,生成新结构的表1,此时无记录。
按步骤3,将表2中的记录全部转入表1中。
若将部分字段转入,写SQL Statement:
insert into 新表名(字段1,字段2......)
select 字段1,字段2......from 旧表名;
Execute SQL。
旧表中部分字段内容转入新表中。
方法2:将表结构和记录以SQL Syntax 文件格式输出。
从Database中选择要修改的数据库表Table,按Preview键。
从File中选择Save Rows as,File Format 选SQL Syntax,取表名*.sql保存。
从File中选择Dos Open,打开表名*.sql,进行修改。
取表名后,Execute SQL。
方法3:将表结构和记录以TXT 文件格式输出。
从Database中打开数据库表,按Preview键。
从File中选择Save Rows as,File Format 选TXT,取表名*.txt保存。
将表生成表.sql,修改结构,运行表.sql,此时产生一新的数据库表结构。
从Database中打开数据库表,按Preview键。
从Rows中选择Import,选*.txt。
从File中选择Save changes to Database。
注意:方法1适用于任何修改数据库表结构的任何情况。
方法2和方法3对删除字段名不适用。
另外,用Message传递参数必须注意以下几点:
1. 最好执行完窗口操作(打开或关闭)后马上将Message消息对象的值传给变量,这是因为Message是全局使用的对象,每一次事件被触发或传送时都会被使用,其他Script 也有可能用到Message消息对象,因此它有被覆盖的危险。
2.避免传送NULL对象,以免程序出错。