Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

Таблица из текстового файла   Найти похожие ветки 

 
Xmen   (2008-11-28 16:01) [0]

Привет мастерам!
У меня такой случае. Нужно использовать текстовый файл как базу, то есть в программе нужно использовать справочники с элементами таблицы. Записи обычно 20 - 25 шт, иногда нужно их освежить (удалить, редактировать, добавить). Для этого я бы не хотел использовать какое то СУБД, а воспользоваться простым текстовым файлом. В каком направление посоветуете мне работать.


 
Ega23 ©   (2008-11-28 16:04) [1]

XML + TClientDataSet


 
Sergey13 ©   (2008-11-28 16:05) [2]

> [0] Xmen   (28.11.08 16:01)
> Для этого я бы не хотел использовать какое то СУБД

Почему? Зачем тогда в Базы запостил?


 
Xmen   (2008-11-28 16:13) [3]


> > [0] Xmen   (28.11.08 16:01)> Для этого я бы не хотел использовать
> какое то СУБДПочему? Зачем тогда в Базы запостил?

Ну мне нужно работать как с базой но в роле хранилиша должно быть текстовый файл.


 
stas ©   (2008-11-28 16:17) [4]

Xmen   (28.11.08 16:13) [3]
cxGrid


 
Sergey13 ©   (2008-11-28 16:20) [5]

> [3] Xmen   (28.11.08 16:13)

Ну так смысл то какой в этом?


 
Jeer ©   (2008-11-28 16:38) [6]


> Xmen   (28.11.08 16:01)
>
> Привет мастерам!
> У меня такой случае. Нужно использовать текстовый файл как
> базу, то есть в программе нужно использовать справочники
> с элементами таблицы. Записи обычно 20 - 25 шт, иногда нужно
> их освежить (удалить, редактировать, добавить). Для этого
> я бы не хотел использовать какое то СУБД, а воспользоваться
> простым текстовым файлом. В каком направление посоветуете
> мне работать.


В простом направлении:

- составить список потребной функциональности по доступу к данным.
- определиться со структурой данных;
- "нарисовать" интерфейс доступа к определенной структуре данных на основе составленного списка функциональности;


 
Сергей М. ©   (2008-11-28 16:43) [7]


> Xmen


Весьма полезный ликбез по теме
http://www.rsdn.ru/article/delphi/dbcontrols.xml


 
palva ©   (2008-11-28 21:59) [8]


> Ну мне нужно работать как с базой но в роле хранилиша должно
> быть текстовый файл.

odbc может подключаться к текстовому файлу как к таблице. Конечно, файл должен иметь "табличный вид", поля отделены друг от друга разделителем или выровнены по ширине. Подсоединяйтесь через ADO и читайте. Писать, по-моему, нельзя. (Я не пробовал.)


 
Труп Васи Доброго ©   (2008-11-29 00:10) [9]

Тебе убиться как принципиально именно текстовый файл использовать?
Может табличка старого доброго Excel спасёт твою карму?
И просто посмотреть на него можно и ручками подправить и в программе как таблицу подключить со всеми вытекающими прелестями.


 
Xmen   (2008-12-01 07:01) [10]

Делаю простую прогу для печати платежек. Что бы сохранить данные о клиентах нужно было их данные сохранить в техтовом файле. Так как нужно простая прога я бы нехотел исползовать базу.
Пример сделал так
procedure TForm2.RzBitBtn1Click(Sender: TObject);
var
 F: file of TMember;
 i: Integer;
begin
 AssignFile(F,"client.dat");
 Rewrite(F);
 try
   Members[1].name:="2 - болалар богчаси.";
   Members[1].acc:="12345678912345678900";
   Members[1].bcode:="00452";
   Members[1].bname:="Gallabank";
   Members[1].okonx:="1042572";
   Members[1].inn:="3415821";
   Members[2].name:="13 - мактаб.";
   Members[2].acc:="12345671912345678900";
   Members[2].bcode:="00521";
   Members[2].bname:="Pakhtabank";
   Members[2].okonx:="7842572";
   Members[2].inn:="3414521";
   Members[4].name:="5 - мехрибонлик уйи.";
   Members[4].acc:="22345678912345678910";
   Members[4].bcode:="00332";
   Members[4].bname:="NBU";
   Members[4].okonx:="1490572";
   Members[4].inn:="6415828";
   for i := 1 to 50 do write(F,Members[i]);
 finally
   CloseFile(F);
 end;
end;

И ввод в таблицу
procedure TForm2.FormShow(Sender: TObject);
var
 ReadMembers: array[1..50] of TMember;
 F: file of TMember;
 i: Integer;
begin
 AssignFile(F,"client.dat");
 Reset(F);
 try
   i:=0;
   while not Eof(F) do
   begin
     read(F,ReadMembers[i]);
     StringGrid1.Cells[0,i]:=ReadMembers[i].name;
     StringGrid1.Cells[1,i]:=ReadMembers[i].acc;
     StringGrid1.Cells[2,i]:=ReadMembers[i].bcode;
     StringGrid1.Cells[3,i]:=ReadMembers[i].bname;
     StringGrid1.Cells[4,i]:=ReadMembers[i].okonx;
     StringGrid1.Cells[5,i]:=ReadMembers[i].inn;
     i:=i+1;

   end;
  finally
    CloseFile(F);
  end;  

end;
Но так не оченто получается


 
Сергей М. ©   (2008-12-01 08:40) [11]


> Что бы сохранить данные о клиентах нужно было их данные
> сохранить в техтовом файле


Почему именно текстовом-то ?
Это что, блажь или чем-то обоснованное решение ?
Ну возьми ты, к примеру, TClientDataSet - он, с одной стороны, есть наследник TDataSet со всеми его прелестями, а с другой умеет одним махом (LoafFromFile/SaveToFile) загружать/выгружать из/в файл набор данных в своем спец.формате


 
Xmen   (2008-12-01 08:52) [12]


> Сергей М. ©   (01.12.08 08:40) [11]
> > Что бы сохранить данные о клиентах нужно было их данные
> > сохранить в техтовом файлеПочему именно текстовом-то ?
> Это что, блажь или чем-то обоснованное решение ?Ну возьми
> ты, к примеру, TClientDataSet - он, с одной стороны, есть
> наследник TDataSet со всеми его прелестями, а с другой умеет
> одним махом (LoafFromFile/SaveToFile) загружать/выгружать
> из/в файл набор данных в своем спец.формате


А как это?


 
Sergey13 ©   (2008-12-01 09:05) [13]

> [10] Xmen   (01.12.08 07:01)
> Так как нужно простая прога я бы нехотел исползовать базу.

А ты еще и винду не используй - зачем такое усложнение.

> Делаю простую прогу для печати платежек
И через год-полтора, когда платежек будут тысячи, заказчик вдруг (все события подобного рода происходят обычно ВДРУГ!) захочет посмотреть статистику свох платежей в разных разрезах или (не дай бог) поработать над платежками совместно.


 
Xmen   (2008-12-01 09:17) [14]

Ну я насчет простого я специально. Это прога для маленкой конторы, а там клиенты максимум 10-15. И им излишный такие навароты.


 
Sergey13 ©   (2008-12-01 09:22) [15]

> [14] Xmen   (01.12.08 09:17)
> И им излишный такие навароты.

Какие навороты? Статистика по платежам у начальника? Более 1 человека вводящего платежки?
В чем сложность использования СУБД? В наличии нескольких файлов вместе с программой?


 
Xmen   (2008-12-01 09:45) [16]

Ну я хотел без СУБД. :(


 
Сергей М. ©   (2008-12-01 10:05) [17]


> Xmen   (01.12.08 08:52) [12]


Что "как это" ?


 
Виталий Панасенко   (2008-12-01 10:16) [18]


> Xmen   (01.12.08 08:52) [12]

Имеются спецметоды у CDS - SaveToFile/LoadFromFile, Но я бы использовал СУБД... MS Access формат например...доступ к БД через ADO(Jet) и все дела.


 
ilshat   (2008-12-01 10:20) [19]

чувствую я что автор топика родственник "писателя" банк-клиента банка АльбаАльянс... тоже гений организовал хранение платежек в тектовиках (с полями фиксированной ширины).. теперь ни просмотреть историю, ничего нельзя :(
ну на крайняк есть типизированные файлы


 
Anatoly Podgoretsky ©   (2008-12-01 10:28) [20]


> Делаю простую прогу для печати платежек. Что бы сохранить
> данные о клиентах нужно было их данные сохранить в техтовом
> файле.

Тебе нужен Эксель.
Он самодостаточен для данной работы.


 
clickmaker ©   (2008-12-01 12:38) [21]

> Это прога для маленкой конторы, а там клиенты максимум 10-
> 15

можно какую-нибудь embedded db
типа firebird


 
Xmen   (2008-12-01 14:21) [22]


> clickmaker ©   (01.12.08 12:38) [21]
> > Это прога для маленкой конторы, а там клиенты максимум
> 10-> 15можно какую-нибудь embedded dbтипа firebird


это будет мене чем килобайт информации, ради этого я бы нехотел исползовать пушку. Мне для этого достаточно перочиного ножа :)


 
Сергей М. ©   (2008-12-01 14:27) [23]


> Xmen   (01.12.08 14:21) [22]
>
>


Сказано же - откажись от текст.формата контейнера (ибо ничем до сих пор не аргументировано, а значит блажь) в пользу TClientDataset"а.

Удовольствие от его использования получишь до поросячьего визга)

Я серьезно.


 
Sergey13 ©   (2008-12-01 14:41) [24]

> [22] Xmen   (01.12.08 14:21)
> это будет мене чем килобайт информации

Так ты пишешь программу для печати одного экземпляра платежки?!!! Ну тогда да. Но проще в ексель или в ворде напечатать.


 
MsGuns ©   (2008-12-01 14:44) [25]

Можно использовать в качестве хранилища простейшей базы данных текстовый файл, но это имеет много минусов
1) Файл никак не защищен от случайного илии намеренного изменения без Вашей программы
2) Файл не может быть использован как многопользовательский (два одновременно работающих ПК - это уже многопользовалельский режим)
3) Файл будет "тормозить" при загрузке и сохранении
4) Файл не может хранить данные о нескольких разных объектах либо это будет "сложный" файл и методы работы с ним также будут сложными
5) Файл исключает возможность частичной выборки, его надо будет постоянно загружать полностью. Иначе-см. 4) со всеми неприятными последствиями
6) Файл не "защищен" от некорректных данных либо их неполноты (отсутствия)

Если все же "нада", то не следует работать с таким файлом просто как со строками (например через TStringGrid или TListView, обо в этом случае все поиски, сортировки, фильтры и т.д. придется делать ручками, а в виду очевидного отсутствия у Вас опыта в таких делах, все это будет тормознуто и глючно. Воспользуйтесь подсказанным выше TClientDataSet, у которого масса фич именно для работы с табличными данными. Хотя в этом случае Вам придется вручную и загружать в него данные и сохранять затем обратно в файл. Да и все перечисленные в начале минусы останутся.

ИМХО, все же Экслеь или для многопользовательского доступа (так сказать на "вырост") не поленитесь освоить какую-нибудь СУБД. Убежден, рано или поздно этот опыт окажется весьма полезным


 
MsGuns ©   (2008-12-01 14:47) [26]

И еще.
Для платежей одной таблицы (файла) явно недостаточно. Надо еще как минимум 3 справочника: банков, контрагентов и видов платежей. Да и выписки тоже по-хорошему надо хранить - а это еще одна таблица.


 
clickmaker ©   (2008-12-01 14:57) [27]

> я бы нехотел исползовать пушку. Мне для этого достаточно
> перочиного ножа

так а embedded - это и есть что-то типа перочинного ножа
пушка - это ms sql или оракл


 
Xmen   (2008-12-01 15:25) [28]

Я сам в проектах использую FB - мой любимый СУБД.
У меня в справочнике будет толка один файл с информации.
Имя клиенте, р/с,код банка, МФО банка, имя банка, оконх, инн и все в одной строки. А клиентов штук 10 - 15. Для 15 строк не хочется беспокоить FB. А так мне легче было бы его использовать. Мне понравилось предложение насчет TClientDataSet. И как правильно использовать его? Немножко примера не помешаеть мне.


 
Сергей М. ©   (2008-12-01 15:39) [29]


> как правильно использовать его?


Используй его как любой другой наследник TDataSet.
Основная разница в том, что открытие НД происходит при вызове CreateDataset (создается пустой НД заданной тобой структуры) или при вызове LoadFromFile (готовая структура НД вместе с самими ранее сохраненными методом SaveToFile данными грузится из указанного файла)


 
Anatoly Podgoretsky ©   (2008-12-01 16:02) [30]

> Xmen  (01.12.2008 15:25:28)  [28]

То есть даже платежки не предусмотрены, и все таки почему не хочешь использовать Эксель, он конечно слишком мощен для данной задачи и его не продашь клиенту, как программу, ну разве лапши на уши навешать. Для такой задачи достаточно бумаги и карандаша или один текстовый файл и блокнот.


 
Loginov Dmitry ©   (2008-12-01 22:31) [31]

> А клиентов штук 10 - 15. Для 15 строк не хочется беспокоить
> FB


Это одних только клиентов 15 шт! А организация, которой предназначена эта прога, вероятно будет регулярно оформлять платежи тем или иным клиентам. В день по платежу, это уже 300 документов, а никак не 15 строк!!! А за FB не нужно беспокоиться, это инструмент как раз и предназначен для хранения всевозможных данных, в том числе и "15 строк клиентов".


> Тебе нужен Эксель.
> Он самодостаточен для данной работы.


+1)


 
Xmen   (2008-12-03 10:29) [32]

