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

 



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 08.03.2010, 21:13
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Посмотрел я ваш текстовичок.
1.Редактировать напрямую у вас не выйдет т.к. это не чистая таблица. Файл содержит сначала некий описатель, а уже потом данные в нормальном табличном виде. Поэтому для редактирования вам придется сначала считать данные в промежуточную таблицу, внести необходимые изменения и потом сохранить в том-же формате в текстовый файл.
2.Формировать ручками 104 поля конечно можно, но это не наш путь, а потому вот вам вариантик:
Код:
 
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, DBClient;
type
  TForm1 = class(TForm)
    dsUnits: TDataSource;
    DBGrid1: TDBGrid;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    tblUnits: TClientDataSet;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
  OpenDialog: TOpenDialog;
  UnitFile: TextFile;
  S,F: String;
  Data: TStringList;
  i,n: Integer;
begin
 OpenDialog := TOpenDialog.Create(Self);
 try
  if not OpenDialog.Execute then Exit;
  AssignFile(UnitFile, OpenDialog.FileName);
  Reset(UnitFile);
  try
   ReadLn(UnitFile, S);
   Edit1.Text := S;
   ReadLn(UnitFile, S);
   Edit2.Text := S;
   ReadLn(UnitFile, S);
   Data := TStringList.Create;
   Data.Text := StringReplace(S,#9,#13,[rfReplaceAll]);
   for i := 0 to Data.Count - 1
   do begin
      F := Data.Strings[i];
      n := 0;
      while tblUnits.FieldDefs.IndexOf(F) >= 0
      do begin
         Inc(n);
         F := Data.Strings[i] + IntToStr(n);
         end;
      tblUnits.FieldDefs.Add(F,ftString,50,False);
   end;
   tblUnits.CreateDataSet;
   while not Eof(UnitFile)
   do begin
      ReadLn(UnitFile, S);
      Data.Text := StringReplace(S,#9,#13,[rfReplaceAll]);
      tblUnits.Append;
      for i := 0 to Data.Count - 1
      do tblUnits.Fields[i].Value := Data.Strings[i];
      tblUnits.Post;
      end;
  except
   ShowMessage('Ошибка чтения данных.');
   CloseFile(UnitFile);
  end;
 finally
  Data.Free;
  OpenDialog.Free;
 end;
end;
end.
и DFM
Код:
 
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 471
  ClientWidth = 847
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 8
    Top = 39
    Width = 831
    Height = 424
    DataSource = dsUnits
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
  object Button1: TButton
    Left = 8
    Top = 8
    Width = 75
    Height = 25
    Caption = 'Load...'
    TabOrder = 1
    OnClick = Button1Click
  end
  object Edit1: TEdit
    Left = 89
    Top = 10
    Width = 673
    Height = 21
    TabOrder = 2
    Text = 'Edit1'
  end
  object Edit2: TEdit
    Left = 768
    Top = 10
    Width = 71
    Height = 21
    TabOrder = 3
    Text = 'Edit2'
  end
  object dsUnits: TDataSource
    DataSet = tblUnits
    Left = 184
    Top = 88
  end
  object tblUnits: TClientDataSet
    Aggregates = <>
    Params = <>
    Left = 128
    Top = 88
  end
end
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #32  
Старый 08.03.2010, 21:54
novashdima novashdima вне форума
Новичок
 
Регистрация: 05.02.2010
Адрес: Украина, Киев
Сообщения: 64
Версия Delphi: XE3, XE4
Репутация: 10
По умолчанию

Спасибо тебе ОГРОМНОЕ.
Ответить с цитированием
  #33  
Старый 08.03.2010, 22:04
Аватар для W1ndow
W1ndow W1ndow вне форума
Новичок
 
Регистрация: 15.09.2009
Адрес: Березники
Сообщения: 61
Репутация: 16
По умолчанию

Чё-то через чур сложная и большая процедура открытия, ведь данные можно и в StringGrid'e редактировать и сохранять в тех же файлах и тогда не возникнет проблема создавать кучу полей.

Код:
procedure TForm1.LoadFile;
var i,j,c: integer; t,z: string; S: TStringList;
begin
  if OpenDialog1.Execute then begin
    S:=TStringList.Create;
    S.LoadFromFile(OpenDialog1.FileName);
    For i:=2 to S.Count-1 do begin
      t:=S.Strings[i]; c:=0;
      For j:=0 to Length(t) do
        if Ord(t[j])<>9 then z:=z+t[j] else begin
          StringGrid1.Cells[c,i-2]:=z; c:=c+1; z:='';
        end;
      StringGrid1.RowCount:=StringGrid1.RowCount+1;
    end;
  end;
end;

Процедура загружает фаил в стринг грид. указать у стрингрида количество колнок 105, так как там 105 полей. Одно условие файлы должны быть именно такой структуры, чтобы таблица начиналась с 3 строки. Осталось только написать процедуру сохранения.

Последний раз редактировалось W1ndow, 08.03.2010 в 22:06.
Ответить с цитированием
  #34  
Старый 09.03.2010, 00:58
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Ну хочется человеку с базой работать, я и предложил решение отталкиваясь от этого. Ваш вариант тоже вполне нормален, пускай теперь автор решает каким путем идти.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #35  
Старый 10.03.2010, 00:23
novashdima novashdima вне форума
Новичок
 
Регистрация: 05.02.2010
Адрес: Украина, Киев
Сообщения: 64
Версия Delphi: XE3, XE4
Репутация: 10
По умолчанию

W1ndow
ваш вариант некорректно отображает данные,пробовал все,что можно - ничего не помогает
Ответить с цитированием
  #36  
Старый 11.03.2010, 11:44
Armanx64 Armanx64 вне форума
Прохожий
 
Регистрация: 11.03.2010
Сообщения: 17
Репутация: 10
По умолчанию Помогите, пожалуйста

Вот здесь я описал проблеемы - http://www.delphisources.ru/forum/sh...ad.php?t=11293
Ответить с цитированием
Ответ



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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter