Нахождение текущей строки в TDBGrid Delphi

Для множества уникальных «случайных» чисел я обычно использую Формат сохраняющего шифрование . Поскольку шифрование является взаимно-однозначным, вам гарантированы уникальные выходные данные, если они являются уникальными. Другой ключ шифрования будет генерировать другой набор выходных данных, то есть другую перестановку входных данных. Просто зашифруйте 0, 1, 2, 3, 4, ... и выходные данные гарантированно уникальны.

Вы хотите цифры в диапазоне [1 .. 20 000]. К сожалению, для 20000 требуется 21 бит, и большинство схем шифрования имеют четное количество бит: в вашем случае 22 бита. Это означает, что вам нужно будет ездить на велосипеде; повторно зашифруйте вывод, если число слишком велико, пока не получите число в нужном диапазоне. Поскольку ваши входные данные доходят только до 10 000, а количество циклов выше 20 000, вы все равно избегаете дублирования.

Единственный известный мне стандартный шифр, который допускает 22-битный размер блока, - это шифр Hasty Pudding. В качестве альтернативы достаточно просто написать свой собственный простой шифр Фейстеля . Четыре раунда достаточно, если вы не хотите криптографическую безопасность. Для защиты на криптографическом уровне вам необходимо использовать AES / FFX, который одобрен NIST.

7
задан mghie 23 March 2009 в 05:06
поделиться

3 ответа

Можно сделать это как это:

1 - Определите локальный класс, который является копией TDBGrid (это позволит Вам закрытые методы доступа):

type
  THackDBGrid = class(TDBGrid);

2 - Затем можно бросить к локально определенному классу и вытянуть от закрытых методов как в:

function TfrmMain.GetFieldValue(colnum : integer): string;
begin
  Result := THackDBGrid(grdMain).GetFieldValue(colnum);
end;

Или, для получения строки #:

function CurrentRowNumber: integer;
  Result := THackDBGrid(grdMain).Row;
end;

Эта техника полезна в других ситуациях также, но я не могу требовать кредита. Я получил его отсюда.

4
ответ дан 7 December 2019 в 03:21
поделиться

Я не уверен, понимаю ли я Ваш вопрос, но я буду делать попытку ответа, и возможно можно разъясниться, не является ли это тем, что Вы спрашиваете.

Так как TDBGrid связывается с DataSource, текущая строка совпадает с текущей строкой в источнике данных. Можно запросить DataSource, или путем рассмотрения значения первичного ключа или свойства RecNo для определения, какая запись является текущей.

5
ответ дан 7 December 2019 в 03:21
поделиться

Если Вы не хотите зависеть от источника данных для обеспечения количества записей и текущей записи (например, потому что Вы используете однонаправленный курсор на удаленном сервере), то метод доступа к свойствам базового управления сеткой может использоваться.

См. этот ответ на подобный вопрос о StackOverflow.

0
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: