//資料庫資料加密 Schema 資料庫名稱,Name:要查詢的表的名稱
procedure TOperationDM.DataOperations(Schema:String;Name:String);
var
i,j,k:Integer;
strSql,allSql:String;
counts:Integer;
list :TStringList;
strType:Sting;
begin
list :=TStringList.Create;
OperationADOCon.Close;
OperationADOCon.ConnectionString:= TOper.readParamdb;
OperationADOCon.Open;
try
with ADOQuery1 do
begin
strSql := 'SELECT DATA_TYPE FROM information_schema.`COLUMNS`'
+'WHERE TABLE_SCHEMA LIKE "'+Schema+'" '
+'AND TABLE_NAME LIKE "'+Name+'"';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
sql.Add(strSql);
ADOQuery1.Open;
counts := ADOQuery1.RecordCount;
if(counts >0) then
begin
for i:=0 to counts-1 do
begin
list.Add(ADOQuery1.fieldbyName('DATA_TYPE').AsString);
end;
for j:=0 to list.Count-1 do
begin
strType := list[j];
if (Trim(strType) <> 'int') then //判定,除了int型別的資料以外其他型別的資料全部加密
begin
//將資料型別所對應的資料進行加密操作(問題是這個對應的值如何獲得呢,請高手賜教,本人剛接觸delphi還有很多東西高步清楚的)
end;
end;
end;
end;
finally
OperationADOCon.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.Close;
end;
end;
uj5u.com熱心網友回復:
淚奔了,請高手指教uj5u.com熱心網友回復:
既然用ADO,那就直接用TADOQuery去
SELECT 表名的全部欄位
用TField取型別和值即可。
如 Fields[0].DataType 和 Fields[0].AsString (或 As 其它型別)
你會發現ADO.Connection提供很多與Schema有關的資訊。
uj5u.com熱心網友回復:
謝謝,我試試,能不能解決uj5u.com熱心網友回復:
下面的那部分呼叫加密的程式基本完成,可是到那個得到資料型別,列名,那部分查詢出來10條資料,可是當我取值的時候,程式會把第一條重復10次保存到list中,什么原因,我之前都是這么寫的,for i:=0 to counts-1 do
begin
list.Add(ADOQuery1.fieldbyName('DATA_TYPE').AsString+‘=’+ADOQuery1.fieldByName('column_name').AsString);
end;
這里的counts就是我ADOQuery1.RecordCount值
uj5u.com熱心網友回復:
加密后存盤,加密方法很多用密鑰自定義規則,或者用MD5等等已經有成熟案例的加密方法,至于顯示時要不要加密看需求,只加密關鍵欄位,犯不著什么東西都加密,累不累,有沒有必要?重復10次保存到list?沒看到你有Next,移動指標了嗎?
uj5u.com熱心網友回復:
寫了next就可以了,我也是剛學習的,還多東西一時間注意不到uj5u.com熱心網友回復:
高手,問你一個問題,例如我現在有個list,list中的資料是 ‘001’,‘003’,‘001’,‘005’我要怎么給這個list進行分組uj5u.com熱心網友回復:
要么查詢出資料后放到list再去寫分組的演算法,要么在資料查詢的時候在SQL里做分組(這種方法更方便快捷),再插入listuj5u.com熱心網友回復:
恩不能寫個案例出來,剛剛弄這個delphi,好多地方有點轉不過彎來uj5u.com熱心網友回復:
用 TStringList,它有個引數是 Objects,那你就可以把分組后的內容放在第二層。比如你有這樣的資料:
'001', '000012'
'002', '000063'
'001', '000015'
你想用第一個Field去分組,也就是
'001' 下有一個List內容為 '000012' 和 '000015'
'002' 下有一個List內容為 '000063'
那就這么寫:
1.找到001,取出它內部的List,插入'000012'
2.沒找到001,新增一個List,插入'000012'和'001'一起插入到分組List
比如分組List叫 GList: TStringList;
內容List叫 List: TStringList;
則上面代碼就是
Str1:='001';
Str2:='000012';
......
Index:=GList.IndexOf(Str1);
if Index>=0 then //找到了
TStringList(GList.Objects[Index]).Add(Str2)
else //沒找到
begin
List:=TStringList.create;
List.Add(Str2);
GList.AddObject(Str1, List);
end;
不知道這樣子是不是你所謂分組的意思?
如果不是,拜托你把分組的意思講明白。
uj5u.com熱心網友回復:
我現在這個東西已經解決,謝謝!還有個問題,就是list中的資料為list{'001=2','002=3','001=4','003=6'}
等號前面是編號,等號后面是得分,delphi 中TStringList是可以這么寫的
我想得到一個新的list的list{'001=6','002=3','003=6'},意思就是如果編號一樣的則將得分相加,不相等的直接將這一項存在新的list中
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
高手們,你們都什么時候出沒的,神龍見首不見尾的uj5u.com熱心網友回復:
沒有必要搞list的list,每次做動作之前回圈判斷一下你的list不就行了,有則相加,沒有則插進去uj5u.com熱心網友回復:
能寫個小例子出來嗎轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/123411.html
標籤:數據庫相關
上一篇:socket 接收不定長資料包
