不会吧 delphi 6.0 还会犯这么低级的错误(adocommand 不支持中文) (100分)

  • 主题发起人 主题发起人 chshanghai
  • 开始时间 开始时间
我的意思是肯定有办法实现的,不好意思,让你误会了
 
to 花 儿
没有关系, 应该是我不好意思 误会你了. 谢了
 
adocommand我很少用的!
你换成其他控件的不成吗?

》如果只有一句 用参数是可以的
》但如果比较复一点的 则delphi 在提交参数是如果参数中有中文 但只能提交 到第一个汉字其它的没有了
复杂到什么样子?
我按照你的“简单”的测试了一下,没有问题的!
按照推理逻辑,既然“简单”的通过了,在正确代码的原则下,“复杂”的也应该没有问题!

另 , 不知道 GanQuan 老兄 用了什么“复杂”的方法测试出了问题??
 
to
>>我按照你的“简单”的测试了一下,没有问题的!
>>按照推理逻辑,既然“简单”的通过了,在正确代码的原则下,“复杂”的也应该没有问题!
以前我也是这么认为的
但现在看来不是这样的
另外我发现这不仅仅是 adocommand 的问题 adodataset 和 adoquery 也有
我怀疑是adoexpress 封装时有问题.
>>复杂到什么样子?
就是有点像 存储过程哪样 就像我上面的例了那样的就不行

难道就没有人用 delphi + ado +database 开发程序吗
应该遇到的这样的问题

 
可能与 SQL Server 用 N' 来表示 Unicode 有关.试试这样看:
commandtext:=' if (select count(*) from tb_user where username=N:vusername)>0 '
 
SORRY。正要吃饭。 匆忙中试了试。

第一种测试. 我将 params[0].Datatype 设置为了 ftVariant
params[0].Size= 10
结果如下:
exec sp_executesql N'if (select count(*) from dbo.lrryk_tbl where yhmc=@P1)>0
print ''ok''', N'@P1 sql_variant', N'刘波'

第2中测试
with adocommand1 do
begin
commandtext := ' if (select count(*) from dbo.lrryk_tbl where yhmc=:vusername)>0 ' + #13;
commandtext := commandtext + ' print ''ok'' ';
parameters.parambyname('vusername').Value := '刘波';
parameters[0].DataType := ftString;
parameters[0].Size := 10;
execute;
end;
结果:
exec sp_executesql N'if (select count(*) from dbo.lrryk_tbl where yhmc=@P1)>0
print ''ok''', N'@P1 varchar(10)', '刘波'


 
本来想走, 有办法就不走了
肚子在抗议 ...抗议无效
gf 在等待 ... 慢慢等吧
试试
 
with adocommand1 do begin
commandtext:=' if (select count(*) from tb_user where username=:vusername)>0 '+#13;
commandtext:=commandtext+'print ''ok''';
parameters.parambyname('vusername').value:='江泽民';
execute;
end;
这句,运行,提示说“语法错误或访问冲突”(汉字提示的)!

with adocommand1 do begin
commandtext:=' select count(*) from tb_user where username=:vusername '
commandtext:=commandtext+'print ''ok''';
parameters.parambyname('vusername').value:='江泽民';
execute;
end;
这句没有任何错误的!
我的环境Win2k + D6 +MSSQL_SERVER2k,当然我没有用“江泽民”,我用的是“克林顿”!
 
to 王寒松 不好意思打扰你吃饭了
不过你比我好多了 ..
第一种方法:
with adocommand1 do
begin
commandtext:=' if (select count(*) from tb_user where username=:vusername)>0 '+#13;
commandtext:=commandtext+'print ''ceng''';
parameters.parambyname('vusername').value:='江泽民';
parameters[0].Size:=10;
execute;
end;
profile 中为:
sp_executesql N' if (select count(*) from tb_user where username=@P1)>0
print ''ceng''', N'@P1 varchar(10)', '江泽民ER0'

用第二种方法:
with adocommand1 do
begin
commandtext:=' if (select count(*) from tb_user where username=:vusername)>0 '+#13;
commandtext:=commandtext+'print ''ceng''';
parameters.parambyname('vusername').value:='江泽民';
parameters[0].DataType := ftString;
execute;
end;
profile 中
sp_executesql N' if (select count(*) from tb_user where username=@P1)>0
print ''ceng''', N'@P1 varchar(3)', '江'

你用的是delphi6 还是delphi5
 
我也等待结果!
 
to yysun
>>可能与 SQL Server 用 N' 来表示 Unicode 有关.试试这样看:
>>commandtext:=' if (select count(*) from tb_user where username=N:vusername)>0 '
你这样子根本不能编译 说列名N@p1 不存在
在你的启发下变通一下
with adocommand1 do
begin
commandtext:=' if (select count(*) from tb_user where username=''N''+:vusername)>0 '+#13;
commandtext:=commandtext+'print ''ceng''';
parameters.parambyname('vusername').value:='江泽民';
// parameters[0].Size:=10;
execute;
end;
则profile 上为
sp_executesql N' if (select count(*) from tb_user where username=@P1)>0
print ''ceng''', N'@P1 varchar(3)', '江'


 
看来今晚是空手而归了
归去,归去
不知gf 在不在.
chshanghai 飘然而去.....
 
我的环境。
win2000 adv server sp2
SQL2000 SP1
DELPHI5 with update2 and Adoupdate升级包

另外我的 MDAC 也升级到了 2.7中文最新版
建议你: 到微软站点 升级MDAC
使用SQL2000中文版。 SQL7因为没有中文版,所以我不敢肯定是否问题出在
安装时的语言选择上
 
看来adoexpress都有这个问题
本来还想回去试adoproc 呢没想到临走前看到以下一贴: 看来是adoexpress有问题
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1046502

问题:奇怪的問題 ( 积分:100, 回复:9, 阅读:86 )
分类:MIDAS / DCOM ( 版主:Chenlili, 房客 )
来自:xjc_first, 时间:2002-4-16 10:24:00, ID:1046502 [显示:小字体 | 大字体]
Delph6
三層結構中,中間層用TAdoStoredProc,有一String型參數@style_no.
客戶端調用時,給參數賦值為:'編號',但在SQL profiler中跟蹤時,參數值變成了:'編'
也就是說,凡是中文參數時,都會截去后面一半;如參數為字母時又不會,真是怪哉.

看来adoexpress都有这个问题
 
to 王寒松
sql server 安装时是没有问题的语言选择也是对的
你说的 MDAC 的问题 有可能 我试试
不过 你如用的是d5 应是对的
因为我以前也是用d5的 也曾写过类似的代码 没有发现问题
可能是d6有的

不知还有哪位大侠用的是d5的帮我试试 我这边没有d5 告诉我结果,thanks

 
此问题的原因我已找到 但如何解决我 还没有找到最好的方法(我正在试)
这是adoexpress本身的问题 但不一定是bug

我还在发现的方法是:
var str:string;
begin
str:='your string'+#0 //这里一定要加 #0
//在参数的代码中要写成如下的格式
.....
parambyname('param').datatype:=ftstring;
parambyname('param').size:=length(str); //这名必须要有
......................
end;

另外谁对 ado activeX 比较熟悉 我想请教几个问题
(//精通 Vb ,或 asp 的也可以 )


 
试试将parameters.parambyname('vusername').value:='江泽民';改为
parameters.parambyname('vusername').Asstring:=''''+'江泽民'+'''';
 
to :寻找
parameters.parambyname('vusername').Asstring:=''''+'江泽民'+'''';

ado 的parameters 根本就不可以这样写 你自已用过 没有
 
try to use BDE
 
to kouchun
老兄你真是语不惊人始不休
 
后退
顶部