Здравствуйте. Всё никак не могу справится с задачей: "Необходимо считать данный из txt (разделены символами табуляции) и отобразить в datagrid". Перерыл кучу форумов но всё равно топчусь на месте.
Планирую сделать так:
1)считывание построчно из файла
2)разборка строки по полям
3) занесение в dataset/clientdataset/table
(не знаю что лучше, подскажите)
4)сортировка в dataset/clientdataset/table
5)отображение в datagrid
столкнулся со следующими трудностями.
1)у меня вся обработка файла и заполнение dataset вынесена в отдельный юнит. Там я пытаюсь программно создать dataset, наделить его полями, отфильтровать и передать его в юнит с формой для datasourse.
так вот
Код:
DS:=TClientDataSet.Create(???);
что писать в параметрах конструктора? Обычно писал self, или aplication а тут другой юнит и так не прокатывает уже
2)пробовал программно создать простую TClientDataSet и опять же программно передать TClientDataSet в datasourse.
Но что то изменений нет никаких в datagrid (в datagrid1 параметр datasourse = datasourse1; в datasourse1 параметр dataset=ClientDataSet1 (та что создаются программно) )
может не хватает каких то ещё команд? типа обновить что-то из этой цепочки..или может что-то закрыть или открыть надо предварительно..
заранее спасибо. буду очень благодарен, за похожие примеры или исходники.
весь код
Код:
unit Main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, Handling, Vcl.Grids, Data.DB, Datasnap.DBClient, Vcl.DBGrids,
Bde.DBTables;
type
TForm1 = class(TForm)
BtnOpen: TButton;
BtnProcess: TButton;
OpenDialogTxt: TOpenDialog;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
procedure BtnOpenClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BtnOpenClick(Sender: TObject);
begin
OpenDialogTxt:= TOpenDialog.Create(self);
OpenDialogTxt.Filter:='txt files|*.txt';
if OpenDialogTxt.Execute
then
begin
DataSource1.DataSet:=HandleTxt(OpenDialogTxt.FileName,'|');
DBGrid1.Update;
end
else ShowMessage('Error');
OpenDialogTxt.Free;
end;
end.
Код:
unit Handling;
interface
uses
Winapi.Messages, System.SysUtils, Vcl.Dialogs,Data.DB,Vcl.Grids, Datasnap.DBClient, Vcl.DBGrids,
Bde.DBTables;
var
ftxt:TextFile;
num_lines:integer=0;
separator:string;
DS: TClientDataSet;
function HandleTxt(path:TFileName;_separator:string):TClientDataSet;
implementation
function HandleTxt(path:TFileName;_separator:string):TClientDataSet;
var
line:string;
I:Integer;
begin
separator:=_separator;
AssignFile(ftxt, path);
reset(ftxt);
DS:=TClientDataSet.Create(nil);
DS.FieldDefs.Add('id', ftInteger);
DS.FieldDefs.Add('nick', ftString, 20);
DS.FieldDefs.Add('note', ftString, 40);
DS.CreateDataSet;
// While not (Eof(ftxt)) do
// begin
// ReadLn(ftxt,line);
//
// end;
result:=DS;
end;
procedure StrToRow(str:string);
begin
end;
end.