Модератор: Ural

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

СООБЩЕНИЯ

# 

21 окт 2012, 00:42 

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

# 

21 окт 2012, 13:30 

Нужно сделать Pack.
Записи реально из таблицы не удаляются, а только помечаются на удаление.
Для их окончательного удаления - нужно упаковать таблицу.
Аватара пользователя
Ant
 
Изображение
Сообщения: 1108
Зарегистрирован: Пн 27 авг 2007, 20:09

# 

21 окт 2012, 13:41 

О, а как сделать pack? Что то я не смогла найти конкретных примеров.
Businka
 
Сообщения: 36
Зарегистрирован: Пт 07 сен 2012, 19:47

# 

21 окт 2012, 15:49 

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

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

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

:oops:
Businka
 
Сообщения: 36
Зарегистрирован: Пт 07 сен 2012, 19:47


# 

21 окт 2012, 21:41 

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 писал(а):Буду рада рассмотреть примеры БД.


Примеры структуры баз данных? Или используемых движков?
Аватара пользователя
Ant
 
Изображение
Сообщения: 1108
Зарегистрирован: Пн 27 авг 2007, 20:09

# 

22 окт 2012, 00:10 

Мне нужно упаковать именно Base.CDS а такова там нет. :( А CDS я выбрала т.к. в нём немножко разобралась.
Businka
 
Сообщения: 36
Зарегистрирован: Пт 07 сен 2012, 19:47

# 

22 окт 2012, 00:11 

Хотела бы рассмотреть исходники БД самые простейшие, добавление удаление записи.
Businka
 
Сообщения: 36
Зарегистрирован: Пт 07 сен 2012, 19:47

# 

22 окт 2012, 08:25 

Есть 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
Аватара пользователя
Ant
 
Изображение
Сообщения: 1108
Зарегистрирован: Пн 27 авг 2007, 20:09

# 

22 окт 2012, 09:06 

Businka писал(а):CDS я выбрала т.к. в нём немножко разобралась.


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

# 

22 окт 2012, 13:59 

А через TTable файл не будет рости как в CDS???
Businka
 
Сообщения: 36
Зарегистрирован: Пт 07 сен 2012, 19:47

# 

22 окт 2012, 14:00 

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

ClientDataSet1.Append; //Создаётся новая запись в конце списка и переходит в режим редактирования
ClientDataSet1['Фамилия']:=Edit1.Text;
ClientDataSet1['Имя']:=Edit2.Text;
ClientDataSet1['Отчество']:=Edit3.Text;
ClientDataSet1.Post; //Сохраняется редакиование
Businka
 
Сообщения: 36
Зарегистрирован: Пт 07 сен 2012, 19:47

# 

22 окт 2012, 21:36 

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. Переделать телефонный справочник на другой движок - не проблема.
Аватара пользователя
Ant
 
Изображение
Сообщения: 1108
Зарегистрирован: Пн 27 авг 2007, 20:09

# 

29 окт 2012, 20:27 

Скажите, а если я свою БД буду записывать в ini файл? Какие минусы будут в этой "типа" БД???? :) Ну не учитывая то, что полностью незащищённые данные в такой БД.
Businka
 
Сообщения: 36
Зарегистрирован: Пт 07 сен 2012, 19:47

# 

30 окт 2012, 08:06 

Businka писал(а):БД буду записывать в ini файл


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

Ну и банальный вопрос - А ЗАЧЕМ???? Есть простой старый DBase III/IV (dbf), есть фоксовские базы, есть mdb... Зачем изобретать одноколесный велосипед?
Аватара пользователя
Ant
 
Изображение
Сообщения: 1108
Зарегистрирован: Пн 27 авг 2007, 20:09

НАПИСАТЬ ОТВЕТ

   Новые сообщения Новые сообщения    Нет новых сообщений Нет новых сообщений    Форум закрыт Форум закрыт