PB中将word或excel导入到数据库中,并在datawindow中显示出其文件名,求详细代码和方法

您所在的位置:网站首页 blb是什么意思梗 PB中将word或excel导入到数据库中,并在datawindow中显示出其文件名,求详细代码和方法

PB中将word或excel导入到数据库中,并在datawindow中显示出其文件名,求详细代码和方法

2023-05-10 23:59| 来源: 网络整理| 查看: 265

很久没用过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