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

Ant - Сообщения: 1108
 - Зарегистрирован: Пн 27 авг 2007, 20:09
 

О, а как сделать pack? Что то я не смогла найти конкретных примеров.
			
		- Businka
 - Сообщения: 36
 - Зарегистрирован: Пт 07 сен 2012, 19:47
 
И кстати, ещё один вопросик. Посоветуйте какой стоит выбрать метод написания БД на Delphi. Может есть какой то более мудрый выбор чем *.CDS???
Цели:
- программки типа телефонных справочников;
- максимальная независимость от сторонних БД (установленного в Windows офиса или Delphi BDE);
- возможность запаролить БД;
- возможность сохранять в БД небольшие картинки (например фотографии абонентов);
- ну и желательно простота использования.
Буду рада рассмотреть примеры БД.
 
			
		Цели:
- программки типа телефонных справочников;
- максимальная независимость от сторонних БД (установленного в Windows офиса или Delphi BDE);
- возможность запаролить БД;
- возможность сохранять в БД небольшие картинки (например фотографии абонентов);
- ну и желательно простота использования.
Буду рада рассмотреть примеры БД.
- Businka
 - Сообщения: 36
 - Зарегистрирован: Пт 07 сен 2012, 19:47
 
Businka писал(а):О, а как сделать pack? Что то я не смогла найти конкретных примеров.
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&client=firefox-a&hs=v2d&rls=org.mozilla:ru%3Aofficial&sclient=psy-ab&q=%D0%BA%D0%B0%D0%BA+%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0%D1%82%D1%8C+%D0%B1%D0%B0%D0%B7%D1%83&oq=%D0%BA%D0%B0%D0%BA+%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0%D1%82%D1%8C+%D0%B1%D0%B0%D0%B7%D1%83&gs_l=serp.3...67027.72083.1.72999.18.12.0.6.6.0.185.1971.0j12.12.0...0.0...1c.1.obFXl6G7MFY&pbx=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&fp=5e872708dd656462&bpcl=35466521&biw=1680&bih=881
- 
				

Ant - Сообщения: 1108
 - Зарегистрирован: Пн 27 авг 2007, 20:09
 

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
 

Мне нужно упаковать именно Base.CDS а такова там нет.  
  А CDS я выбрала т.к. в нём немножко разобралась.
			
		- Businka
 - Сообщения: 36
 - Зарегистрирован: Пт 07 сен 2012, 19:47
 
Хотела бы рассмотреть исходники БД самые простейшие, добавление удаление записи.
			
		- Businka
 - Сообщения: 36
 - Зарегистрирован: Пт 07 сен 2012, 19:47
 
Есть 2 основных варианта работы - через компоненты типа TQuery (SQL) или через TTable. 
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
 

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

Ant - Сообщения: 1108
 - Зарегистрирован: Пн 27 авг 2007, 20:09
 

А через TTable файл не будет рости как в CDS???
			
		- Businka
 - Сообщения: 36
 - Зарегистрирован: Пт 07 сен 2012, 19:47
 
Я делала так (добавление):
ClientDataSet1.Append; //Создаётся новая запись в конце списка и переходит в режим редактирования
ClientDataSet1['Фамилия']:=Edit1.Text;
ClientDataSet1['Имя']:=Edit2.Text;
ClientDataSet1['Отчество']:=Edit3.Text;
ClientDataSet1.Post; //Сохраняется редакиование
			
		ClientDataSet1.Append; //Создаётся новая запись в конце списка и переходит в режим редактирования
ClientDataSet1['Фамилия']:=Edit1.Text;
ClientDataSet1['Имя']:=Edit2.Text;
ClientDataSet1['Отчество']:=Edit3.Text;
ClientDataSet1.Post; //Сохраняется редакиование
- Businka
 - Сообщения: 36
 - Зарегистрирован: Пт 07 сен 2012, 19:47
 
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
 

Скажите, а если я свою БД буду записывать в ini файл? Какие минусы будут в этой "типа" БД????  
  Ну не учитывая то, что полностью незащищённые данные в такой БД.
			
		- Businka
 - Сообщения: 36
 - Зарегистрирован: Пт 07 сен 2012, 19:47
 
Businka писал(а):БД буду записывать в ini файл
Первое, что приходит на ум - Я не знаю компонент, которые бы позволяли работать с базой в ini-файле.
Второе - практически однозначно такая работа будет значительно медленнее.
Ну и банальный вопрос - А ЗАЧЕМ???? Есть простой старый DBase III/IV (dbf), есть фоксовские базы, есть mdb... Зачем изобретать одноколесный велосипед?
- 
				

Ant - Сообщения: 1108
 - Зарегистрирован: Пн 27 авг 2007, 20:09
 

НАПИСАТЬ ОТВЕТ
			Сообщений: 25
			 • Страница 1 из 2 • 1, 2
		
	
	![]()  | 
	Новые сообщения | ![]()  | 
	Нет новых сообщений | ![]()  | 
	Форум закрыт | 
									
	Powered by рhрBВ © 2000 — 2012 рhрBВ Grоup Русская поддержка phpBB
Стиль разработан специально для Сугомак.ру
дизайн стиля:
		
	
	
	
	
					
					
	Стиль разработан специально для Сугомак.ру
дизайн стиля:


