| 
| 
 | Вопрос # 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: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |