這種動態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則應該對明文進行處理。。。呵呵。。
------解決方案--------------------------------------------------------