我在做数据库程序是遇到这么一个问题,是关于小语种的问题,还望各位高手大力协助
应用的pb是11.5,数据库是 sql server2005 sp3
我现在在做关于韩语的一个程序,在数据库中,我把该字段的类型设为nvarchar(50),设好后在该字段中存储任何语种的字都没有问题,包括多种语种混合,如韩语+泰语+越南语+中文+英文。也没有问题。
在pb11.5中,我创建一个关于该表的数据窗口,然后预览其中的内容,也没有问题。也就是该字段任何语种都能显示,包括多种语种的混合。也没有问题。但是我新建一行,然后在该列中写入文字的时候却出现了问题。存储大语种,如中文、英文、日文、英文都没有问题。但是在一些小语种上却出现了问题。比如在存储韩文、越南文、泰文是存进去的是?,存入后再检索出来后显示的也是? 。不知为何,还望各位给予帮助。
在SQL语句中存储小语种是 update table set col=N'value' where col='条件',也即在要存的值前面加 N,小语种的文字才能够正常存入,如果不加的话存入的就是乱码。
在测试pb的数据窗口如何存储小语种是偶尔发现了一个问题。就是当pb的数据窗口update失败时的提示窗口,上面显示的失败原因以及失败的sql 语句。图贴不上来,大家看错误提示语句:
Row changed between retrieve and update.
No changes made to database.
UPDATE table1 SET name = '안전지역Không 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 = '안전지역Không có chi ' WHERE code = 22
保存是肯定失败的
UPDATE table1 SET name = N'안전지역Không 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!
sqlserver2008怎么下载
//MessageBox('SQL语句',sqlsyntax)
ls_sql=sqlsyntax
start_pos = Pos(ls_sql,'=')
DO WHILE start_pos > 0
ls_sql = Replace(ls_sql, start_pos, 2, '= N')
start_pos = Pos(ls_sql,'=',start_pos+Len('= N'))        LOOP
dw_1.setsqlpreview(ls_sql)
/
/MessageBox('SQL语句',ls_sql)
end choose
【附加公文一篇,不需要的朋友可以下载后编辑删除,谢谢】
关于进一步加快精准扶贫工作意见
为认真贯彻落实省委、市委扶贫工作文件精神,根据《关于扎实推进扶贫攻坚工作的实施意见》和《关于进一步加快精准扶贫工作的意见》文件精神,结合我乡实际情况,经乡党委、政府研究确定,特提出如下意见:
一、工作目标
总体目标:“立下愚公志,打好攻坚战”,从今年起决战三年,实现全乡基本消除农村绝对贫困现象,实现有劳动能力的扶贫对象全面脱贫、无劳动能力的扶贫对象全面保障,不让一个贫困众在全面建成小康社会进程中掉队。
总体要求:贫困村农村居民人均可支配收入年均增幅高于全县平均水平5个百分点以上,遏制收入差距扩大趋势和贫困代际传递;贫困村基本公共服务主要指标接近全县平均水平;实现扶贫对象“两不愁三保障”(即:不愁吃、不愁穿,保障其义务教育、基本医疗和住房)。
年度任务:2015-2017年全乡共减少农村贫困人口844人,贫困发生率降至3%以下。
二、精准识别
(一)核准对象。对已经建档立卡的贫困户,以收入为依据再一次进行核实,逐村逐户摸底排查和精确复核,核实后的名单要进行张榜公示,对不符合政策条件的坚决予以排除,确保扶贫对象的真实性、精准度。建立精准识别责任承诺制,上报立卡的贫困户登记表必须经村小组长、挂组村干部、挂点乡干部、乡领导签字确认,并作出承诺,如扶贫对象不符合政策条件愿承担行政和法律责任,确保贫困户识别精准。
(二)分类扶持。通过精准识别建档立卡的贫困户分为黄卡户、红卡户和蓝卡户三类,第一类为黄卡户,是指有劳动能力,家庭经济收入在贫困线边缘的贫困户;第二类为红卡户,是指有一定的劳动能力,家庭贫困程度比较深的贫困户;第三类为蓝卡户,是指年老体弱或因病因残丧失劳动能力的贫困户和五保户。优先扶持黄卡户,集中攻坚扶持红卡户脱贫,对蓝卡户则通过保障扶贫来保障其基本生活。
(三)挂图作业。根据贫困户的实际情况,分三年制定脱贫规划。乡里将根据各村情况对每年精准脱贫任务落实到户到人,建立台账,并用图表标注清楚,挂图作业,脱贫一户销号一户,做到“贫困在库,脱贫出库”。
三、精准施策

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。