這種動(dòng)態(tài)sql可以執(zhí)行嗎?其中有個(gè)函數(shù)要對(duì)列值進(jìn)行操作
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是在程序中定義的一個(gè)函數(shù),md5jiami1是表中的一列,這樣寫(xiě)無(wú)法正確執(zhí)行,如何修改才能正確執(zhí)行?問(wèn)題就出在MDString是一個(gè)程序中的函數(shù),sqlserver無(wú)法識(shí)別。
------解決方案--------------------------------------------------------建立個(gè)數(shù)據(jù)窗口吧
select mingwen from md5info ;
dw_1.setfilter("MDString(md5jiami1 + '"+sle_1.text+"',len(md5jiami1 + '"+sle_1.text+"'))='"+a+"'")
dw_1.retrieve()
------解決方案--------------------------------------------------------嘗試用存儲(chǔ)過(guò)程實(shí)現(xiàn)。
------解決方案--------------------------------------------------------第一: 游標(biāo) 這東西 盡量 少用 無(wú)論在 pb里面還是 數(shù)據(jù)庫(kù)里面
第二: 應(yīng)該 從數(shù)據(jù)庫(kù)里面查詢 變形后的密碼字段。。而不是現(xiàn)場(chǎng)計(jì)算。。
一般是
保存:明文-密文-保存
查詢:查詢密文 得到 用戶
很少 像樓主這樣操作。。。性能、、可靠性 全差很多。。。
樓主既然已經(jīng)知道 pb的函數(shù) 在 sql 里面 無(wú)法執(zhí)行。。那還要 繼續(xù) 這樣做 。。為啥??呵呵
------解決方案--------------------------------------------------------
------解決方案--------------------------------------------------------再次讀了下樓主的帖子,發(fā)現(xiàn) 樓主 目標(biāo)好像是從一個(gè)很大的用戶表中查找 密碼是 指定 值(:a)的用戶來(lái)。。。而算法代碼在dll中,叫 【MDString】 函數(shù)
如果 MDString 的算法可以在 sql中實(shí)現(xiàn),那么在sql中 增加 函數(shù) MDString ,就可以在sql語(yǔ)句中直接調(diào)用了,
否則。。簡(jiǎn)單來(lái)說(shuō)有2種方式解決此問(wèn)題
1 讀取所有數(shù)據(jù),然后 全部用MDString計(jì)算下,然后將計(jì)算的結(jié)果保存到 md5info 表里面(可以增加一個(gè)【新密文】字段)
2 讀取所有數(shù)據(jù),然后 就地計(jì)算 MDString,然后 立刻判斷是否符合條件
可以利用 yejihui9527 的回復(fù)做少量修改就可以使用了
string ls_string
string ls_init_a //這里保存需要核對(duì)的目標(biāo):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; 必須在 循環(huán)體內(nèi)執(zhí)行。。不能在循環(huán)體外執(zhí)行。。。否則只能執(zhí)行一次。。這好像不符合要求
ls_b = b 語(yǔ)句得到了 mingwen 字段的值,但沒(méi)有后續(xù)處理代碼,如果得到一個(gè)就可以了,那么這里必須增加退出循環(huán)的代碼 如 【exit】,如果每一個(gè)符合要求的記錄全要找出來(lái),那么這里需要增加 一個(gè)數(shù)組或者dw或則其他什么東西保存 mingwen 字段的值然后 在這段代碼結(jié)束后,再來(lái)處理這個(gè)結(jié)果集
整個(gè)代碼很奇怪。。。好像在找一個(gè)擁有相同密碼的明文??在猜密碼???仔細(xì)看了看,。,。。真在破解啊。。。呵呵。。。樓主在做壞事???嘎嘎。。。
mingwen 存放的是明文,,?
md5jiami1 存放的是md5計(jì)算后變形的密文
?MDString 是將密文解密的函數(shù)??還是 個(gè)加密函數(shù)??如果是加密函數(shù),,tb則應(yīng)該對(duì)明文進(jìn)行處理。。。呵呵。。
------解決方案--------------------------------------------------------