Delphi TClientDataSet, максимальное количество полей на индекс - PullRequest
2 голосов
/ 10 января 2012

У меня есть простая процедура Delphi (2007), которая при наличии TDataSet и (под) списка полей возвращает новый TClientDataSet с отличными значениями из данного TDataSet.

Это работает довольно хорошо.

В моем процессе я использовал индекс TClientDataSet для заполнения различных значений. Это было быстро и легко.

Проблема в том, что индекс TClientDataSet поддерживает в максимум 16 полей. Если вы добавите больше из них, они будут игнорироваться.

Мне нужно более 16 полей в наборе данных (и, следовательно, в индексе).

Есть ли решение? Некоторые взломать? Может быть, какую-нибудь библиотеку с открытым исходным кодом, чтобы использовать в качестве обходного пути?

Я работаю в автономном режиме, поэтому я должен сделать это в памяти. Размер набора данных не огромный

Ответы [ 2 ]

1 голос
/ 10 января 2012

Если вам нужно получить разные экземпляры записей по более чем 16 полям, и вы хотите использовать индекс для быстрой работы, вам нужно рассмотреть возможность объединения некоторых из этих полей. Например:

Тестовое поле Поле 1 Поле 2 Поле 3 Поле 4 Яблоко ~ Банан ~ Морковь ~ Пончик Яблоко ~ Банан Морковь

Создайте свой индекс на тестовом поле.

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

0 голосов
/ 11 января 2012

Вы можете обменять TClientDataSet для набора TjvCsvDataset из JVCL.Его можно использовать как чистую замену «набора данных в памяти» для клиентских наборов данных, без необходимости читать или записывать какие-либо CSV-файлы на диске.

Это не совсем похоже на клиентский набор данных в дизайне.Я не уверен, какую выгоду дают все эти «индексы» в наборе данных клиента, кроме того, что у вас не может быть поля без определения индекса, но в случае, если это все, что вам нужно, вы можете установить TJvCsvDataSet.FieldDef property = 'Field1, Field2, ..... FieldN', а затем откройте набор данных и добавьте в него столько строк, сколько вам нужно.Он практически ограничен объемом памяти, к которому вы можете обращаться в 32-битном процессе.

...