![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в памяти хранить таблицу из 5 колонок?
DINOEL © (2007-08-09 14:24:00)Здравствуйте, уважаемые.
У меня есть такая табличка в файле
Дата | Номер | Наименование | Сумма
, я её должен загрузить в память для дальнейшей работы (разберу строку)
Подскажите, пожалуйста, как мне хранить данные в памяти и работать с данными ?
В виде массива ?
Или может быть есть что нибудь лучшее ?
DINOEL (2007-08-09 16:48:00) [1]всем спасибо, буду думать :)
stanislav (2007-08-09 16:46:00) [2]Sergey13 © (09.08.07 16:35) [25]
>По мне лучше с ними вообще не работать
Опередил :-)
stanislav (2007-08-09 16:35:00) [3]tesseract © (09.08.07 16:31) [23]
Можно и через ADO с помощью драйвера JET, намного лучше чем все остальное, сможешь использовать ряд функций недоступных обычным DBF
Если есть возможность не работать с dbf, то и не начинай - сразу MSSQL
Sergey13 (2007-08-09 16:35:00) [4]> [20] DINOEL © (09.08.07 16:22)
> с помощью чего лучше всего работать с DBF-файлами
По мне лучше с ними вообще не работать (особенно заново разрабатывать), если проект не 1-2 табличный.
К тому же DBF - нет такой СУБД. Есть много СУБД, где такое расширениеимеют файлы данных. Так что DBF DBF-у рознь.
novill (2007-08-09 16:33:00) [5]> [0] DINOEL © (09.08.07 14:24)
А ты пробовал TclientDataset ???
tesseract (2007-08-09 16:31:00) [6]
> DBF - BDE
Лучше через dbExpress. BDE чуть-чуть скончался.
DINOEL (2007-08-09 16:31:00) [7]stanislav ,Tnx !
stanislav (2007-08-09 16:28:00) [8]DINOEL © (09.08.07 16:22) [20]
DBF - BDE
MSSQL - ADO
DINOEL (2007-08-09 16:22:00) [9]Sergey13
Кстати,раз уж заговорили, может быть подскажете на будущее, с помощью чего лучше всего работать с DBF-файлами ?
DINOEL (2007-08-09 16:13:00) [10]Kolan ,спасибо за ссылку, обязательно прочту !
Sergey13, дело в том, что это разовая работа и данные хранятся именно в текстовом файле, поэтому сделаю с помощью класса и TStrings, тем самым изучу ещё предметную область ,но совсем скоро, действительно нужно будет писать приложение для работы с DBF а так же mssql - вот уж где ,наверное придётся попотеть :)
Kolan (2007-08-09 15:55:00) [11]> Может подумать в эту сторону?
Я тоже согласен что это работа с БД, но все выше сказаное остаётся в силе.
Только вместо LoadFromFile будет SQL запрос
Sergey13 (2007-08-09 15:53:00) [12]> [15] DINOEL © (09.08.07 15:32)
Не покидает меня смутное ощущение, что ты начинаешь работу с базами данных, но еще не осознал этого. 8-)
Может подумать в эту сторону? Типа перегнать твой файлик в какую нибудь СУБД-шку типа xBase (можно через Ексель) и работать методами БД?
Kolan (2007-08-09 15:40:00) [13]> Огромное спасибо за то
Незачто, знай делая так как я предложил ты поступаешь хорошо(очень хорошо) с точки зрения теори ООП.
Прочти книгу:
Craig_Larman_Applying_UML_and_patterns_SE.djvu
Брать тут:
http://www.uml2.ru/
Она сечас для тебя сложная. Но, имхо, чем раньше её прочтешь, тем лучьше для мозгов
DINOEL (2007-08-09 15:32:00) [14]Kolan, разобрался :)
Огромное спасибо за то ,что разложили ответ по полочкам !
Kolan (2007-08-09 15:30:00) [15]> Но вот непонятно (это уже теория DELPHI ) как потом обращаться
> к этим полям ? + при вызове этого метода старые значения
> полей же будут перетираться ?
Это вопрос я не понял.
Делаешь свойства:
TSaleLineItem = class
strict private
FName: string;
FNumber: Integer;
public
procedure AssignFromString(S: string);
property Name: string read FName write FName;
end;
Kolan (2007-08-09 15:28:00) [16]> Т.е. я создаю класс:
>
> TSaleLineItem = class
> strict private
> name:string;
> number:integer;
> и тд.
> public
> procedure AssignFromString(S: string);
> end;
Раз начинающие, замечу что правильнее оформлять надо:
TSaleLineItem = class
strict private
FName: string;
FNumber: Integer;
public
procedure AssignFromString(S: string);
end;
А так да верно.
> вызываю метод SaleLineItem.AssignFromString(параметр)
> и в качестве параметра передаю строку (которую получаю
> в цикле выбрав строки из файла)
Да имено так. Раз файл текстовый, то используйте TStringList чтобы загрузить. Получится как-то так:
var
Strings: TStrings;
I: Integer;
TempSaleLineItem: TSaleLineItem;
begin
Strings := TStringList.Create;
try
Strings.LoadFromFile('C:/t.txt');
for I := 0 to Strings.Count 1 do
begin
TempSaleLineItem := TSaleLineItem.Create;
TempSaleLineItem.AssignFromString(Strings[I]);
{SaleLineItemList сами думайте как его сюда передать.}
SaleLineItemList.Add(TempSaleLineItem);
end;
finally
Strings.Free;
end;
end;
DINOEL (2007-08-09 15:23:00) [17]Kolan
О ясно теперь, что мы класс наследуем от TObjectList
Большое спасибо за информацию !
DINOEL (2007-08-09 15:21:00) [18]Т.е. я создаю класс:
TSaleLineItem = class
strict private
name:string;
number:integer;
и тд.
public
procedure AssignFromString(S: string);
end;
вызываю метод SaleLineItem.AssignFromString(параметр)
и в качестве параметра передаю строку (которую получаю в цикле выбрав строки из файла) - в этом методе происходит парсинг этой строки и заполняю поля.
Но вот непонятно (это уже теория DELPHI ) как потом обращаться к этим полям ? + при вызове этого метода старые значения полей же будут перетираться ?
Прошу прощение за такие вопросы :)
Kolan (2007-08-09 15:19:00) [19]> Да, файлик будет на 1000 строк.
Это не очень много. Но если объем возрастет, то не стоит тащить(то есть загружать и создавать объекты) из фала все что там есть. Лучьше загружать то что надо, работать и удалять
Но повторю 1000 это мало, можно и все загрузить сразу. Выиграете в производительности
Kolan (2007-08-09 15:17:00) [20]Примерно так
procedure AssignFromString(S: string);
begin
FDate := Copy(S, 0, Pos(S, '|')-1);
end;
Если вам в памяти надо как бы всю таблицу(весь файл) представить.
То надо завести класс список строк:
TSaleLineItemList = class(TObjectList)
public
function Add(SaleLineItem: TSaleLineItem): Integer;
property Items[Index: Integer]: TSaleLineItem read GetItem write SetItem;
end;
Как правильно реализовать
Add, GetItem, SetItemможно подсмотреть вTObjectList(он находится в модуле Contnrs).