Показать сообщение отдельно
  #2  
Старый 23.11.2008, 08:38
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

dbgrid здесь ни при чем. В dbgrid нет прямого доступа к значениям полей. dbgrid связана с данными через какой-либо DataSet и только отображает эти данные.
Через DataSet и надо получать значение поля текущей записи (активная в dbgrid строка).

Код:
function DecodeEncodeStr(const S, Psw : String) : String;
var I, J : Integer;
begin
  Result := S;
  if (S = '') or (Psw = '') then Exit;
  J := 1; I := 1;
  while I <= Length(S) do begin
    if Result[i] = #13 then begin Inc(I, 2); continue end;
    Result[i] := Char(Byte(Result[i]) xor Byte(PSW[J]));
    if Result[i] = #0 then Result[i] := Psw[J];
    if J = Length(PSW) then J := 1 else Inc(J);
    Inc(I);
  end;
end;

//шифрование и дешифрование строкового поля активной в dbgrid записи
procedure TForm1.Button1Click(Sender : TObject); 
begin
  Str := DataSet1.FieldByName('FIELD2').AsString;
  DataSet1.Edit;
  DataSet1.FieldByName('FIELD2').AsString := DecodeEncodeStr(Str, Psw);
  DataSet1.Post;
  //"FIELD2" - для примера.
end;
DecodeEncodeStr - Функция для примитивного симметричного шифрования строк.
"S" - исходная строка, которую нужно шифровать или дешифровать;
"Psw" - строка, на основе которой происходит преобразование исходной. Может быть произвольной длины (более 2 символов). Должна состоять из русских букв и/или цифр.
Зашифрованая этой функцией строка должна с помощью её и дешифровываться с одинаковым набором символов в параметре "Psw".
__________________
Не забывайте делать резервные копии
Ответить с цитированием