Таблица TDrawGrid и бд в текстовом файле

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
Dark Ichigo
новенький
Сообщения: 44
Зарегистрирован: 12.03.2009 18:06:51
Контактная информация:

Таблица TDrawGrid и бд в текстовом файле

Сообщение Dark Ichigo »

Новичок в программировании.

Задача:

Есть таблица TDrawGrid (Form1), есть форма (Form2). С помощью формы я заношу данные в бд (текстовый файл).
Вопрос состоит в том, что писать в процедуре сохранения данных формы, и как потом вывести эти данные в таблицу?
Например, есть combobox1. Как заставить отображаться сохранённое значение во второй строке в первом столбце?
Буду рад реальному примеру, потому как условные обозначения понимаю пока не всегда.

ps
Не могу в панели найти компонент TStringGrid. Может, посоветуете компоненты для таблиц?
Аватара пользователя
Dark Ichigo
новенький
Сообщения: 44
Зарегистрирован: 12.03.2009 18:06:51
Контактная информация:

Сообщение Dark Ichigo »

а) Через Вид/Компоненты Нашёл TStringGrid в Лазаре, потому отпала нужда в TDrawGrid.
б) Сделал так:

Код: Выделить всё

...

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, Menus, ComCtrls, Grids, ExtCtrls;  //на всякий случай, здесь указал всё, что было в моём проекте

type

  { TForm1 }

  TForm1 = class(TForm)

    StringGrid1: TStringGrid;

...

procedure TForm1.FormCreate(Sender: TObject);
 var
   f: TextFile;
   i, k: Integer;
   strTemp: String;
 begin
   AssignFile(f, 'db.txt');
   Reset(f);
   with StringGrid1 do
   begin
     // loop through cells & fill in values
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
       begin
         Readln(f, strTemp);
         Cells[i, k] := strTemp;
       end;
   end;
   CloseFile(f);
 end;
Последний раз редактировалось Dark Ichigo 26.05.2009 09:24:07, всего редактировалось 1 раз.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Dark Ichigo
//Сохранение контента таблицы и настроек в текстовый файл
StringGrid.SaveOptions:=[soDesign, soAttributes, soContent];
StringGrid.SaveToFile('sg.txt');

//Считывание содержимого из текстового файла в таблицу
StringGrid.LoadFromFile('sg.txt');
Аватара пользователя
Dark Ichigo
новенький
Сообщения: 44
Зарегистрирован: 12.03.2009 18:06:51
Контактная информация:

Сообщение Dark Ichigo »

ух ты! спасибо. буду пробовать.

Добавлено спустя 13 часов 56 минут 33 секунды:
сделал.

Пишет:

Project raised exception 'EXMLReadError' with message:
In 'file:db.txt': Root element is missing
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

А Вы текстовый файл ручками, случайно, не подпортили?
Сохраните таблицу в текстовый файл, потом откройте в блокноте и посмотрите, как там всё должно быть.
Аватара пользователя
Dark Ichigo
новенький
Сообщения: 44
Зарегистрирован: 12.03.2009 18:06:51
Контактная информация:

Сообщение Dark Ichigo »

Да, правил руками, и всё было в порядке.

Данная ошибка выскакивает при компиляции. Так что таблицу сохранить я не смогу таким образом.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Dark Ichigo писал(а):Данная ошибка выскакивает при компиляции.

Вы ничего не путаете? При компиляции нет и не может быть файла db.txt. Такая ошибка может быть только во время выполнения.
Аватара пользователя
Dark Ichigo
новенький
Сообщения: 44
Зарегистрирован: 12.03.2009 18:06:51
Контактная информация:

Сообщение Dark Ichigo »

Возможно, я не до конца объяснил.

Изначально у меня нет никакой таблицы. а есть файл db.txt для базы данных.

Т.е. файл чистый. Или там может быть заполнено произвольное количество строк. А как быть ещё?

При компиляции, как я понимаю, программа уже обращается к файлу. Я сужу по тому, что если я удаляю файл, при компиляции выдаётся ошибка об его отсутствии.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Дело в том, что StringGrid для хранения использует файл XML формата, а не простой текстовый файл!
Пустой XML это файл содержащий "сигнатуру XML"

Код: Выделить всё

<?xml version="1.0"?>

если этого текста не будет в файле то будет эксцепшен EXMLReadError

Добавлено спустя 55 секунд:
И вот ещё: почитайте где нибудь, что такое компиляция!
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Давайте я Вам второй раз повторю совет, а Вы, через "немогу", попытаетесь его выполнить, иначе помогать Вам больше нет никакого смысла. ;)
Vadim писал(а):Сохраните таблицу в текстовый файл, потом откройте в блокноте и посмотрите, как там всё должно быть.
Аватара пользователя
Dark Ichigo
новенький
Сообщения: 44
Зарегистрирован: 12.03.2009 18:06:51
Контактная информация:

Сообщение Dark Ichigo »

Я понял. Надо было сначала убрать процедуру загрузки файла вообще.

Сделал процедуру сохранения StringGrid1.SaveToFile('db.txt'). Сделал StringGrid, заполнил, сохранил. В файле получилась новая структура записи данных. Затем добавил новую процедуру загрузки. И ву-ра-ля! Готово.

Спасибо всем.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Dark Ichigo писал(а):Надо было сначала убрать процедуру загрузки файла вообще.

надо делать проверку наличия файла, если нет то загружать не надо, или вообще этот кусок процедуры взять в try except и заполянять его дефолтными данными
Ответить