Спасибо за советы я уже начал работат с базой FB. Долго думал после ваших советов и решил нужно всетаки сделать полноценную прогу или хотябы похоже нанего. И так новый вопрос как правильно организовать структуру программы?


 
Sergey13 ©   (2008-12-03 10:54) [33]

> [32] Xmen   (03.12.08 10:29)
> И так новый вопрос как правильно организовать структуру
> программы?

читать умеешь?

> [26] MsGuns ©   (01.12.08 14:47)


 
Сергей М. ©   (2008-12-03 10:59) [34]


> Xmen


Если ты на время откажешься от затеи с FB и задействуешь TClientDataset, решив тем самы проблему с контейнером простейшим и очевиднейшим способом, то впоследствии заменить файловый контейнер на FB будет очень просто, без радикальной переделки программы : вместо LoadFromFile - Open, вместо SaveToFile - ApplyUpdates


 
MsGuns ©   (2008-12-03 12:40) [35]

>Xmen   (03.12.08 10:29) [32]
>как правильно организовать структуру программы?

Вы хотели сказать "структуру БАЗЫ ДАННЫХ" ?
Если да, то быстрее всего просветиться в этом вопросе можно просто внимательно ознакомившись с 1С (типовая конфигурация). Вы по крайней мере "въедете" в предметную область, определитесь с объектами и их свойствами. После чего "нарисовать" модель БД будет много проще.


 
Xmen   (2008-12-03 13:17) [36]

Пока сдела 2 таблицы.

CREATE TABLE CLIENTS (
   ID            INTEGER NOT NULL,
   CL_NAME       VARCHAR(150),
   CL_ACC        CHAR(20),
   CL_BANK_CODE  INTEGER,
   CL_BANK_NAME  VARCHAR(150),
   CL_OKONX      INTEGER,
   CL_INN        INTEGER
);

ALTER TABLE CLIENTS ADD CONSTRAINT PK_CLIENTS PRIMARY KEY (ID);

CREATE TABLE PLATEJKA (
   ID           INTEGER NOT NULL,
   CL_ID        INTEGER,
   PL_NUM       INTEGER,
   PL_DATE      DATE,
   PL_SUMMA     NUMERIC(15,2),
   PL_SUM_WORD  VARCHAR(200),
   PL_PUR_PAY   VARCHAR(200)
);
Сделал толко одну табицу справочника.

>как правильно организовать структуру программы?
Я и самой проги хотел спросить.


 
clickmaker ©   (2008-12-03 13:26) [37]

> CL_

это лишнее. Зачем усложнять?

> CL_ID        

лучше CLIENT_ID

INN может не влезть в integer (там же 12 цифр, насколько я знаю)


 
Сергей М. ©   (2008-12-03 13:28) [38]


> PL_SUM_WORD


Вот эту хрень сразу убирай - никому в базе она не нужна


 
Anatoly Podgoretsky ©   (2008-12-03 13:54) [39]


> INN может не влезть в integer (там же 12 цифр, насколько
> я знаю)

INN это не число, а код, поэтому никаких числовых типов.


 
Xmen   (2008-12-03 16:02) [40]

У нас ИНН 7 значные



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.009 c
15-1256481374
berlios
2009-10-25 17:36
2009.12.27
Треугольник


15-1256487519
Kolan
2009-10-25 19:18
2009.12.27
Статья «Обобщённое программирование(generics) в Delphi 2009 ...»


2-1257739169
Андрей Смирнов
2009-11-09 06:59
2009.12.27
Как правильно передать массив URL в Функцию (WinInet)


2-1257844185
defen
2009-11-10 12:09
2009.12.27
закрытие приложения


15-1256324917
GDI+
2009-10-23 23:08
2009.12.27
Почему многопоточное программирование на Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский