• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Базы данных на Delphi

  • Автор темы Автор темы VipeR
  • Дата начала Дата начала

VipeR

Имперская инквизиция
Регистрация
14 Фев 2007
Сообщения
6,097
Реакции
45
Баллы
0
Базы данных на Delphi

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

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

dbdesktopmaindq6.jpg


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

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

clientsoy1.jpg


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

sqlexplorerty9.jpg


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

datamodule1jf6.jpg


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

objecttreeviewdq7.jpg


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

datamodule2kr6.jpg


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

objectinspectordatabasekz3.jpg


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

autocatalogdr2.jpg


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

zakazavtocp9.jpg


Если в списке свойств 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 столбцов. Сама таблица:

wordtabledh6.jpg


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

Извиняюсь за пару тяжелых фоток :) Надеюсь, кому то этот гайд помог или заинтересовал. Если есть вопросы, обращайтесь - по возможности ответим ;)
 
Вопрос вот какой. Нужна БД, которая будет расположена на клиентской машине, и управляться программой написанной на Delphi. Так вот, БД - Access, то есть таблицы я в нем создаю...нужно ли прямо в Access создавать связи? Вроде как все управление ложиться на программу которая ей будет управлять, и вопросы целостности данных тоже вроде решаются программистом. Или я что то не понимаю... Просто если все таки управление ключами и связями реализуется непосредственно в приложении управляющем БД, то в чем разница использования того или иного поставщика дарйвера БД?
 
Хм ..... если что - создавайте отдельную тему, имхо в самом аксессе связи нужны. И само приложение там о-о-очень неплохо можно оформить, если с VBA дружим :)
 
Не совсем понял ответ. Ясно что свзи в аксесе нужны... но если их во время создания БД нарисовать, то реально эти связи в Delphi как использовать.... то есть непонятно мне одно, проектирую я базу данных...все, она готова к использованию... например в том же аксесе. Но нужно мне, что бы у пользователя на экране не аксес болтался, а аккуратная программка, которая с этой БД работает... так вот, как мне использовать те связи которые я в аксесе создал при проектировании БД? Или мне все равно в Delphi переопределять связи между таблицами?
 
Пока думаю над твоим вопросом и параллельно спрашиваю - собственно почему такое разделение, ведь можно и базу и оболочку классно в аксессе оформить или наоборот только в Дельфи (там таблицы создаются в приложений Database Desktop)? :)
 
Таки что народ... объясните кто нить... как с БД работать аксесовской в Delphi
 
Целостность данных будет контролировать сервер (если связи в акссесе).
В делфях их ненадо повторять, если только для удобства работы в интерфейсе....
 
Здравствуйте,мне нужна помощь в написании диплома по базам данных.может кто пришлет базу!!!Заранее спасибо
 
dodik простой, как пять копеек ..... ржунимагу :lol:
 
Кто-нить знает сслыки на нормальные самоучители по дельфи? Киньте плиз, а то накачал самоучителей 5,два из них англииские(хотя было написано, что русские), другие два для профи, и один оставшиися тупой!
 
Здравствуйте, пытаюсь разобраться в том как создавать субд на Delphi (уровень "чайника";)). Есть трудность.

Дано: Таблица1(Поля: "Код","Имя", ...) и Таблица2 (Поля: "Код",...,"Телефон",....). Таблицы связаны по полю "Код"

Вопрос: Как сделать чтобы в форме были данные полей "Имя" и "Телефон"?

Спасибо:)
 
Здравствуй, извени за беспокойство, но очень нужна помощь в одном вопросике. Делфи знаю не очень, но учу стараюсь, с базами тоже есть проблемки, так вот по твоему примеру, я все так создаю, как ты написал, но потом при выборе таблицы у меня моя таблица в списке не отображается, есть там стандарт и другие а моей нет не подскажежь, буду очень очень благодарна
 
почти всегда причиной является неправильная связь DataSource и Query ...... перепроверь, особенно это:

objecttreeviewdq7.jpg
 
Windows XP сообщение при включении

Здравствуйте! Очень надеюсь на вашу помощь!
У меня Windows XP. Месяца два назад ,при включении, компьютер выдает мне вот такое сообщение:

This copy of Windows did not pass genuine Windows validation and you have not yet resolved the problem.
This copy of Windows is no longer eligible to receive the full range of upgrades and product support available from Microsoft.
To protect your copy of Windows click Resolve Now ( или Resolve later ).

Суть написанного я в общем-то понимаю. Когда нажимаю на Resolve Now, я попадаю на страничку Microsoft, где мне прадлагают купить лицензионную версию Windows. Покупать я ее не собираюсь. Вопрос, собственно, такой.. Как избавиться от этого сообщения?? (Желательно не переустанавливая систему, так как я в этом вопросе чайник, а попросить в данный момент некого).

Может быть нужен какой-то ключ? Если да, то где его можно скачать и как им правильно воспользоваться??
 
Попробуйте wpa-kill. Ставить в безопасном режиме.
 
Здесь хорошие инструкции, как переустановить систему. Главное, чтобы у тебя были все драйвера к твоему оборудованию, т.к. их придется ставить после переустановки.
http://www.netbent.net/content/view/100/69/
 
Здесь хорошие инструкции, как переустановить систему. Главное, чтобы у тебя были все драйвера к твоему оборудованию, т.к. их придется ставить после переустановки.
http://www.netbent.net/content/view/100/69/
У топикстартера есть серьезный повод для переустановки системы? :confused:
 
Есть вопрос автору темы: если планируется использовать базу данных, разработанную таким способом, на другом компе, обязательно ли там устанавливать BDE Administrator и создавать альяс, или можно обойтись копированием пары-другой дополнительных файлов?
 
Назад
Сверху