2006年11月2日星期四
pbcat...是pb建立的系统表
当PowerBuilder第一次连接SQL Server时,它要在用户数据库中建立它的扩展属性数据字典,一共有五个以“pbcat"为前缀的表,它们分别是:pbcatcol(字段), pbcatedt(编辑风格),pbcatfmt(格式),pbcattbl(表),和pbcatVld(规则)。这就是所谓的PowerBuilder 系统表,当你在DB Painter中增加或者删除表字段时,相应地在pbcatcol和pbcattbl表中有一条相关记录手插入或删除。如果增加扩展属性,那么在 pbcatfmt,pbcatvld和pbcatedt表中,会建立相应的记录。
解决mysql odbc connector找不到pbcattbl表的错误
最近几天用pb(powerbuilder)作前台,与mysql数据库使用mysql odbc connector连接
当时懒,没有重新建一个数据库或者用户,直接用root账户登陆test数据库
结果在pb中打开sql的时候就会出现以下错误提示:
SQLSTATE = S0002
[MySQL][ODBC 3.51 Driver][mysqld-4.0.12-nt] Table 'root.pbcattbl' doesn't exist.
另外在数据窗口中不能编辑从数据库中提取数据的控件——只要选中该控件,立刻出现内存只读错误,并退出pb
我在google上没有找到中文的相关问题解决方案,甚至没有人讨论这个问题
E文文章倒是有提出的,可是解答得乱七八糟,我看了几篇都没什么帮助
仔细看数据库中的现有表,发现存在一个test.pbcattbl的表
后来考虑root.pbcattbl因该是在root数据库下需要一个pbcattbl表,那么这个驱动程序为什么会需要在这样一个位置寻找表呢?我的服务器中根本没有名为root的数据库,而这个数据库的名字又刚好和我的登陆用户名一致,因此我怀疑这个驱动程序可能是寻找这样一个表:与当前登陆用户同名的数据库中,需要有一个名为pbcattbl的表
因此我重新建立一个用户test,并把pb中的连结和登陆数据库的用户全部改为test
当前问题解决
仍然不理解的是,这个表内容是空的,我不明白pbcattbl表是做什么用
由该表导出的SQL语句如下:
DROP TABLE IF EXISTS `test`.`pbcattbl`;
CREATE TABLE `test`.`pbcattbl` (
`pbt_tnam` char(65) NOT NULL,
`pbt_tid` int(11) default NULL,
`pbt_ownr` char(65) NOT NULL,
`pbd_fhgt` smallint(6) default NULL,
`pbd_fwgt` smallint(6) default NULL,
`pbd_fitl` char(1) default NULL,
`pbd_funl` char(1) default NULL,
`pbd_fchr` smallint(6) default NULL,
`pbd_fptc` smallint(6) default NULL,
`pbd_ffce` char(18) default NULL,
`pbh_fhgt` smallint(6) default NULL,
`pbh_fwgt` smallint(6) default NULL,
`pbh_fitl` char(1) default NULL,
`pbh_funl` char(1) default NULL,
`pbh_fchr` smallint(6) default NULL,
`pbh_fptc` smallint(6) default NULL,
`pbh_ffce` char(18) default NULL,
`pbl_fhgt` smallint(6) default NULL,
`pbl_fwgt` smallint(6) default NULL,
`pbl_fitl` char(1) default NULL,
`pbl_funl` char(1) default NULL,
`pbl_fchr` smallint(6) default NULL,
`pbl_fptc` smallint(6) default NULL,
`pbl_ffce` char(18) default NULL,
`pbt_cmnt` varchar(254) default NULL,
UNIQUE KEY `pbcatt_x` (`pbt_tnam`,`pbt_ownr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
看各列名字,貌似用来存储和管理本库中用户信息的……
当时懒,没有重新建一个数据库或者用户,直接用root账户登陆test数据库
结果在pb中打开sql的时候就会出现以下错误提示:
SQLSTATE = S0002
[MySQL][ODBC 3.51 Driver][mysqld-4.0.12-nt] Table 'root.pbcattbl' doesn't exist.
另外在数据窗口中不能编辑从数据库中提取数据的控件——只要选中该控件,立刻出现内存只读错误,并退出pb
我在google上没有找到中文的相关问题解决方案,甚至没有人讨论这个问题
E文文章倒是有提出的,可是解答得乱七八糟,我看了几篇都没什么帮助
仔细看数据库中的现有表,发现存在一个test.pbcattbl的表
后来考虑root.pbcattbl因该是在root数据库下需要一个pbcattbl表,那么这个驱动程序为什么会需要在这样一个位置寻找表呢?我的服务器中根本没有名为root的数据库,而这个数据库的名字又刚好和我的登陆用户名一致,因此我怀疑这个驱动程序可能是寻找这样一个表:与当前登陆用户同名的数据库中,需要有一个名为pbcattbl的表
因此我重新建立一个用户test,并把pb中的连结和登陆数据库的用户全部改为test
当前问题解决
仍然不理解的是,这个表内容是空的,我不明白pbcattbl表是做什么用
由该表导出的SQL语句如下:
DROP TABLE IF EXISTS `test`.`pbcattbl`;
CREATE TABLE `test`.`pbcattbl` (
`pbt_tnam` char(65) NOT NULL,
`pbt_tid` int(11) default NULL,
`pbt_ownr` char(65) NOT NULL,
`pbd_fhgt` smallint(6) default NULL,
`pbd_fwgt` smallint(6) default NULL,
`pbd_fitl` char(1) default NULL,
`pbd_funl` char(1) default NULL,
`pbd_fchr` smallint(6) default NULL,
`pbd_fptc` smallint(6) default NULL,
`pbd_ffce` char(18) default NULL,
`pbh_fhgt` smallint(6) default NULL,
`pbh_fwgt` smallint(6) default NULL,
`pbh_fitl` char(1) default NULL,
`pbh_funl` char(1) default NULL,
`pbh_fchr` smallint(6) default NULL,
`pbh_fptc` smallint(6) default NULL,
`pbh_ffce` char(18) default NULL,
`pbl_fhgt` smallint(6) default NULL,
`pbl_fwgt` smallint(6) default NULL,
`pbl_fitl` char(1) default NULL,
`pbl_funl` char(1) default NULL,
`pbl_fchr` smallint(6) default NULL,
`pbl_fptc` smallint(6) default NULL,
`pbl_ffce` char(18) default NULL,
`pbt_cmnt` varchar(254) default NULL,
UNIQUE KEY `pbcatt_x` (`pbt_tnam`,`pbt_ownr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
看各列名字,貌似用来存储和管理本库中用户信息的……
订阅:
博文 (Atom)