Страница 1 из 2

Программирование БД

СообщениеДобавлено: 21 окт 2012, 00:42 
Businka
Помогите плиззз. Создала БД в Delphi по статье http://www.delphicode.org/database/clientdataset.htm
Сначала всё было ок, а потом я заметила, что файл БД растёт.
Даже если я в программе своей удаляю все записи, они всё равно хранятся в файле БД.
Предположим, в программе создадим 10 записей и удалим 10 записей, файл БД увеличится в размере на 10 записей всёравно.
Я так понимаю TClientDataSet ведёт какой то лог всех когда либо существующих записей и из-за этого файл БД неуклонно растёт в не зависимости от реальных записей в БД.
Как решить проблему? Есть тут программисты пишущие программки БД таким же методом???
:oops:

СообщениеДобавлено: 21 окт 2012, 13:30 
Ant
Нужно сделать Pack.
Записи реально из таблицы не удаляются, а только помечаются на удаление.
Для их окончательного удаления - нужно упаковать таблицу.

Re: Программирование БД

СообщениеДобавлено: 21 окт 2012, 13:41 
Businka
О, а как сделать pack? Что то я не смогла найти конкретных примеров.

Re: Программирование БД

СообщениеДобавлено: 21 окт 2012, 15:49 
Businka
И кстати, ещё один вопросик. Посоветуйте какой стоит выбрать метод написания БД на Delphi. Может есть какой то более мудрый выбор чем *.CDS???

Цели:
- программки типа телефонных справочников;
- максимальная независимость от сторонних БД (установленного в Windows офиса или Delphi BDE);
- возможность запаролить БД;
- возможность сохранять в БД небольшие картинки (например фотографии абонентов);
- ну и желательно простота использования.

Буду рада рассмотреть примеры БД.

:oops:

Re: Программирование БД

СообщениеДобавлено: 21 окт 2012, 21:27 
Ant

СообщениеДобавлено: 21 окт 2012, 21:41 
Ant
Businka писал(а):И кстати, ещё один вопросик. Посоветуйте какой стоит выбрать метод написания БД на Delphi. Может есть какой то более мудрый выбор чем *.CDS???


А чем обоснован выбор CDS? :)
https://www.google.com/search?q=CDS&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a#hl=ru&gs_nf=3&tok=l4CvGLvXE2S3ivFZobxgtg&pq=%D0%BA%D0%B0%D0%BA%20%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B1%D0%B0%D0%B7%D1%83&cp=37&gs_id=4eh&xhr=t&q=Delphi%20%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%20%D1%81%D1%83%D0%B1%D0%B4%20%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&pf=p&client=firefox-a&rls=org.mozilla:ru%3Aofficial&sclient=psy-ab&oq=Delphi+%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80+%D1%81%D1%83%D0%B1%D0%B4+%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&gs_l=&pbx=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&fp=5e872708dd656462&bpcl=35466521&biw=1680&bih=881

Businka писал(а):максимальная независимость от сторонних БД (установленного в Windows офиса или Delphi BDE);


Н.п. ADO.

Businka писал(а):возможность сохранять в БД небольшие картинки (например фотографии абонентов);


Мне кажется, что практически у всех есть мемо-поля.

Businka писал(а):ну и желательно простота использования.


Вроде все практически одинаковы.

Businka писал(а):Буду рада рассмотреть примеры БД.


Примеры структуры баз данных? Или используемых движков?

Re: Программирование БД

СообщениеДобавлено: 22 окт 2012, 00:10 
Businka
Мне нужно упаковать именно Base.CDS а такова там нет. :( А CDS я выбрала т.к. в нём немножко разобралась.

Re: Программирование БД

СообщениеДобавлено: 22 окт 2012, 00:11 
Businka
Хотела бы рассмотреть исходники БД самые простейшие, добавление удаление записи.

СообщениеДобавлено: 22 окт 2012, 08:25 
Ant
Есть 2 основных варианта работы - через компоненты типа TQuery (SQL) или через TTable.

SQL

Добавление записи
Код: Выделить всё
Query1.SQL.Clear;
Query1.SQL.Add('INSERT into '+param.tb_obor+IntToStr(param.obor)+' (comp, podr, form, dt, st, cagent, opl, obyaz, summ, sys_user, sys_date, status, inn, vid, cena, kol, opl_vid) '+
           'SELECT comp, podr, form, dt, st, cagent, opl, obyaz, summ, sys_user, sys_date, status, inn, vid, cena, kol, opl_vid from '+param.tb_obor+IntToStr(param.obor)+'n '+
           'where kod='+IntToStr(FormBig.TableObor.FieldValues['kod']));
Query1.ExecSQL;


Удаление записЕЙ
Код: Выделить всё
Query1.SQL.Clear;
Query1.SQL.Add('DELETE from '+param.tb_obor+'1n where dt>='''+DateToStr(param.DTplan_ned_b,datform)+''' AND dt<='''+DateToStr(param.DTplan_ned_e,datform)+'''');
Query1.ExecSQL;


TTable

Добавление записи
Код: Выделить всё
Table1.Append;
Table1.FieldByName('FAM').AsString:=Edit1.Text;
Table1.FieldByName('NAME').AsString:=Edit2.Text;
Table1.FieldByName('OTCH').AsString:=Edit3.Text;
Table1.FieldByName('DATE_B').AsString:=MaskEdit1.Text;
Table1.FieldByName('INDEX_PR').AsString:=Edit5.Text;
Table1.FieldByName('CITY_PR').AsString:=Edit6.Text;
Table1.FieldByName('STREET_PR').AsString:=Edit7.Text;
Table1.FieldByName('DOM_PR').AsString:=Edit8.Text;
Table1.FieldByName('KORP_PR').AsString:=Edit9.Text;
Table1.FieldByName('KV_PR').AsString:=Edit10.Text;
Table1.FieldByName('INDEX_REG').AsString:=Edit11.Text;
Table1.FieldByName('CITY_REG').AsString:=Edit12.Text;
Table1.FieldByName('STREET_REG').AsString:=Edit13.Text;
Table1.FieldByName('DOM_REG').AsString:=Edit14.Text;
Table1.FieldByName('KORP_REG').AsString:=Edit15.Text;
Table1.FieldByName('KV_REG').AsString:=Edit16.Text;
Table1.FieldByName('PASPORT').AsString:=Edit17.Text;
Table1.FieldByName('PASP_SER').AsString:=Edit18.Text;
Table1.FieldByName('PASP_NOM').AsString:=Edit19.Text;
Table1.FieldByName('PASP_DAT').AsString:=MaskEdit2.Text;
Table1.FieldByName('PASP_VYD').AsString:=Edit20.Text;
Table1.FieldByName('PLACE_R').AsString:=Edit21.Text;
Table1.FieldByName('TEL_DOM').AsString:=Edit22.Text;
Table1.FieldByName('TEL_RAB').AsString:=Edit23.Text;
Table1.FieldByName('TEL_MOB').AsString:=Edit24.Text;
Table1.Post;


Удаление текущей записи
Код: Выделить всё
Table1.Delete

СообщениеДобавлено: 22 окт 2012, 09:06 
Ant
Businka писал(а):CDS я выбрала т.к. в нём немножко разобралась.


По сути без разницы с какой СУБД/движком работать - методы у них обычно одинаковые. SQL - тоже в принципе одинаков, разница в диалектах обычно вида - здесь используется формат даты ГГГГ-ММ-ДД, а там ДД/ММ/ГГГГ, здесь кавычки ", а там '... Есть правда и более неприятные моменты - н.п. насколько Я знаю MySQL не умеет работать с вложенными запросами (т.е. запрос вида Select ВыбираемыеПоля From ИмяТаблицы Where УсловияЗаписей In (Select ЧегоТоТам From ИмяТаблицы Where УсловияЗаписей) работает значительно медленнее, чем если запрос разбить на два).

Re: Программирование БД

СообщениеДобавлено: 22 окт 2012, 13:59 
Businka
А через TTable файл не будет рости как в CDS???

Re: Программирование БД

СообщениеДобавлено: 22 окт 2012, 14:00 
Businka
Я делала так (добавление):

ClientDataSet1.Append; //Создаётся новая запись в конце списка и переходит в режим редактирования
ClientDataSet1['Фамилия']:=Edit1.Text;
ClientDataSet1['Имя']:=Edit2.Text;
ClientDataSet1['Отчество']:=Edit3.Text;
ClientDataSet1.Post; //Сохраняется редакиование

СообщениеДобавлено: 22 окт 2012, 21:36 
Ant
Businka писал(а):А через TTable файл не будет рости как в CDS???


TTable - это компонент. А CDS - это формат базы данных.
Примерно - у меня есть левая рука (компонента), а вообще - Я принадлежу к роду хомо сапиенс (вид).

Businka писал(а):Я делала так (добавление):

ClientDataSet1.Append; //Создаётся новая запись в конце списка и переходит в режим редактирования
ClientDataSet1['Фамилия']:=Edit1.Text;
ClientDataSet1['Имя']:=Edit2.Text;
ClientDataSet1['Отчество']:=Edit3.Text;
ClientDataSet1.Post; //Сохраняется редакиование


Ничего не напоминает? :)

Ant писал(а):Добавление записи
Table1.Append;
Table1.FieldByName('FAM').AsString:=Edit1.Text;
Table1.FieldByName('NAME').AsString:=Edit2.Text;
Table1.FieldByName('OTCH').AsString:=Edit3.Text;
Table1.Post;


Предлагаю на первых порах не заморачиваться с крутыми движками, упаковкой базы и нарезкой индексов, а сделать сперва работающую программу на dbf, пусть даже на BDE. Переделать телефонный справочник на другой движок - не проблема.

Re: Программирование БД

СообщениеДобавлено: 29 окт 2012, 20:27 
Businka
Скажите, а если я свою БД буду записывать в ini файл? Какие минусы будут в этой "типа" БД???? :) Ну не учитывая то, что полностью незащищённые данные в такой БД.

СообщениеДобавлено: 30 окт 2012, 08:06 
Ant
Businka писал(а):БД буду записывать в ini файл


Первое, что приходит на ум - Я не знаю компонент, которые бы позволяли работать с базой в ini-файле.
Второе - практически однозначно такая работа будет значительно медленнее.

Ну и банальный вопрос - А ЗАЧЕМ???? Есть простой старый DBase III/IV (dbf), есть фоксовские базы, есть mdb... Зачем изобретать одноколесный велосипед?