Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Данные из StringGrid, Сохранить/прочитать, как? 
:(
    Опции темы
RN3QGA
Дата 22.11.2005, 12:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте уважаемые программисты!
Я начинающий- не судите строго.
Вопросик таков.
Как мне сохранить табличку StringGrid со всеми внесенными данными на диск и по надобности считать. Програмка у меня простая, что-то вроде журнала учета, но не хочется привязываться к базе данных. Если можно то небольшой примерчик с кодом.
Заранее благодарен.
  Вверх
Snowy
Дата 22.11.2005, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Сохранить:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  t: TextFile;
begin
  AssignFile(t,'C:\1.txt');
  Rewrite(t);
  for i:=1 to StringGrid1.RowCount-1 do
    WriteLn(t,StringGrid1.Rows[i].Text);
  CloseFile(t);
end;


Прочитать:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  t: TextFile;
  s: string;
  i: integer;
begin
  StringGrid1.RowCount:=2;
  AssignFile(t,'c:\1.txt'); Reset(t);
  while not eof(t) do
  begin
    for i:=0 to StringGrid1.ColCount-1 do begin
      ReadLn(t,s);
      StringGrid1.Cells[i,StringGrid1.RowCount-1]:=s;
    end;
    ReadLn(t,s);
    StringGrid1.RowCount:=StringGrid1.RowCount+1;
  end;
  StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;

PM MAIL   Вверх
RN3QGA
Дата 23.11.2005, 08:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Большое Вам спасибо!
Пожалую на Вашем форуме все таки к вопросам начинающих относятся с большим вниманием!
Очень благодарен.
  Вверх
~FoX~
Дата 23.11.2005, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



А я люблю через АДО делать, вроде как быстрее мне кажеться smile
Код

procedure TSCRemont.Button6Click(Sender: TObject);
var
  s: String;
begin
  OpenDialog1.Execute;
  s:= OpenDialog1.FileName;
  with ADOQuery4 do begin
    ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + s + ';Extended Properties=Excel 8.0;Persist Security Info=False';
    Active := false;
    SQL.Clear;
    SQL.Add('Select * From [Лист1$]');
    Active := True;
  end;
  FullGridFromXLS; // ======Заполняем грид из Екселя
  ADOQuery4.Active := False;
end;

procedure FullGridFromXLS();// ======Заполняем грид из Екселя
var
  i: integer;
begin
  i:=0;
  with SCRemont do begin
    StringGrid1.RowCount := ADOQuery4.RecordCount;
    with ADOQuery4 do begin
      first;
      while not EOF do begin
        i:=i+1;
        StringGrid1.Cells[1, i] := ADOQuery4.FieldByName('Сервисный центр').AsString;
        StringGrid1.Cells[2, i] := ADOQuery4.FieldByName('Отчет №').AsString;
        StringGrid1.Cells[3, i] := ADOQuery4.FieldByName('Дата отчета').AsString;
        StringGrid1.Cells[4, i] := ADOQuery4.FieldByName('С/номер').AsString;
        StringGrid1.Cells[5, i] := ADOQuery4.FieldByName('Модель').AsString;
        StringGrid1.Cells[6, i] := ADOQuery4.FieldByName('Установленный дефект').AsString;
        StringGrid1.Cells[7, i] := ADOQuery4.FieldByName('Замена детали').AsString;
        StringGrid1.Cells[8, i] := ADOQuery4.FieldByName('Примечание').AsString;
        StringGrid1.Cells[9, i] := ADOQuery4.FieldByName('Дата').AsString;
        StringGrid1.Cells[10, i] := ADOQuery4.FieldByName('Время').AsString;
        StringGrid1.Cells[11, i] := ADOQuery4.FieldByName('Цена детали').AsString;
        StringGrid1.Cells[12, i] := ADOQuery4.FieldByName('Сумма ремонта').AsString;
        next;
      end;//while
    end; //with ADO
  end;  // with Form
end;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Des666
  Дата 27.11.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.10.2006

Репутация: -1
Всего: нет



А как сохранять/загружать StringGrid с 2 столбцами? В тхт фаил...

Это сообщение отредактировал(а) Des666 - 27.11.2006, 15:09
PM MAIL WWW ICQ   Вверх
Snowy
Дата 27.11.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Абсолютно также.
Решение универсальное.
PM MAIL   Вверх
Des666
Дата 28.11.2006, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.10.2006

Репутация: -1
Всего: нет



Snowy, 
А почему всего один раз при запуске программы можно сохранить?После того как сохраниш снова загрузиш что нибудь исправиш он после этого  выдаёт ошибку: I/O error32 
Останавливается на Rewrite(t); в сохранить...

Это сообщение отредактировал(а) Des666 - 28.11.2006, 06:51
PM MAIL WWW ICQ   Вверх
Guedda
Дата 28.11.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Потому что в этом коде:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  t: TextFile;
  s: string;
  i: integer;
begin
  StringGrid1.RowCount:=2;
  AssignFile(t,'c:\1.txt'); Reset(t);
  while not eof(t) do
  begin
    for i:=0 to StringGrid1.ColCount-1 do begin
      ReadLn(t,s);
      StringGrid1.Cells[i,StringGrid1.RowCount-1]:=s;
    end;
    ReadLn(t,s);
    StringGrid1.RowCount:=StringGrid1.RowCount+1;
  end;
  StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;

не хватает CloseFile(t);
В общем, вот процедура, всё будет нормально работать:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  t: TextFile;
  s: string;
  i: integer;
begin
  StringGrid1.RowCount:=2;
  AssignFile(t,'c:\1.txt'); Reset(t);
  while not eof(t) do
  begin
    for i:=0 to StringGrid1.ColCount-1 do begin
      ReadLn(t,s);
      StringGrid1.Cells[i,StringGrid1.RowCount-1]:=s;
    end;
    ReadLn(t,s);
    StringGrid1.RowCount:=StringGrid1.RowCount+1;
  end;
  StringGrid1.RowCount:=StringGrid1.RowCount-1;
  CloseFile(t);
end;



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Des666
Дата 28.11.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.10.2006

Репутация: -1
Всего: нет



Сохраняет только 
1
йцу - откуда это взялось я вообще непонял 
пишу в 1 строчке грида 1 во второй 2 
В третьей 3 - 4
А сохраняет что написал выше и что значит eof?
-----------
Нет разобрался но теперь код дублирует мне первую строчку...

Это сообщение отредактировал(а) Des666 - 28.11.2006, 09:25
PM MAIL WWW ICQ   Вверх
Guedda
Дата 28.11.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Цитата(Des666 @  28.11.2006,  09:19 Найти цитируемый пост)
eof

End of File - конец файла. То место, где файла больше нет smile


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Des666
Дата 28.11.2006, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.10.2006

Репутация: -1
Всего: нет



А почему он мне 1 строку то дублирует?
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0904 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.