//数据库数据加密 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;
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;
直接用TADOQuery去
SELECT 表名的全部字段
用TField取类型和值即可。
如 Fields[0].DataType 和 Fields[0].AsString (或 As 其它类型)
你会发现ADO.Connection提供很多与Schema有关的信息。
for i:=0 to counts-1 do
begin
list.Add(ADOQuery1.fieldbyName('DATA_TYPE').AsString+‘=’+ADOQuery1.fieldByName('column_name').AsString);
end;这里的counts就是我ADOQuery1.RecordCount值
重复10次保存到list?没看到你有Next,移动指针了吗?
'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;不知道这样子是不是你所谓分组的意思?
如果不是,拜托你把分组的意思讲明白。
还有个问题,就是list中的数据为list{'001=2','002=3','001=4','003=6'}
等号前面是编号,等号后面是得分,delphi 中TStringList是可以这么写的
我想得到一个新的list的list{'001=6','002=3','003=6'},意思就是如果编号一样的则将得分相加,不相等的直接将这一项存在新的list中