Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.05.2013, 09:44
djjag djjag вне форума
Прохожий
 
Регистрация: 30.05.2013
Сообщения: 5
Версия Delphi: Delphi 7 lite
Репутация: 10
Вопрос Трехмерный массив в таблице БД

Помогите правильно записать 3-х мерный массив в таблицу БД...
Итак есть массив
var store:array[1..L,1..N,1..M] of Integer;
Есть база и таблица такого типа: (1 основное поле - дата (день), 2 поле для хранения этого массива)
...
Код:
 with FieldDefs do
                    begin
                    Add('date',ftDate,0, True);                              // date
                    Add('tab',ftBytes, SizeOf(store)*4, False);        //  array data
                    end;[/b]
Но при записи данных возникает ошибка (пробовал записать первый элемент массива)
Код:
 with Form1.dt2 do
              begin
              Insert;
              FieldByName('date').AsDateTime := Form1.dtp1.date ;                                                                 // date
              FieldByName('tab').Value[1] := store[1,1,1];                           //array
              Post;
              end

Как можно правильно записать массив (желательно без цикла, одним махом весь массив в БД) ???

Я также пробовал менять типа поля на ftARRAY но не знаю как с ним работать:

Код:
...FieldByName('tab').AsArrayof Integer (??) := store[];
Админ: Читам Правила и оформляем код тегами!

Последний раз редактировалось Admin, 30.05.2013 в 09:50.
Ответить с цитированием
  #2  
Старый 30.05.2013, 13:09
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А нафик такой изврат? В плоскую структуру 3-х мерку запихивать?
Но пускай так надо. У вас тогда каждая ячейка должна содержать не элемент, а одномерный массив элементов, а таким макаром:
Код:
FieldByName('tab').Value[1] := store[1,1,1]

вы получаете плоскую 2-мерную табличку.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 30.05.2013, 13:38
djjag djjag вне форума
Прохожий
 
Регистрация: 30.05.2013
Сообщения: 5
Версия Delphi: Delphi 7 lite
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
А нафик такой изврат? В плоскую структуру 3-х мерку запихивать?
Но пускай так надо. У вас тогда каждая ячейка должна содержать не элемент, а одномерный массив элементов, а таким макаром:
Код:
FieldByName('tab').Value[1] := store[1,1,1]

вы получаете плоскую 2-мерную табличку.
Да но как это сделать?
FieldByName('tab').Value := store; ?

да и как правильно все таки задать поле для моего массива?
LMN:=L*M*N; // размер массива в байтах
Add('tab',ftBytes, LMN*4, False); // 4 байта на INTEGER

или так?

Add('tab',ftArray(?), LMN*4, False); // 4 байта на INTEGER
Ответить с цитированием
  #4  
Старый 30.05.2013, 13:41
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

У вас целочисленные данные. Создайте поле типа Blob и запихивайте туда третью размерность потоком. Считывайте так-же.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 30.05.2013, 16:25
djjag djjag вне форума
Прохожий
 
Регистрация: 30.05.2013
Сообщения: 5
Версия Delphi: Delphi 7 lite
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
У вас целочисленные данные. Создайте поле типа Blob и запихивайте туда третью размерность потоком. Считывайте так-же.

А можно пример как мой массив запихнуть в поток?
Попробовал
Stream := TMemoryStream.Create;
BlobStream:= TABSBlobStream(CreateBlobStream(FieldByName('tab') ,bmWrite));

Но одни ошибки...
Ответить с цитированием
  #6  
Старый 31.05.2013, 09:06
djjag djjag вне форума
Прохожий
 
Регистрация: 30.05.2013
Сообщения: 5
Версия Delphi: Delphi 7 lite
Репутация: 10
По умолчанию

Цитата:
Сообщение от djjag
А можно пример как мой массив запихнуть в поток?
Попробовал
Stream := TMemoryStream.Create;
BlobStream:= TABSBlobStream(CreateBlobStream(FieldByName('tab') ,bmWrite));

Но одни ошибки...

Я бы не спрашивал, но в интернете нету примеров
Вернее там миллиард копий дебильного примера в котором Блоп записывается в файловый поток и читается оттуда. А мне это совершенно не надо, у меня единая БД - 1 файл.
А вот как 3-х мерный массив засунуть в поток(память) и оттуда в Блоб в таблицу - таких примеров нигде не нашел...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:42.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025