Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Как сохранить массив в БД и потом читать оттуда?

Поиск:
Можно обойтись введением пары функций, которые использовать перед занесением массива в поле и при чтении массива из поля, например так:
Код


type
  TIntegerArray = array of Integer;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function ArrayToString(AIntegerArray: TIntegerArray): string;
var
  i: Integer;
begin
  Result := '';
  for i := Low(AIntegerArray) to High(AIntegerArray) do
  begin
    if Result <> '' then
      Result := Result + ',';
      // разделяем элементы строкового массива запятой.
      // впринципе как разделить можно использовать символ конца строки #13#10,
      // там даже парсить такю строку будет удобнее,
      // но тогда просмотр таблицы БД будет "изуродован".
    Result := Result + IntToStr(AIntegerArray[i]); // добавляем элемент строкового массива
  end;
end;

function StringToArray(AArrayStr: string): TIntegerArray;
var
  lstString: TStringList;
  i: Integer;
begin
  SetLength(Result, 0); // создаем массив
  lstString := TStringList.Create; // создаём класс "список строк"
  try
    lstString.Text := StringReplace(AArrayStr, ',', #13#10, [rfReplaceAll]); //заменяем все запятые на символы конца строки
    SetLength(Result, lstString.Count); // задаем размер массива
    for i := 0 to lstString.Count - 1 do
      Result[i] := StrToInt(lstString[i]); // заполняем элементы массива
  finally
    lstString.Free;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  // проверка функций парсинга строки в массив и обратно
  ShowMessage(ArrayToString(StringToArray('1,2,3,4')));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  a: TIntegerArray;
begin
  // пример сохранения массива в БД
  {
  ...
  наполнение массива <a>
  ...
  }
  with TQuery.Create(Self) do
  try
    SQL.Add('UPDATE table1 SET');
    SQL.Add('  fsArray = ' + QuotedStr(ArrayToString(a)));
    SQL.Add('WHERE id = 999');
    ExecSQL;
  finally
    Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  a: TIntegerArray;
begin
  // пример чтения массива из БД
  with TQuery.Create(Self) do
  try
    SQL.Add('SELECT * FROM table1 WHERE id = 999');
    Active := True;
    a := StringToArray(FieldByName('fsArray').AsString);
  finally
    Free;
  end;
  {
  ...
  работа с массивом <a>
  ...
  }
end;






Просмотров: 5911

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную