Технический форум
Вернуться   Технический форум > Программирование > Библиотека > Программы и программирование


Ответ
 
Опции темы Опции просмотра
Старый 07.04.2007, 21:35   #1 (permalink)
VipeR
Имперская инквизиция
 
Аватар для VipeR
 
Регистрация: 14.02.2007
Сообщений: 6,097
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3046
По умолчанию Базы данных на Delphi

Этот небольшой гайд описывает создание СУБД в среде Borland Delphi 7. База данных будет нести показательный характер (в смысле несложная :)) Смысл работы - создать базу данных автомобилей, в которой указаны модель, комплектация, производитель, дополнительные опции, цена. Разработать форму для оформления продажи автомобиля в которой нужно указать фамилию, имя, отчество покупателя, покупаемый автомобиль с перечислением всех характеристик. Оформить форму заказа и выдать на печать. Информацию о продаже занести в базу данных

В базах данных основополагающим элементом являются таблицы. Для создания базы данных как раз сначала и нужно создать необходимые таблицы. Компонент для создания таблиц называется Database Desktop (он находится в \Программы\Borland Delphi 7). Воть главное окно этой программки:



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

пользуюсь типом Paradox 7, с ним и будем работать :) Была создана таблица Clients, где по сабжу будут храниться записи о продажах. ВСЕ текстовые поля должны обязательно иметь размерность, а у числовых полей ее не должно быть. К модели автомобиля (я объединил это поле с маркой) мы привяжем фотографию стального коня :



Теперя надо зарегить базу данных. Надо зайти в SQL Explorer (находится в том же меню, где и Database Desktop). Зашли в прогу, выбираем пункт меню Object => New... Опять появится крохотное оконце, где ниче менять не надо (драйвер базы данных - STANDARD). Тама пишем путь к базе данных (та папка, куда вы сохраняли все таблицы. Ведь вы их в одну папку покидали, надеюсь? :)) Пишем в поле path путь к своей базе, потом клик по свободной области - пункт меню Apply. Усе, база зарегена :)



Теперь можно заходить непосредственно в само приложение Delphi. Нужно создать модуль данных ..... для SQL-запросов. Заходим File => New ... => Data Module. На него киньте элемент со вкладки компонентов BDE => компонент Database (DBTables):



Еще нужны компоненты BDE => Query (DBTables). Их будет столько же, сколько у вас таблиц. В свою очередь, к каждому элементу Query необходимо прицепить еще один элемент (на этот раз последний :)), он находится в Data Access => DataSource (DB). Сделали? Теперь эти элементы нужно присвоить своей базе данных. У каждого элемента Query в поле DatabaseName надо прописать имя своей базы, причем нужно соблюсти подчиненность всех элементов (это делается путем тупого Drag & Drop перетаскивания). В конце концов в дереве объектов должно получиться следующее - к базе данных прицепляются запросы Query, а к запросам присваиваем объекты DataSource. Воть как на рисунке (должно быть в точности так):



Окно датамодуля должно выглядеть примерно следующим образом:



У каждого элемента DataSource в поле DataSet должен стоять соответствующий пункт (например, у меня DataSource1 подвязан к Query1, это значение и выставляем). Напомню, сколько таблиц, столько и запросов - элементов Query :) У каждого Query в поле SQL должна быть прописана скуэль-инструкция, первый запрос у меня извлекает записи из таблицы авто и воть текст его скуэль-запроса:
Код:
select*from avto
Пункт DataSource у элемента Query можно оставить пустым. После вышеуказанных действий нужно активировать запросы в элементах Query: а поле Active выставить значение True. Если все правильно сделать, то жесткого мата в ответ при активации запроса вы от дельфи не услышите ;) Свойства элемента Database1 в датамодуле должны выглядеть примерно так (в поле DatabaseName надо написать какую-нибудь фигню в качестве имени вашей БД, желательно чтобы не совпадало с названием алиаса :) ):



Теперь можно создавать формы ..... что по сабжу и делаем. Создаем стартовую форму (по своему усмотрению) ..... я накидал туда пару кнопок со ссылками на другие формы (они и будут страницами доступа к данным). Одна из форм - простейший автокаталог (а зачем изощряться, тут важен принцип работы базы данных, а не ее дизайнерские наработки, коие в карман не положишь и на хлеб не намажешь, если нет самой структуры БД :) ). Воть форма автокаталога (если ее можно так назвать :) ) дизайн как у первоклассника ну да повторяю я им СОВСЕМ не занимался, не это главное:



Далее строится страница доступа к данным, она будет создана из формы, на коей будет размещена таблица (кинуть на форму элемент из вкладки Data controls => DBGrid (DBGrids), причем у этого элемента в свойствах в поле DataSource будет раскрывающийся список, в коем нужно выбрать тот DataSource (принадлежащий запросу), к коему будет подвязана эта таблица:



Если в списке свойств DBGrid в поле DataSource не будет доступных позиций, то это 98 пудов что косяк в датамодуле :) Элементы на формах несколько "обработаны" программным кодом, он здесь значения не имеет (совсем несложный) - все зависит от вашего Хочу и Могу :)
На форме заказа авто на кнопку "добавить" надо написать следующий код (он отвечает за выполнение SQL-инструкций):
Код:
procedure TForm4.Button2Click(Sender: TObject);
begin
Unit2.DataModule2.Query2.SQL.Text:='Insert Into Clients (FIO, B_avto, Avto_options, Price, Koll) 

Values("'+Edit1.Text+'","'+combobox1.Text+'","'+Edit3.Text+'","'+Edit4.Text+'","'+Edit2.Text+'")';
Unit2.DataModule2.Query2.ExecSQL;
Unit2.DataModule2.Query2.SQL.Text:='Select * From Clients';
Unit2.DataModule2.Query2.Active:=False;
Unit2.DataModule2.Query2.Active:=True;
end;
В третьей строке вышеуказанного кода нужно подставить номер СВОЕГО юнита, модуля данных, а также таблицы с именами полей. Аналогично и ниже:

Код на кнопку "удалить":
Код:
procedure TForm4.Button3Click(Sender: TObject);
begin
unit2.DataModule2.Query2.SQL.Text:='delete from Clients where Client_N="'+DbGrid1.Columns[0].Field.AsString+'"';
unit2.DataModule2.Query2.ExecSQL;
unit2.DataModule2.Query2.SQL.Text:='select*from Clients';
Unit2.DataModule2.Query2.Active:=False;
Unit2.DataModule2.Query2.Active:=True;
end;
В качестве допзадания нам поручили нам сделать печатную форму документа ....... такой "подставы" мы не ждали, ну да где наша не пропадала! Думали сначала сделать "по-человечески" через Rave Editor, но потом передумали и решили схалтурить :) хм ....... сделали через обычный MS Word. Для этого на форму, с коей будет производиться экспорт, надо кинуть два элемента со вкладки Servers (самая последняя) - это WordApplication и WordDocument. У них в свойствах в поле Autoconnect необходимо выставить значение true. Кидаем на форму батон и пишем на него такой код, заменяя мои уникальные имена и названия на свои :) :

Код:
procedure TForm4.Button4Click(Sender: TObject);
var i,j:integer;
    Sub,Allb:string;
    FileName:OleVariant;
begin
WordApplication1.Connect;
FileName:='D:\4-AC\FreeLancer\1.doc';
WordApplication1.Documents.Open(FileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, 

EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);

Repeat
  Inc(j);
  i:=i+1;
  WordDocument1.Tables.Item(1).Rows.Add(EmptyParam);
  Sub:=DBGrid1.Columns[0].Field.AsString;
  WordDocument1.Tables.Item(1).Cell(j+1,1).Range.InsertAfter(IntToStr(i));
  WordDocument1.Tables.Item(1).Cell(j+1,2).Range.InsertAfter(DBGrid1.Columns[1].Field.AsString);
  WordDocument1.Tables.Item(1).Cell(j+1,3).Range.InsertAfter(DBGrid1.Columns[2].Field.AsString);
  WordDocument1.Tables.Item(1).Cell(j+1,4).Range.InsertAfter(DBGrid1.Columns[3].Field.AsString);
  WordDocument1.Tables.Item(1).Cell(j+1,5).Range.InsertAfter(DBGrid1.Columns[4].Field.AsString);
  WordDocument1.Tables.Item(1).Cell(j+1,6).Range.InsertAfter(DBGrid1.Columns[5].Field.AsString);
Until Sub=DBGrid1.Columns[0].Field.AsString;

end;
Как вы заметили, в коде прописаны имя и адрес вордовского файла и его сначала нужно ручками создать. Строки
Код:
WordDocument1.Tables.Item(1).Cell(j+1,1).Range.InsertAfter(IntToStr(i));
  WordDocument1.Tables.Item(1).Cell(j+1,2).Range.InsertAfter(DBGrid1.Columns[1].Field.AsString);
  WordDocument1.Tables.Item(1).Cell(j+1,3).Range.InsertAfter(DBGrid1.Columns[2].Field.AsString);
  WordDocument1.Tables.Item(1).Cell(j+1,4).Range.InsertAfter(DBGrid1.Columns[3].Field.AsString);
  WordDocument1.Tables.Item(1).Cell(j+1,5).Range.InsertAfter(DBGrid1.Columns[4].Field.AsString);
  WordDocument1.Tables.Item(1).Cell(j+1,6).Range.InsertAfter(DBGrid1.Columns[5].Field.AsString);
отвечают за саму таблицу в документе, в коде описываются ее 6 столбцов. Сама таблица:



После нажатия батона, отвечающего за экспорт, откроется сабж Ворд с таблицей и записями, коие в точности копируют таблицу с приложения (собственно это она и есть) :)

Извиняюсь за пару тяжелых фоток :) Надеюсь, кому то этот гайд помог или заинтересовал. Если есть вопросы, обращайтесь - по возможности ответим ;)
VipeR вне форума   Ответить с цитированием

Старый 07.04.2007, 21:35
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вам даже не придется пользоваться поиском, вот аналогичные темы

DELPHI
Электронейтральность базы
NOD 32 2.7 новые базы сигнатур

Старый 02.05.2007, 14:40   #2 (permalink)
KONST
Новичок
 
Регистрация: 02.05.2007
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вопрос вот какой. Нужна БД, которая будет расположена на клиентской машине, и управляться программой написанной на Delphi. Так вот, БД - Access, то есть таблицы я в нем создаю...нужно ли прямо в Access создавать связи? Вроде как все управление ложиться на программу которая ей будет управлять, и вопросы целостности данных тоже вроде решаются программистом. Или я что то не понимаю... Просто если все таки управление ключами и связями реализуется непосредственно в приложении управляющем БД, то в чем разница использования того или иного поставщика дарйвера БД?
KONST вне форума   Ответить с цитированием
Старый 02.05.2007, 15:08   #3 (permalink)
VipeR
Имперская инквизиция
 
Аватар для VipeR
 
Регистрация: 14.02.2007
Сообщений: 6,097
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3046
По умолчанию

Хм ..... если что - создавайте отдельную тему, имхо в самом аксессе связи нужны. И само приложение там о-о-очень неплохо можно оформить, если с VBA дружим :)
VipeR вне форума   Ответить с цитированием
Старый 02.05.2007, 15:22   #4 (permalink)
KONST
Новичок
 
Регистрация: 02.05.2007
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Не совсем понял ответ. Ясно что свзи в аксесе нужны... но если их во время создания БД нарисовать, то реально эти связи в Delphi как использовать.... то есть непонятно мне одно, проектирую я базу данных...все, она готова к использованию... например в том же аксесе. Но нужно мне, что бы у пользователя на экране не аксес болтался, а аккуратная программка, которая с этой БД работает... так вот, как мне использовать те связи которые я в аксесе создал при проектировании БД? Или мне все равно в Delphi переопределять связи между таблицами?
KONST вне форума   Ответить с цитированием
Старый 02.05.2007, 16:22   #5 (permalink)
VipeR
Имперская инквизиция
 
Аватар для VipeR
 
Регистрация: 14.02.2007
Сообщений: 6,097
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3046
По умолчанию

Пока думаю над твоим вопросом и параллельно спрашиваю - собственно почему такое разделение, ведь можно и базу и оболочку классно в аксессе оформить или наоборот только в Дельфи (там таблицы создаются в приложений Database Desktop)? :)
VipeR вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 03.05.2007, 15:17   #6 (permalink)
KONST
Новичок
 
Регистрация: 02.05.2007
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Таки что народ... объясните кто нить... как с БД работать аксесовской в Delphi
KONST вне форума   Ответить с цитированием
Старый 30.05.2007, 15:09   #7 (permalink)
Gudvin
Member
 
Регистрация: 17.05.2007
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Целостность данных будет контролировать сервер (если связи в акссесе).
В делфях их ненадо повторять, если только для удобства работы в интерфейсе....
Gudvin вне форума   Ответить с цитированием
Старый 08.06.2007, 17:06   #8 (permalink)
dodik
Новичок
 
Регистрация: 08.06.2007
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Здравствуйте,мне нужна помощь в написании диплома по базам данных.может кто пришлет базу!!!Заранее спасибо
dodik вне форума   Ответить с цитированием
Старый 08.06.2007, 17:22   #9 (permalink)
VipeR
Имперская инквизиция
 
Аватар для VipeR
 
Регистрация: 14.02.2007
Сообщений: 6,097
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3046
По умолчанию

dodik простой, как пять копеек ..... ржунимагу :lol:
VipeR вне форума   Ответить с цитированием
Старый 06.08.2007, 15:33   #10 (permalink)
ORTODOX
687948395
 
Аватар для ORTODOX
 
Регистрация: 02.07.2007
Сообщений: 4,110
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 317
По умолчанию

Кто-нить знает сслыки на нормальные самоучители по дельфи? Киньте плиз, а то накачал самоучителей 5,два из них англииские(хотя было написано, что русские), другие два для профи, и один оставшиися тупой!
ORTODOX вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
delphi, бд delphi

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 05:59.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.