Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
ВнизСпособ для хранения массива в поле... Найти похожие ветки
← →
HepB (2005-07-29 20:08) [0]Возникла потребность в хранении массива целых чисел, в моём случае в одной записи таблицы нужно сохранить 32 таких массива. Подскажите способ. Возможно ли это осуществить используя тип данных поля binary или varbinary? (MS SQL Server 2000)
← →
Fay © (2005-07-29 20:15) [1]2 HepB (29.07.05 20:08)
Можно. Их даже можно получать substring-ом. Всё зависит от размера массива 8)
← →
Виталий Панасенко (2005-07-29 21:25) [2]а в IB/FB/Yaffil это реализовано без вые....:-) (ща начнут клевать)
← →
AlexWlad © (2005-07-29 21:30) [3]Если не нужна сортировка, выборки и т.п. - BLOB. Впрочем, если влезешь в 8000 байт, то тогда можно и varbinary.
← →
Anatoly Podgoretsky © (2005-07-29 21:56) [4]AlexWlad © (29.07.05 21:30) [3]
в SQL 2005 размер varbinary размер 2 гб,
на текущий момент млжно использовать image размер до 2 гб
← →
DiamondShark © (2005-07-29 23:47) [5]Способ очень простой:
Создаётся таблица, и связывается отношением.
Храни хоть двести миллионов массивов.
← →
HepB (2005-07-30 01:36) [6]Спасибо, за советы. Если не трудно напишите код для примера на каждый способ. DiamondShark не вник в вопрос. З.Ы. массивы не более 255 элементов будут содержать.
← →
AlexWlad © (2005-07-30 11:04) [7]Тут недавно пробегали ветки про работу с BLOB через поток, через параметр СП - поищи, там довольно просто...
← →
sniknik © (2005-07-30 11:37) [8]> DiamondShark не вник в вопрос.
не. это ты не вник в ответ. ;о)
что такое есть таблица как не масив записей...? (только из горизонтали он "развернут" вниз, в вертикаль (если показывать на бумажке хорошо получается ;о))))
ну вот и сделай себе дополнительную таблицу/массив с примерной структурой
id - автоинкремент, num - номер массива (от 1 до 32), val - значение.
а в своей таблице вместо поля binary или varbinary делай поле integer с указанием на номер массива - num.
может не так удобно будет сохранять/доставать "массивы" но зато будет проще доступ к его отдельным элементам, и возможнось обработки по значениям на SQL сервере. (вернее обрабатывать будет проше, а возможно то в любом случае)
← →
HepB (2005-07-30 13:44) [9]sniknik, нужно хранить в каждой записи 32 массива. Т.е. 1000 записей должны хранить 32000 различных массива.
AlexWlad, не получилось найти :(
Закиньте в эту ветку код работы с массивом целых чисел и blob полем, пожалуйста.
← →
Anatoly Podgoretsky © (2005-07-30 13:53) [10]Что ты хочешь?
← →
HepB (2005-07-30 13:58) [11]Нужно в поле типа blob или binary загружать/выгружать массив a:array[1..255] of integer;
← →
AlexWlad © (2005-07-30 14:16) [12]Если BDE - смотри TBlobStream.
Для ADO - TBlobField.LoadFromXXXX.
← →
HepB (2005-07-30 14:29) [13]В SQL Server 2000 нет никакого BLOB :(
← →
HepB (2005-07-30 14:37) [14]Нужно в поле типа binary или другой, поддерживаемый MSSQL Server 2000 загружать/выгружать массив a:array[1..255] of integer;
← →
sniknik © (2005-07-30 14:37) [15]> В SQL Server 2000 нет никакого BLOB :(
есть, не там смотрел
в глоссарии смотрим
BLOB
See definition for:binary_large_object
идем по ссылке
binary large object
A piece of binary data that has an exceptionally large size (such as pictures or audio tracks stored as digital data), or any variable or table column large enough to hold such values. In Transact-SQL, a BLOB is stored in an image column. Sometimes the term BLOB is also applied to large character data values, such as those stored in text or ntext columns.
(это общий термин а не конкретный тип поля ;)
← →
sniknik © (2005-07-30 14:43) [16]> код работы
http://www.yandex.ru/yandsearch?text=LoadFromStream+Delphi&stype=www
+ добавь в поиск этот название компонент через которые у тебя доступ быстрее найдеш.
← →
sniknik © (2005-07-30 14:52) [17]> sniknik, нужно хранить в каждой записи 32 массива. Т.е. 1000 записей должны хранить 32000 различных массива.
все одно. ну пусть 32 масива в записи.
ну сделай id, num, val1, val2, ... val32
ссылка по num будет указывать на все 32 массива...
а 1000 * 255 записей такая структура выдержит с легкостью, даже задумываться не надо. и + основную, рабочую таблицу ит лишних полей разгрузиш.
← →
HepB (2005-07-30 14:53) [18]Хорошо, с этим ясно, спасибо ;)
Так какой выбрать тип поля для поставленной задачи и как в Delphi с ним работать? Как я понимаю, по высказанным в этой ветке репликам, для записи нужно массив вогнать в поток, а потом поток вогнать в поле таблицы, для чтения наоборот. Напишите, пожалуйста, код для реализации этих операций, лучше - пример.
← →
HepB (2005-07-30 14:59) [19]>ну сделай id, num, val1, val2, ... val32
>ссылка по num будет указывать на все 32 массива...
главное - придумать как поместить в поле val1...valn массив.
← →
Anatoly Podgoretsky © (2005-07-30 15:13) [20]Ты когда ни будь нам расскажешь, что за массивы?
← →
sniknik © (2005-07-30 15:20) [21]> лучше - пример.
из яндекса не хватило?
и пример для чего? обших "для всего" не бывает. для обшего только расссуждения в обшем.
← →
HepB (2005-07-30 15:23) [22]Я уж думал всё и так чётко. Даже написал:
HepB (30.07.05 13:58) [11]
Нужно в поле типа blob или binary загружать/выгружать массив a:array[1..255] of integer;
← →
HepB (2005-07-30 15:26) [23]>> лучше - пример.
>из яндекса не хватило?
хватило для того, что бы я сюда вернулся...
>и пример для чего? обших "для всего" не бывает. для обшего >только расссуждения в обшем.
Пример для:
1. помежения массива целых чисел в поток
2. помещение, полученного, потока в поле таблицы
3. обратные операции
← →
Anatoly Podgoretsky © (2005-07-30 15:27) [24]binary 255*4
← →
sniknik © (2005-07-30 15:43) [25]кстати про что подумал...
массивы хочеш в 1-поле "пихнуть"? притом
HepB (30.07.05 01:36) [6]
> массивы не более 255 элементов будут содержать.
они разные, судя по этой фразе... так? а в следующей записи в этом поле будут другие?
тогда нужны поля в которых хранятся смещения этих массивов либо придумывать какието методы разделения (префиксы) их друг от друга. если префиксы то это значит выпадения части значений возможных в массивах (совпадет с префиксом - вместо одного массива будет два...) и т.д.
> Пример для:
> 1. помежения массива целых чисел в поток
одного массива? а вроде был разговор про 32, а после n. (нет n мало... возьмем m! ;о)))
> 2. помещение, полученного, потока в поле таблицы
используя какой метод доступа?
> 3. обратные операции
может проще сразу программу за тебя написать? недорого возьму. (но предупреждаю все в этом мире относительно ;о)))
p.s. песня только начинается ;о))
← →
Anatoly Podgoretsky © (2005-07-30 15:47) [26]Еше не вечер.
← →
HepB (2005-07-30 15:52) [27]sniknik, остроумие - это хорошо :)
Одна запись будет хранить 32 поля, каждое из которых содержит массив.
← →
HepB (2005-07-30 15:55) [28]Для меня важно как впихнуть массив в одно поле. Каким способом не столь важно. Вы мне напишите хоть какой-то, пожалуйста...
← →
Anatoly Podgoretsky © (2005-07-30 16:05) [29]Приведи структуру таблицы
← →
HepB (2005-07-30 16:19) [30]Anatoly Podgoretsky, я не пойму Вас. Какое значение здесь имеет структура таблицы, там уйма полей. Мне же хотелось узнать только механизм хранения массива целых чисел в одном поле. У меня была идея вообще записывать числа через запятую в одну строчку, но если есть способ поместить весь массив в поле типа байнари, то почему бы не попробовать?
← →
HepB (2005-07-30 16:24) [31]Осталось выяснить существует ли этот способ...
← →
Anatoly Podgoretsky © (2005-07-30 16:28) [32]HepB (30.07.05 16:19) [30]
Не надо всю, только относящую к этому, включая первичные ключи.
Хотя дело твое можешь не приводить ни каких данных, ведь никто не заставляет.
← →
HepB (2005-07-30 16:39) [33]Честно говоря, я уже в отчаянии. Мне столько раз на этом форуме помогали. Теперь же целый день прошёл без толку :(
Попробую ещё раз сформулировать проблему:
Поместить один массив целых чисел в одно поле записи.
← →
Leonid Troyanovsky © (2005-07-30 16:41) [34]
> HepB (30.07.05 15:55) [28]
> Для меня важно как впихнуть массив в одно поле. Каким способом
> не столь важно. Вы мне напишите хоть какой-то, пожалуйста...
Грубо говоря, что-то вроде
with ADOQuery do
begin
SQL.Text := "INSERT INTO MyTable (.., blobFieldName) VALUES (.., :content)";
..
Parameters.ParamByName("content").LoadFromStream(..);
Prepare;
ExecSQL;
end;
Подробности почитаешь в хелпе.
--
Regards, LVT.
← →
HepB (2005-07-30 17:54) [35]Leonid Troyanovsky, спасибо.
Какой Stream нужно использовать, что бы в него можно было поместить массив и потом загрузить при помощи вышеуказанного кода?
← →
Leonid Troyanovsky © (2005-07-30 18:01) [36]
> Какой Stream нужно использовать, что бы в него можно было
> поместить массив и потом загрузить при помощи
Например, TMemoryStream.
Хотя, можно и напрямую установить размер параметра
и Move туда массив, но я не помню свойств Parameters,
а дельфи под рукой нет.
--
Regards, LVT.
← →
HepB (2005-07-30 18:51) [37]Leonid Troyanovsky,
как из поля в последствии выдернуть этот поток?
Другими словами, как в поток загрузить содержимое поля?
← →
Leonid Troyanovsky © (2005-07-30 19:35) [38]
> HepB (30.07.05 18:51) [37]
> как из поля в последствии выдернуть этот поток?
> Другими словами, как в поток загрузить содержимое поля?
IMHO, в обратном порядке
SQL.Text := "select myblob from table1 where ..";
Open;
(Fields[0] as TBlobField).SaveToStream(..);
Ну, про особенности ты где-нить в хелпе почитаешь.
--
Regards, LVT.
← →
HepB (2005-07-30 19:49) [39]Leonid Troyanovsky, спасибо огромное.
А так же спасибо всем, кто пытался хоть как-то помочь.
Респект Вам, МАСТЕРА!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.011 c