为什么用VB6把汉字插入到SQLSERVER中时老是出错?
我用ADO、RDO将汉字插入SQLSERVER表格中时老是出现错误,每个汉字都以一个问号?,而同一个ODBC连接用VFP做同样的插入汉字时则不会出现。
我重装了系统后就装VB,刚开始一段时间不会出现此问题,但随着其他软件的加入就毛病出来了,我该怎么办? 而且用strconv做转换后也只有部分汉字可以正确插入。请各位高手解答,不胜感激!
我重装了系统后就装VB,刚开始一段时间不会出现此问题,但随着其他软件的加入就毛病出来了,我该怎么办? 而且用strconv做转换后也只有部分汉字可以正确插入。请各位高手解答,不胜感激!
...全文
请发表友善的回复…
发表回复
chenxixian 2000-08-20
- 打赏
- 举报
我不久就遇到这个问题,到“问专家”(http://www4.netease.com/~askpro/index.html)处觅得答案!
其中 罗 波 的 意 见 和 Navy_Chen的 意 见 我试过,可行!
从SQLServer数据库取来的数据中汉字信息全部是乱码
所属类别:
Visual Basic-数据库
编号:QA002096
建立日期: 1999年11月25日 最后修改日期:2000年5月14日
wxh:
操 作 系 统 : win98
工 具 : vb6.0
问 题 : 我 在 vb中 利 用 ado控 件 访 问 多 台 远 程 服 务 器 SQLServer数 据 库 , 发 现 从 其 中 个 别 服 务 器 取 来 的 数 据 中 汉 字 信 息 全 部 是 乱 码 , 不 知 原 因 何 在 ? 是 vb的 问 题 还 是 SQLServer的 问 题 ? 请 帮 忙 解 决 , 谢 谢 !
回答:
Richard的 意 见 :
我 以 前 也 碰 到 过 ,是 由 于 各 SQL Server 安 装 时 选 择 的 语 言 不 一 致 引 起 !请 重 新 Setup 试 一 试 !
JunW的 意 见 :
应 该 是 SQL Server的 版 本 不 兼 容 引 起 的 ,我 曾 经 试 过 ,服 务 器 用 6.5,后 来 装 了 office2000后 ,读 出 数 据 全 乱 了 ,我 的 解 决 方 法 是 将 Sql 6.5的 客 户 端 在 客 户 机 上 Setup一 下 或 将 6.5版 本 的 sqlsvr32.dll 拷 到 客 户 机 上 windos\system目 录 下 覆 盖 原 有 的 文 件 即 可 。
Karter的 意 见 :
应 该 是 数 据 传 送 时 屏 蔽 了 高 位 , 据 说 使 用 VB6 的 SP2就 没 事 ( 不 要 SP3 ) , 或 者 换 一 下 ODBC 的 驱 动 程 序 。
Ariel的 意 见 :
根 据 前 提 的 不 同 , 乱 码 的 出 现 存 在 两 种 情 况 ,
1、 SQL SERVER V6.5
正 象 Karter所 说 , 与 VB的 SP有 关 。 SQL SERVER与 应 用 程 序 中 有 个 接 口 , 如 果 你 的 VB用 的 ADO是 V2, 则 它 的 ODBC接 口 与 SQL方 相 同 , 但 如 果 你 装 了 SP3, 则 ADO升 为 V2.1, 与 SQL的 接 口 驱 动 程 序 想 比 , 版 本 更 高 , 导 致 VB与 SQL处 理 不 同 , 从 而 产 生 乱 码 。 解 决 方 法 : 或 者 你 在 CLIENT方 装 更 新 版 本 的 ODBC, 或 者 升 级 SQL SERVER。 还 有 一 个 方 法 可 以 试 试 : 利 用 OFFICE97光 盘 中 的 有 关 文 件 , 在 该 CD上 的 VALUEPACK目 录 下 , 将 ODBC*.DLL( 应 有 4个 ) 复 制 到 WINDOWS的 SYSTEM目 录 下 , 即 可 。 但 我 只 做 初 步 试 验 , 不 敢 保 证 一 点 没 有 其 它 问 题 会 发 生 。
2、 SQL SERVER V7.0
在 SQL 7中 有 一 项 自 动 翻 译 选 项 , 它 无 法 识 别 类 似 中 文 的 双 字 节 信 息 ( 不 包 括 UNICODE字 符 ) , 因 此 必 须 将 该 选 项 DISABLE, 除 非 SQL SERVER在 安 装 时 即 已 选 择 中 文 字 符 集 。
杨 威 利 的 意 见 :
我 在 WINDOWS 3.1下 读 取 库 时 也 遇 到 过 这 种 情 况 , 原 因 为 SQL服 务 器 客 户 端 的 字 符 集 被 设 为 ISO_1而 非 通 常 的 CP850可 以 检 查 一 下 该 配 置 。
罗 波 的 意 见 :
ADO采 用 如 下 联 接 方 式 :
cn.Open "Provider = SQLOLEDB; Data Source= " & SQLServerName & "; Auto Translate=false; User Id=" & SQLUserName & ";Password=" & SQLUserPass & ";"
注 意 其 中 : Auto Translate=false; 你 不 妨 试 一 试 。
Navy_Chen的 意 见 :
本 人 曾 碰 到 类 似 情 况 ,vb5 使 用 SQL7.0的 ODBC驱 动 ,连 接 SQL6.5 数 据 库 。 若 将 Perform translation for charcter data (执 行 字 符 串 转 换 )属 性 设 为 Enabled (或 选 中 ),则 出 现 中 文 变 为 乱 码 情 况 。 在 odbc中 设 置 该 属 性 即 可 。
lg的 意 见 :
我 想 上 面 的 人 已 经 解 释 了 很 多 , 我 比 较 认 同 的 是 sp问 题 和 office2000的 问 题 。 因 为 我 装 Win98第 一 版 和 vb6(无 sp)就 不 出 先 乱 码 。 如 果 安 装 其 他 新 版 软 件 再 看 他 出 现 什 么 问 题 。
此问题由Richard等回答。
其中 罗 波 的 意 见 和 Navy_Chen的 意 见 我试过,可行!
从SQLServer数据库取来的数据中汉字信息全部是乱码
所属类别:
Visual Basic-数据库
编号:QA002096
建立日期: 1999年11月25日 最后修改日期:2000年5月14日
wxh:
操 作 系 统 : win98
工 具 : vb6.0
问 题 : 我 在 vb中 利 用 ado控 件 访 问 多 台 远 程 服 务 器 SQLServer数 据 库 , 发 现 从 其 中 个 别 服 务 器 取 来 的 数 据 中 汉 字 信 息 全 部 是 乱 码 , 不 知 原 因 何 在 ? 是 vb的 问 题 还 是 SQLServer的 问 题 ? 请 帮 忙 解 决 , 谢 谢 !
回答:
Richard的 意 见 :
我 以 前 也 碰 到 过 ,是 由 于 各 SQL Server 安 装 时 选 择 的 语 言 不 一 致 引 起 !请 重 新 Setup 试 一 试 !
JunW的 意 见 :
应 该 是 SQL Server的 版 本 不 兼 容 引 起 的 ,我 曾 经 试 过 ,服 务 器 用 6.5,后 来 装 了 office2000后 ,读 出 数 据 全 乱 了 ,我 的 解 决 方 法 是 将 Sql 6.5的 客 户 端 在 客 户 机 上 Setup一 下 或 将 6.5版 本 的 sqlsvr32.dll 拷 到 客 户 机 上 windos\system目 录 下 覆 盖 原 有 的 文 件 即 可 。
Karter的 意 见 :
应 该 是 数 据 传 送 时 屏 蔽 了 高 位 , 据 说 使 用 VB6 的 SP2就 没 事 ( 不 要 SP3 ) , 或 者 换 一 下 ODBC 的 驱 动 程 序 。
Ariel的 意 见 :
根 据 前 提 的 不 同 , 乱 码 的 出 现 存 在 两 种 情 况 ,
1、 SQL SERVER V6.5
正 象 Karter所 说 , 与 VB的 SP有 关 。 SQL SERVER与 应 用 程 序 中 有 个 接 口 , 如 果 你 的 VB用 的 ADO是 V2, 则 它 的 ODBC接 口 与 SQL方 相 同 , 但 如 果 你 装 了 SP3, 则 ADO升 为 V2.1, 与 SQL的 接 口 驱 动 程 序 想 比 , 版 本 更 高 , 导 致 VB与 SQL处 理 不 同 , 从 而 产 生 乱 码 。 解 决 方 法 : 或 者 你 在 CLIENT方 装 更 新 版 本 的 ODBC, 或 者 升 级 SQL SERVER。 还 有 一 个 方 法 可 以 试 试 : 利 用 OFFICE97光 盘 中 的 有 关 文 件 , 在 该 CD上 的 VALUEPACK目 录 下 , 将 ODBC*.DLL( 应 有 4个 ) 复 制 到 WINDOWS的 SYSTEM目 录 下 , 即 可 。 但 我 只 做 初 步 试 验 , 不 敢 保 证 一 点 没 有 其 它 问 题 会 发 生 。
2、 SQL SERVER V7.0
在 SQL 7中 有 一 项 自 动 翻 译 选 项 , 它 无 法 识 别 类 似 中 文 的 双 字 节 信 息 ( 不 包 括 UNICODE字 符 ) , 因 此 必 须 将 该 选 项 DISABLE, 除 非 SQL SERVER在 安 装 时 即 已 选 择 中 文 字 符 集 。
杨 威 利 的 意 见 :
我 在 WINDOWS 3.1下 读 取 库 时 也 遇 到 过 这 种 情 况 , 原 因 为 SQL服 务 器 客 户 端 的 字 符 集 被 设 为 ISO_1而 非 通 常 的 CP850可 以 检 查 一 下 该 配 置 。
罗 波 的 意 见 :
ADO采 用 如 下 联 接 方 式 :
cn.Open "Provider = SQLOLEDB; Data Source= " & SQLServerName & "; Auto Translate=false; User Id=" & SQLUserName & ";Password=" & SQLUserPass & ";"
注 意 其 中 : Auto Translate=false; 你 不 妨 试 一 试 。
Navy_Chen的 意 见 :
本 人 曾 碰 到 类 似 情 况 ,vb5 使 用 SQL7.0的 ODBC驱 动 ,连 接 SQL6.5 数 据 库 。 若 将 Perform translation for charcter data (执 行 字 符 串 转 换 )属 性 设 为 Enabled (或 选 中 ),则 出 现 中 文 变 为 乱 码 情 况 。 在 odbc中 设 置 该 属 性 即 可 。
lg的 意 见 :
我 想 上 面 的 人 已 经 解 释 了 很 多 , 我 比 较 认 同 的 是 sp问 题 和 office2000的 问 题 。 因 为 我 装 Win98第 一 版 和 vb6(无 sp)就 不 出 先 乱 码 。 如 果 安 装 其 他 新 版 软 件 再 看 他 出 现 什 么 问 题 。
此问题由Richard等回答。
gx_sunny 2000-06-30
- 打赏
- 举报
liyang说的对,我以前也遇见过相同的问题,就是字符集的问题,SQL SERVER要在安装后再改字符集有点麻烦,我建议重装
liyang 2000-06-30
- 打赏
- 举报
你的系统和我的一模一样,可能就是字符集不一样。我的可以。
masterkey 2000-06-30
- 打赏
- 举报
前天我重装了一个系统:WINDOWS2000 Advance Server,然后装OFFICE2000、Visual Studio6, 最后是Visual Studio 6的SP3, 可我现在还是不行啊! 现在是ADO的ADDNEW可以,其他的都不行! 救救我吧!
Limu 2000-06-23
- 打赏
- 举报
I think you must reinstall your operating system first.and then SQL Server 7.0,and then VB 6.0.If your operating system is traditional windows(Big5 Code) then you must install SQL Server 7.0 for traditional windows.
masterkey 2000-06-22
- 打赏
- 举报
我是用SQL 7(Language:English, Code Page:CP 1252),我想服务器端和DSN 连接应该是没有问题的,因为同一个DSN连接,我用VFP做插入和修改时都不会出现错误(
sqlh=sqlconnect('RSM','sa','')
mm=sqle(sqlh,'insert into ......') 都可正确处理汉字。
VB6的DAO3.5时也能正确处理汉字(但3。6就不行了),第一次执行ADO的ADDNEW,UPDATE 时也能正确处理,但第二次就错了,之后也不行(全部把表中的资料删除后第一次可以,之后不行)。 用ADO、RDO的SQL语句操作时,都不能正确处理。我的头都大了,到微软技术支持,他们也没能放出个“响”屁!
帮我这个忙,我给你们200分都行!
sqlh=sqlconnect('RSM','sa','')
mm=sqle(sqlh,'insert into ......') 都可正确处理汉字。
VB6的DAO3.5时也能正确处理汉字(但3。6就不行了),第一次执行ADO的ADDNEW,UPDATE 时也能正确处理,但第二次就错了,之后也不行(全部把表中的资料删除后第一次可以,之后不行)。 用ADO、RDO的SQL语句操作时,都不能正确处理。我的头都大了,到微软技术支持,他们也没能放出个“响”屁!
帮我这个忙,我给你们200分都行!
liyang 2000-06-22
- 打赏
- 举报
首先,你的Sql Server版本。6.5 SP4 还是 7
1.注意你的Sql Servre中的语言集,最好装成936(中文),缺省好像是西欧语言集
如果不是936,嘿嘿,你比较悲惨,但不是没有办法
一、在Enterprise Manager中,右键点Sql Server,选属性,再找第二个tab(名字忘了),找到ansi->oem,如果打钩就去掉,如果没打钩就打钩。
二、如果你使用ODBC连,再查找ODBC数据源中的相应DSN,找属性,看ansi->oem.
三、你在vb中使用sql语句直接操作,还是使用addnew、update等ado方法,直接使用sql语言好像可以,这关系到sql server中打开数据源的方式,是直接打开,还是使用cursor_open
1.注意你的Sql Servre中的语言集,最好装成936(中文),缺省好像是西欧语言集
如果不是936,嘿嘿,你比较悲惨,但不是没有办法
一、在Enterprise Manager中,右键点Sql Server,选属性,再找第二个tab(名字忘了),找到ansi->oem,如果打钩就去掉,如果没打钩就打钩。
二、如果你使用ODBC连,再查找ODBC数据源中的相应DSN,找属性,看ansi->oem.
三、你在vb中使用sql语句直接操作,还是使用addnew、update等ado方法,直接使用sql语言好像可以,这关系到sql server中打开数据源的方式,是直接打开,还是使用cursor_open
xguoz 2000-06-22
- 打赏
- 举报
试试在按照VB或按照完毕后,在VC安装选项当中将UNICODE相关内容选中(藏得比较深,还要找找)。另外,最好使用VS 6 SP3版本来加强部分功能。应该没问题。