这种动态sql可以执行吗?其中有个函数要对列值进行操作
declare emp_cur cursor for
select mingwen
from md5info
where MDString(md5jiami1 + :sle_1.text,len(md5jiami1 + :sle_1.text))=:a;
open emp_cur;
fetch emp_cur into :b;
close emp_cur;
MDString是在程序中定义的一个函数,md5jiami1是表中的一列,这样写无法正确执行,如何修改才能正确执行?问题就出在MDString是一个程序中的函数,sqlserver无法识别。
------解决方案--------------------------------------------------------建立个数据窗口吧
select mingwen from md5info ;
dw_1.setfilter("MDString(md5jiami1 + '"+sle_1.text+"',len(md5jiami1 + '"+sle_1.text+"'))='"+a+"'")
dw_1.retrieve()
------解决方案--------------------------------------------------------尝试用存储过程实现。
------解决方案--------------------------------------------------------第一: 游标 这东西 尽量 少用 无论在 pb里面还是 数据库里面
第二: 应该 从数据库里面查询 变形后的密码字段。。而不是现场计算。。
一般是
保存:明文-密文-保存
查询:查询密文 得到 用户
很少 像楼主这样操作。。。性能、、可靠性 全差很多。。。
楼主既然已经知道 pb的函数 在 sql 里面 无法执行。。那还要 继续 这样做 。。为啥??呵呵
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------再次读了下楼主的帖子,发现 楼主 目标好像是从一个很大的用户表中查找 密码是 指定 值(:a)的用户来。。。而算法代码在dll中,叫 【MDString】 函数
如果 MDString 的算法可以在 sql中实现,那么在sql中 增加 函数 MDString ,就可以在sql语句中直接调用了,
否则。。简单来说有2种方式解决此问题
1 读取所有数据,然后 全部用MDString计算下,然后将计算的结果保存到 md5info 表里面(可以增加一个【新密文】字段)
2 读取所有数据,然后 就地计算 MDString,然后 立刻判断是否符合条件
可以利用 yejihui9527 的回复做少量修改就可以使用了
string ls_string
string ls_init_a //这里保存需要核对的目标:a
string ls_b
declare emp_cur cursor for
select md5jiami1,mingwen
from md5info;
open emp_cur;
while sqlca.sqlcode = 0
fetch emp_cur into :ls_a,:b;
ls_string = MDString(ls_a + sle_1.text,len(ls_a + sle_1.text))
if ls_string = ls_init_a then
ls_b = b
end if
loop
close emp_cur;
注意:
fetch emp_cur into :ls_a,:b; 必须在 循环体内执行。。不能在循环体外执行。。。否则只能执行一次。。这好像不符合要求
ls_b = b 语句得到了 mingwen 字段的值,但没有后续处理代码,如果得到一个就可以了,那么这里必须增加退出循环的代码 如 【exit】,如果每一个符合要求的记录全要找出来,那么这里需要增加 一个数组或者dw或则其他什么东西保存 mingwen 字段的值然后 在这段代码结束后,再来处理这个结果集
整个代码很奇怪。。。好像在找一个拥有相同密码的明文??在猜密码???仔细看了看,。,。。真在破解啊。。。呵呵。。。楼主在做坏事???嘎嘎。。。
mingwen 存放的是明文,,?
md5jiami1 存放的是md5计算后变形的密文
?MDString 是将密文解密的函数??还是 个加密函数??如果是加密函数,,tb则应该对明文进行处理。。。呵呵。。
------解决方案--------------------------------------------------------