在PB中显示保存Unicode.doc_第1页
在PB中显示保存Unicode.doc_第2页
在PB中显示保存Unicode.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

我在做数据库程序是遇到这么一个问题,是关于小语种的问题,还望各位高手大力协助! 应用的pb是11.5,数据库是 sql server2005 sp3 我现在在做关于韩语的一个程序,在数据库中,我把该字段的类型设为nvarchar(50),设好后在该字段中存储任何语种的字都没有问题,包括多种语种混合,如韩语+泰语+越南语+中文+英文。也没有问题。 在pb11.5中,我创建一个关于该表的数据窗口,然后预览其中的内容,也没有问题。也就是该字段任何语种都能显示,包括多种语种的混合。也没有问题。但是我新建一行,然后在该列中写入文字的时候却出现了问题。存储大语种,如中文、英文、日文、英文都没有问题。但是在一些小语种上却出现了问题。比如在存储韩文、越南文、泰文是存进去的是?,存入后再检索出来后显示的也是? 。不知为何,还望各位给予帮助。 在SQL语句中存储小语种是 update table set col=Nvalue where col=条件,也即在要存的值前面加 N,小语种的文字才能够正常存入,如果不加的话存入的就是乱码。 在测试pb的数据窗口如何存储小语种是偶尔发现了一个问题。就是当pb的数据窗口update失败时的提示窗口,上面显示的失败原因以及失败的sql 语句。图贴不上来,大家看错误提示语句: Row changed between retrieve and update. No changes made to database. UPDATE table1 SET name = Khng c chi WHERE code = 22 AND name = AND language = pb 这是我想到一个方法,如果能把数据窗口的insert,update语句给提取出来,修改一下,也就是在值前面加N,然后再写回去,这样不久实现了小语种在数据窗口中的存储了吗? 但是pb有dw.getselect可以取出数据窗口的sql,有什么办法能够取出数据窗口的insert,update语句呢? 另外,如果pb用odbc连接数据库时,在以上的操作中,数据窗口可以直接存储小语种,但是以其它方式比如ADO连接数据库是却不能够在数据窗口直接存储小语种,为什么呢? 欢迎大家跟帖 这个问题第1个回答:在内地使用的,没有这么多要求. 既然ODBC能用,就用ODBC吧,况且ODBC不用安装专用的接口驱动. 这个问题第2个回答:菜单-rows-update properties- where clause for update/delete 改为Key Columns即可 这个问题第3个回答:三楼误会我的意思了,我的意思不是说保存不上的问题,而是怎么保存多国小语种语言的问题。你说的是不能保存的问题 这个问题第4个回答:修改DW的SQLPreview事件中获取DB级语句后return2跳过他自身的更新,再编写代码格式化成你要想要的效果人为提交。 这个问题第5个回答:关注. 这个问题第6个回答:谢谢楼上的回复,我想能不能有什么办法,在dw update时,就像wangxun0997 说的那样在dw update更新之前,取得dw的update 的sql语句,然后修改该sql 语句,在修改之后把sql语句写回到dw中,然后在执行dw的update,就像我在该帖子上说的,在update语句的值之前加上N,来实现小语种的保存 这个问题第7个回答:可以考虑改变一下连接的方式看看,比如odbc 这个问题第8个回答:谢谢各位,这个问题在各位的帮助和我的思考下终于解决了。此后小语种可以在pb上自由的保存了! 首先说环境,我的数据库是sqlserver2005,在sqlserver2000也应该能实现,在sqlserver2008上没有测试,应该没有问题。只用把需要保存小语种的列的类型设为nvarchar,nchar,ntext等即可 接口:odbc最简单,不用做任何额外的操作,但是用其它连接接口如ado,ole等就需要进行以下的操作才能在pb的数据窗口中保存小语种。 我用的是pb11.5,应该是在pb9以上是没有问题的,具体没有测试,各位如果有兴趣可以试试 解决方法:利用sql语句,在sql语句中如果需要unicode保存的话就需要在要保存的内容前加N,odbc接口好像是自动加N的(猜测),但是其它接口不是。 UPDATE table1 SET name = Khng c chi WHERE code = 22 保存是肯定失败的 UPDATE table1 SET name = NKhng c chi WHERE code = 22 保存是成功的,原因就在于加N了。 方法:在datawindow的sqlpreview事件中添加代码,修改datawindow保存数据窗口中的数据的sql语句。 datawindow的sqlpreview事件是数据窗口每保存一条记录执行一次 我做了一个通用的,大家可以看看,免费共享 string ls_sql int start_pos=1 choose case sqltype case PreviewSelect! case PreviewInsert! /MessageBox(SQL语句,sqlsyntax) ls_sql=sqlsyntax start_pos = Pos(ls_sql,) DO WHILE start_pos 0 ls_sql = Replace(ls_sql, start_pos, 1, N) start_pos = Pos(ls_sql,start_pos+2) start_pos = Pos(ls_sql,start_pos+2) LOOP dw_1.setsqlpreview(ls_sql) /MessageBox(SQL语句,sqlsyntax+ls_sql) case PreviewDelete! case PreviewUpdate! /MessageBox(SQL语句,sqlsyntax) ls_sql=sqlsyntax start_pos = Pos(ls_sql,=) DO WHILE start_pos 0 ls_sql = Replace(ls_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论