PB中将word或excel导入到数据库中,并在datawindow中显示出其文件名,求详细代码和方法 |
您所在的位置:网站首页 › blb是什么意思梗 › PB中将word或excel导入到数据库中,并在datawindow中显示出其文件名,求详细代码和方法 |
很久没用过PB了,网上找了一篇,大致看了一下,应该没什么问题 --转自51CTO论坛 在PowerBuilder里面 *** 作BLOB数据地灵活技术 PowerBuilder提供的BLOB(Binary Large Object)数据类型可以用来处理大型数据,包括图像、大文本、Word文档、二进制文件和多媒体等各种数据,它的长度可以是0~2GB字节,我们利用BLOB类型的变量可以将数据传递给数据库以大字段方式存储。但是用通常的数据窗口技术无法将BLOB类型数据加入到数据库中,也不能将数据库中相应字段的数据提取出来,即使在程序中直接使用UPDATE和SELECT等SQL语句也是无法对BLOB类型数据进行 *** 作的。下面笔者将介绍在PowerBuilder 70中 *** 作BLOB类型数据的技巧。 程序设计原理 在PB中实现BLOB类型数据的入库和查询,主要要用到两条特殊的SQL命令——UPDATEBLOB和SELECTBLOB,首先定位要进行 *** 作的记录,然后使用UPDATEBLOB命令就可以将BLOB类型变量中存放的数据传递给数据库,而使用SELECTBLOB则是将指定记录中的大字段数据传递给BLOB变量。 使用BLOB类型变量获取外界文件的数据内容,还必须借助于PB提供的可视化OLE控制对象,通过它可以将指定的文件内容显示成相应的对象(如BMP),双击它就可以激活相应的OLE服务器应用程序,来编辑修改对象的内容,同时也可以读取对象的数据内容(利用OLE控件的ObjectData属性),给BLOB类型变量赋值。 下面结合一个简单的程序实例,讲述如何处理BLOB数据类型。在这个例子中,BMP将作为一个大字段存储在数据库中。我们选择Microsoft Access 2000作为后台数据库,它的字段类型中包含“OLE对象”类型(如果选择MS SQL Server作为数据库服务器,可以使用TEXT或IMAGE类型字段存放大字段数据),这样就为管理多媒体数据、大文件和提供了支持。 *** 作BLOB字段的实现过程 我们在Access中创建一个新的数据库文件,文件名是bmpmdb,在其中定义BMP数据表bmptable如下: 各字段的其它设置(如字段宽度等),均采用缺省形式即可。 编程前还需要做的一步准备工作是在 *** 作系统的ODBC配置中建立指向bmpmdb数据库的连接,名称定为bmptable。 下面的程序片段实现了数据库的连接,的插入、更新、删除和查询。考虑文章的篇幅,本文只列出与主题相关的程序源码。 1 连接Access数据库 SQLCADBMS = "ODBC" // SQLCA为全局transaction事务变量 SQLCAAutoCommit = False SQLCADBParm = "Connectstring='DSN=bmptable;UID=WD='" CONNECT USING SQLCA; If SQLCA SQLCode <> 0 Then MessageBox ("数据库错误", "连接失败!") Halt close; End If 2 将BMP存入数据库 integer bmpno,icount //变量bmpno存放给定的编号 string filepath,filename blob blb_tmp //…此处对编号bmpno赋值,例如bmpno=101;可以通过程序实现为d出对话框窗口提供一个编号 //查询指定的编号是否已经存在 icount=0 SELECT COUNT() INTO :icount FROM bmptable WHERE bmptablebmpno=:bmpno USING SQLCA; //:bmpno为给定的编号 if icount>0 then MessageBox("查询结果",string(bmpno)+" 号已经存在,请输入一个新的编号") return end if //在OLE控制对象ole_1中插入BMP文件 GetFileOpenName("请选择一个需要插入的BMP文件",filepath,filename,"BMP","BMP文件(BMP),BMP") If Len(filepath)=0 Then Return End If If ole_1InsertFile(filepath)<>0 Then //OLE错误 Return End If //新入库 string sql sql= "INSERT INTO bmptable (bmpno,bmpdata,bmpname) && VALUES ("&& +string(bmpno)+",'','"&& +filename+"')" EXECUTE IMMEDIATE :sql; If SQLCASQLDBCode=0 Then COMMIT USING SQLCA; //提交事务 Else MessageBox("数据库错误","插入失败") ROLLBACK USING SQLCA; //事务回滚 Return End If Blb_tmp=ole_1ObjectData UPDATEBLOB bmptable SET bmpdata=:blb_tmp WHERE bmptablebmpno=:bmpno USING SQLCA; //更新存放的字段 If SQLCASQLDBCode=0 Then COMMIT USING SQLCA; //提交事务 MessageBox("插入成功","入库成功") Else MessageBox("数据库错误","更新失败") ROLLBACK USING SQLCA; //事务回滚 Return End If 3 从数据库中删除BMP UPDATE bmptable SET bmpdata='' WHERE bmptablebmpno=:bmpno USING SQLCA; //bmpno为要删除的编号 If SQLCASQLDBCode=0 Then COMMIT USING SQLCA; //提交事务 Else MessageBox("数据库错误","更新失败") ROLLBACK USING SQLCA; //事务回滚 Return End If DELETE FROM bmptable WHERE bmptablebmpno=:bmpno USING SQLCA; If SQLCASQLDBCode=0 Then COMMIT USING SQLCA; //提交事务 MessageBox("删除成功","删除成功") Else MessageBox("数据库错误","删除失败") ROLLBACK USING SQLCA; //事务回滚 Return End If 4 按编号查询信息 //需要提供一个编号存放在变量bmpno中 SetNull(blb_tmp) SELECTBLOB bmptablebmpdata INTO :blb_tmp FROM bmptable WHERE bmptablebmpno=:bmpno USING SQLCA; If Not IsNull(blb_tmp) Then ole_1ObjectData=blb_tmp //双击OLE控制唤醒OLE服务器即可编辑 End If 使用PB编程时,每次对数据库进行 *** 作后要注意检查返回结果,以保证程序的可靠性。以上程序只是对 *** 作BLOB数据类型的关键技术进行探讨,通过画板设计相应的用户界面,即可形成一个完整的基于Client/Server结构的数据库应用程序。 可能是权限不足,不能创建表格,或者:当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个frm 文件的报错好像暗示着 *** 作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导。在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以可能性的大小作了排序已知的原因:1,两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是TINYINT 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int(10) 和int(11)都显示为integer。另外,你还必须确定两个字段是否一个为 SIGNED,而另一个又是UNSIGNED, 这两字段必须严格地一致匹配。2, 你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的放,你必须为它创建一个索引。3, 外键的名字是一个已经存在的一个键值了,这个时候,你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。4, 其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎,(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键),你可以通过查询浏览器来设置表的引擎类型5, 你可能设置了ON DELETE SET NULL, 但是相关的键的字段又设置成了NOTS NULL 值。你可能通过修改cascade 的属性值或者把字段属性设置成 allow null 来搞定这个bug6, 请确定你的Charset 和 Collate 选项在表级和字段级上的一致7, 你可能设置为外键设置了一个默认值,如 default=08, 在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己独立的索引,这时,你必须为它创建一个独立的索引。9, ALTER 声明中有语法错误1、外键的引用类型不一样,主键是int外键是char2、找不到主表中 引用的列3、主键和外键的字符编码不一致4还有要建立外键的话,要先建立索引。没有建立索引也会出错。我的问题解决方案是在sql后面加上了如下句话,ok!成功导入脚本ENGINE=INNODB DEFAULT CHARSET=utf8;charset对应的换成你的主键表的字符集! 1 打开我的navicat,然后找到我的teacher表,选中它,然后点击菜单的‘design table’。 2 在d出的对话框中找到“Foreign Keys”,然后单击。 3 然后会出现一个设置外键的界面,一共有七列。简单介绍一下这几列的意思。 ‘name’:可以不填,你一会保存成功系统会自动生成。 ‘FieldName’:就是你要把哪个键设置为外键。这里选择‘dept’ ‘Reference DadaBase’:外键关联的数据库。 ‘Reference Table‘ :关联的表 这里是dept表 ‘Forgin filed Names’:关联的的字段,这里是code ‘ondelete’:就是删除的时候选择的动作。这里我的选择是setNull,意思就是当关联的表删除以后,teacher》dept字段会设置为null。 ‘onupdate’:就是更新的时候选择的动作。这里我的选择是CASCADE,意思就是当关联的表更新以后,teacher》dept字段会设置为级联更新。 4 设置完成后点击‘save’保存退出,也可以点击‘add Foreign Key’再添加一个外键。 MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。 以上就是关于PB中将word或excel导入到数据库中,并在datawindow中显示出其文件名,求详细代码和方法全部的内容,包括:PB中将word或excel导入到数据库中,并在datawindow中显示出其文件名,求详细代码和方法、SQL执行错误#1193从数据库Unknown system variable 'SQL_MODE'、win10 MySQL表不能设置外键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力! 欢迎分享,转载请注明来源:内存溢出 原文地址:https://www.outofmemory.cn/sjk/10132286.html |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |