在PowerBuilder中 *** 作BLOB数据的技巧[2]

在PowerBuilder中 *** 作BLOB数据的技巧[2],第1张

//提交事务

Else

MessageBox( 数据库错误 插入失败 )

ROLLBACK USING SQLCA;

//事务回滚

Return

End If

Blb_tmp=ole_ ObjectData

UPDATEBLOB bmptable SET bmpdata=:blb_tmp

WHERE bmptable bmpno=:bmpno

USING SQLCA; //更新存放的字段

If SQLCA SQLDBCode= Then

MIT USING SQLCA;

//提交事务

MessageBox( 插入成功 入库成功 )

Else

MessageBox( 数据库错误 更新失败 )

ROLLBACK USING SQLCA;

//事务回滚

Return

End If

从数据库中删除BMP

UPDATE bmptable SET bmpdata=

WHERE bmptable bmpno=:bmpno

USING SQLCA;

//bmpno为要删除的编号

If SQLCA SQLDBCode= Then

MIT USING SQLCA;

//提交事务

Else

MessageBox( 数据库错误 更新失败 )

ROLLBACK USING SQLCA;

//事务回滚

Return

End If

DELETE FROM bmptable

WHERE bmptable bmpno=:bmpno

USING SQLCA;

If SQLCA SQLDBCode= Then

MIT USING SQLCA;

//提交事务

MessageBox( 删除成功 删除成功 )

Else

MessageBox( 数据库错误 删除失败 )

ROLLBACK USING SQLCA;

//事务回滚

Return

End If

按编号查询信息

//需要提供一个编号存放在变量bmpno中

SetNull(blb_tmp)

SELECTBLOB bmptable bmpdata INTO :blb_tmp

FROM bmptable

WHERE bmptable bmpno=:bmpno

USING SQLCA;

If Not IsNull(blb_tmp) Then

ole_ ObjectData=blb_tmp

//双击OLE控制唤醒OLE服务器即可编辑

End If

使用PB编程时 每次对数据库进行 *** 作后要注意检查返回结果 以保证程序的可靠性 以上程序只是对 *** 作BLOB数据类型的关键技术进行探讨 通过画板设计相应的用户界面 即可形成一个完整的基于Client/Server结构的数据库应用程序

       编辑推荐

       ASP NET开发培训视频教程

       Microsoft NET框架程序设计视频教程

lishixinzhi/Article/program/PB/201311/24626

取二进制数据:

一样的sql语句,查询出来即可。只不过二进制数据是个数据块,需要得到数据块的大小和数据指针。

bool CMySqlAccess::GetBinaryField(int nCol,char &pDataOut,int& nDataLen)

{

if (m_ItemMySqlRow[nCol] != NULL)

{

unsigned long FieldLength = mysql_fetch_lengths(m_pMySqlResult);

nDataLen = (int)FieldLength[nCol];

pDataOut = (char)(m_ItemMySqlRow[nCol]);

return true;

}

else

{

return false;

}

}

像通常一样查询后,得到结果集,然后得到第nCol列结果,返回二进制指针结果和二进制长度。返回后必须立马处理或者存储一份。否则mysql将数据销毁,指针所指数据则无效了。

存二进制数据:

mysql语句接受的sql语句都是string,以'\0'结尾的。如果冒然插入二进制数据到sql语句中,要么报错,要么存储错误。此处可以通过mysql提供的函数将数据转换一下即可。

char CMySqlAccess::ConvertBinaryToString(char pBinaryData,int nLen)

{

static char s_BinaryData[10240];

mysql_real_escape_string(m_pMySqlConn,s_BinaryData,pBinaryData,nLen);

return s_BinaryData;

}

上面这个函数只能单线程使用啊,将一块二进制数据转换为mysql可识别的string数据。这样就直接可以通过mysql的sql语句insert,update来对blob数据进行更新和插入了,sql语句用法不变。

不同的变易语言有不同的截取字符串的函数,错误类型也不相同,以下提供的是数据库字符串截取问题

在varchar(1000)上报错字符串截断,于是改为varchar(8000)仍然报错。

通过对该条语句插入的记录进行多次修改并测试,发现“记录超长”错误不是某个字段长度超过了定义的字段类型长度,而是该条记录的所有字段的值加在一起超过了一定长度。

这个“长度”是由数据库的页大小决定的,即达梦数据库中一行记录的所有字段的实际长度的和不能超过页大小的一半

在达梦数据库中,一行记录所有字段长度累加不能大于下表:

解决方法

目前测试过的解决方法如下:

重新创建数据库,将数据库的页大小设为“16K”或以上;

达梦数据页大小在创建数据库时设置,设定之后不能更改。

将字段类型改为TEXT、CLOB、BLOB等大字段。

在数据库文件中,TEXT、CLOB、BLOB等大字段采用和普通字段不同的、特殊的存储方式,不占用该条记录的页大小。

以上就是关于在PowerBuilder中 *** 作BLOB数据的技巧[2]全部的内容,包括:在PowerBuilder中 *** 作BLOB数据的技巧[2]、关于mysql中的blob字段、截取字符串函数显示类型错误等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10186333.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存