|
Вопрос # 6 374/ вопрос решён / |
|
Приветствую, уважаемые эксперты!
Подскажите
как сохранять и читать динамический массив (array of integer) в поле ClientDataSet'а ну или в любой другой DataSet,
какой тип выбрать для данного поля?
желательно пример привести
заранее спасибо!
Ответ #1. Отвечает эксперт: SnowLeo
Здравствуйте, Казаков Николай Константинович!
Лучше сделать подчиненную таблицу, и туда эти массивы с полем связи.
Если не подходит такой вариант, просто текстовое поле (да тот же blob), и туда все значения через запятую.
 |
Ответ отправил: SnowLeo (статус: 1-ый класс)
Время отправки: 12 февраля 2013, 19:34
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 15 февраля 2013, 12:47; участников в обсуждении: 4.
|
Вадим К (статус: Академик), 12 февраля 2013, 16:47 [#1]:
blob? хотя подозреваю, что это не то что нужно и задачу решаете неверно.
Что хранится в этих массивах?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Казаков Николай Константинович (статус: 1-ый класс), 13 февраля 2013, 08:32 [#2]:
в массиве храню числа, вообще поля в CDS должны быть такими <Наименование><Массив>.
вся трудность в том, что я вообще никогда не имел дел с блоб, в гугле большинство ссылок где в блоб пихают файл с массивами что-то не получается найти
нашел вот это http://it-blackcat.blogspot.ru/2012/06/blob-2.html,
но там используется
qInsertResearchData.Params[5].SetBlobData
в моей Delphi 7 так не получается
|
|
SnowLeo (статус: 1-ый класс), 13 февраля 2013, 10:20 [#3]:
Ну все просто же. Я даже пример не буду писать...
Вот у вас есть массив с integer [1,2,3,4,5]. Напишите функцию, которая переводит его в строку с разделителями (через запятую например) - "1,2,3,4,5".
Далее вы эту строку запишите в Blob-поле, стандартным способом - BlobField.AsString := ваша_строка;
Потом, при чтении из Blob - совершаете обратный процесс.
|
|
Вадим К (статус: Академик), 13 февраля 2013, 16:12 [#4]:
что это за числа в массиве? случайно не id для выборки с другой таблицы?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 13 февраля 2013, 23:28 [#5]:
зачем одномерный массив переводить в строку? Не проще сохранить его в таблицу?
|
|
Казаков Николай Константинович (статус: 1-ый класс), 14 февраля 2013, 08:25 [#6]:
>> Ну все просто же.
а не долго будет? у меня в массиве кол-во элементов колеблется от 4 до 6 тыс.
вот нашел кое-что, может подойдет мне или кому еще пригодится )
var
tmpBlobStream: TStream;
begin
...
tmpBlobStream = Dataset.CreateBlobStream(...);
tmpBlobStream .WriteBuffer(aData[0], Length(aData) * SizeOf(aData[0]))
Dataset.Post;
|
|
Вадим К (статус: Академик), 14 февраля 2013, 12:34 [#7]:
Почему Вы не отвечаете на поставленный вопрос, а ходите вокруг да около?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Казаков Николай Константинович (статус: 1-ый класс), 14 февраля 2013, 12:49 [#8]:
Вадим К
Нет не id это данные из Wav файла, массив размерностью около 5000 элементов.
Мережников Андрей
может есть более удобный вариант чем создавать 5000 столбцов в таблице и хранить в них по 1 числу
|
|
SnowLeo (статус: 1-ый класс), 14 февраля 2013, 14:37 [#9]:
Казаков Николай Константинович:
>может есть более удобный вариант чем создавать 5000 столбцов в таблице и хранить в них по 1 числу
Зачем 5000 столбцов? Одна таблица с двумя столбцами. Но вот в ней будет на каждый wav файл - 5000 записей.
>а не долго будет? у меня в массиве кол-во элементов колеблется от 4 до 6 тыс.
Думаю что не долго - надо тестировать. Все зависит от конфигурации процессор и память и СУБД.
|
|
Вадим К (статус: Академик), 15 февраля 2013, 12:47 [#10]:
Цитата:
Но вот в ней будет на каждый wav файл - 5000 записей.
вот с этого и нужно начинать. В этом случае либо блобы, либо даже внешний файл.
Галочка "подтверждения прочтения" - вселенское зло.
|
18 марта 2013, 21:50: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Программирование баз данных (БД) модератором Ерёмин А.А.
18 марта 2013, 21:50: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|