如何搜索加密后的数据库中某个字段的关键字,然后在dbgrid中显示,谢谢! (200分)

  • 主题发起人 yong2000
  • 开始时间
Y

yong2000

Unregistered / Unconfirmed
GUEST, unregistred user!
如何搜索加密后的数据库中某个字段的关键字,然后在dbgrid中显示
 
procedure TForm1.wdb1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (field.fieldname='加密字段名称') then
begin
解密过程;
xx:=解密后的内容
wdb1.Canvas.FillRect(rect);
wdb1.Canvas.TextOut(Rect.Left,Rect.Top,xx);

end;
end;
 
张剑波,谢谢你的回答,可我要在dbgrid里显示,dbgrid里是自动显示加密后的数据的,怎么在程序里调用
dbgrid显示加密前的数据,谢谢!
 
其实张已经回答的很清楚了,不过你肯定要一个解密过程的。
 
张剑波,你好,在以下2句
wdb1.Canvas.FillRect(rect);
wdb1.Canvas.TextOut(Rect.Left,Rect.Top,xx);
怎样从数据库中每取一个字段值对应dbgrid的一个字段,我的思路是从数据库中读一行,看是不是查寻的语句
如是则先解密,再放到dbgrid中,再读下一行,再解密,可按你的方法,xx在dbgrid中全部字段都显示xx。我不
知道怎么才能把解密后的全部都写入dbgrid,也望其他高手指点。
 
在那个字段的Ongettext事件中编程。比如
procedure TForm1.Query1StringFieldGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
if Sender.AsString 已经加密 then
Text:=解密过程(Sender.AsString);
else
Text:=Sender.AsString;
end;
 
自己做个解密过程
 
看来你得另加一个boolean型的字段,用于控制是否显示加密字段。
当然在dbgrid的值你是随时你可以控制的。
 
谢谢大侠们的回答,但现在问题的关键是:
1.要的是全文搜索也就是某个字段的关键字搜索,把要查寻的字符串先加密然后查找
与在数据库中的某字段是否有该字符串,肯定不对。
2.如果先把某字段先解密,再与查寻的字符串核对,这个思路大概对的。
3.怎么再把得到的查询结果放入dbgrid,因为没用过在dbgrid上画数据,张剑波的代码我试
过了,如果写你代码中的"xx",那么数据库中每个字段都画入了"xx",能不能写上详细的代码
,能把我得到的数据分别写入相应的dbgrid的字段格中,至于加解密倒不是问题的关键了,谢谢!
 
》》1.要的是全文搜索也就是某个字段的关键字搜索,把要查寻的字符串先加密然后查找
》》与在数据库中的某字段是否有该字符串,肯定不对。
我觉得一定要这样作才行。感觉2 行不通。
3.同意forgot2002
 
我试过了,Ongettext是可以显示解密后的数据,可查询关键字时query是查没有解密前
的,怎么才能查解密后的,把关键字加密再查试过了不行,因为加密时是一个字段加密的。
 
用存储过程啊
 
》》把关键字加密再查试过了不行,因为加密时是一个字段加密的。
加密解密是一个完全相反的过程。这要你自己考虑了。不过可以在数据库中写个
函数来专门处理这个问题。
 
现在的问题就是 比如select * from abc like %要查语句%
*是加了密的数据,我不可能这样写
select 解密函数(*) from abc like %要查语句%
应该怎么办

 
那应该是列名加了密的,有些怪怪的。为什么不加密字段的内容呢?
不过这样的情况你同样可以用你的语句。加两个“+”就是了
'select '+解密函数(*)+' from abc like %要查语句%'


 
对不起,娃娃,我写错了,这样是加密列名了,我加密的是内容,解密也有函数,难道要
把数据库的加密字段一个个先解密再关键字查询吗,而且怎么查,张剑波的代码我试过不
行,能不能给个简单的示例。
 
用存储过程做解密啊

select 解密过程(*) where 解密过程(*) LIEK '%要查语句%'

前面hamsoft不也说过吗?

难道这有什么行不通的?
 
rustle,你好,可是以下sql还是调试不通,都是在JieMi这里的错误,你能帮我写下正确的吗?

strSql := 'Select ''' + JieMi + '''(field1) from tabe1 where (table1.field1 like ''%' + strSearchText + '%'') order by id'
这句错是“JieMi没有足够的参数”

strSql := 'Select ''' + JieMi(field1) + ''' from tabe1 where (table1.field1 like ''%' + strSearchText + '%'') order by id'
这句错是“不可识别的字符串field1”
 
把查询条件的字符加密再查询就行了呀!
显示的话,在ondrawcolumn这里写行不行呢?
 
payer:
试过了,不行,比如
“abcdefg"加密后为"hijklm"
而"abc"加密后为"为"xyz"
肯定找不到或找错
因为经过几种加密算法后本来的字符串完全变样了。
 
顶部