Министерствообразования и науки Республики Казахстан
Карагандинскийгосударственный технический университет
Кафедра
ПОЯСНИТЕЛЬНАЯЗАПИСКА
К КУРСОВОМУПРОЕКТУ
Дисциплина:Технология разработки баз данных
Тема: Разработкабазы данных и прикладного ПО для автобусного парка
Принял:
___________________________
Выполнил: студент гр. ________
___________________________
Караганда 2009
Содержание
Введение
1. Постановка задачи
2. Теоретическая часть
3. Программное обеспечение
4. Концептуальная модель данных
5. Логическая модель базы данных
6. Руководство пользователю
7. SQL Запросы
Заключение
Списокиспользованной литературы
ПриложениеА. Листинг программы
Введение
В настоящее время большинство организаций используетразличные базы данных для автоматизации процессов обработки информации,удобства ее эксплуатации, повышения надежности хранения данных, сокращениячисла возможных ошибок в работе, предотвращения избыточности данных, а также вцелях повышения производительности. Состав баз данных и их размер определяютсянаправлением деятельности конкретного предприятия и его мощностью.
В связи с тем, что современные информационные системыоперируют большими объемами и сложными структурами данных, средства управлениябазами данных можно выделить в отдельную группу информационных систем,отвечающих за управление сложными структурированными данными.
Сегодня можно с уверенностью утверждать, что решениеширокого круга задач в любой сфере деятельности человека сегодня практическиневозможно без использования оперативно управляемых баз данных.
1 Постановка задачи
Разработать базу данных и прикладное программноеобеспечение для автобусного парка, позволяющее структурировать информацию обавтобусных маршрутах, остановках и остановочных пунктах, автобусах парка. Такжепрограммное обеспечение должно предоставлять возможность различных манипуляцийэтими данными, как то редактирование и удаление данных, пополнение базы данных.
Прикладное ПО должно удовлетворять условиям работы судалённой базой данных.
2 Теоретическая часть
Для организации оптимизированного хранения, выборки ипредставления информации применяются базы данных (БД). «Базой данных» частоупрощённо или ошибочно называют Системы Управления Базами Банных (СУБД). Нужноразличать набор данных (собственно БД) и программное обеспечение,предназначенное для организации и ведения баз данных (СУБД).
БД бывают нескольких типов:
Картотеки
Сетевые
Иерархические
Реляционные
Объектно-ориентированные
Многомерные
Дедуктивные
На уровне физической модели электронная БД представляетсобой файл или их набор в формате TXT, CSV, Excel, DBF, XML либо вспециализированном формате конкретной СУБД. Также в СУБД в понятие физическоймодели включают специализированные виртуальные понятия, существующие в ёёрамках — таблица, табличное пространство, сегмент, куб, кластер и т.д.
В настоящее время наибольшее распространение получилиреляционные базы данных. Картотеками пользовались до появления электронных базданных. Сетевые и иерархические базы данных считаются устаревшими,объектно-ориентированные пока никак не стандартизированы и не получили широкогораспространения. Некоторое возрождение получили иерархические базы данных всвязи с появлением и распространением формата XML.
СУБД — специализированная программа (чаще комплекспрограмм), предназначенная для манипулирования базой данных. Для создания иуправления информационной системой СУБД необходима в той же степени, как дляразработки программы на алгоритмическом языке необходим транслятор.
Основные функции СУБД:
управление данными во внешней памяти (на дисках);
управление данными в оперативной памяти;
журнализация изменений и восстановление базы данных послесбоев;
поддержка языков БД (язык определения данных, языкманипулирования данными).
Обычно современная СУБД содержит следующие компоненты:
ядро, которое отвечает за управление данными во внешней иоперативной памяти и журнализацию,
процессор языка базы данных, обеспечивающий оптимизациюзапросов на извлечение и изменение данных и создание, как правило,машинно-независимого исполняемого внутреннего кода,
подсистему поддержки времени исполнения, котораяинтерпретирует программы манипуляции данными, создающие пользовательскийинтерфейс с СУБД, а также сервисные программы (внешние утилиты), обеспечивающиеряд дополнительных возможностей по обслуживанию информационной системы.
3 Программное обеспечение
Для разработки курсового проекта выбрана средаобъектно-ориентированного программирования Borland Delphi 7 под управлениеоперационной системы Windows.
Для обеспечения возможности удаленной работы сервера БД,предлагается использовать СУБД MS SQL Server. Работа с данной СУБД довольноудобна, о писана в большом количестве литературы. Провайдеры для работы с этойСУБД поставляются вместе с операционной системой Windows.
Также MS SQL Server предоставляет в распоряжениеразработчику клиент-серверную технологию, позволяющую располагать сервера БД,физически удаленно от пользователя, чем достигается централизованное хранениеданных и возможность обращения к БД несколькими пользователями одновременно.
Данный выбор связан с техническим обеспечением КарГТУ,возможностями выбранных программных средств, а так же малым опытом работыразработчика с другими СУБД. Выбранные программные средства полностьюудовлетворяют установленным требованиям и применима для решения поставленной задачи.
4 Концептуальная модель данных
/>
5 Логическая модель базы данных
Таблица маршрутов routes содержит список маршрутов, обслуживаемыхавтобусным паркомИмя поля Тип поля Описание id INT UNSIGNED AUTO_INCREMENT KEY Уникальный идентификатор маршрута name NVARCHAR(50) NOT NULL Название маршрута
Таблица остановок stations содержит информацию обостановках маршрутаИмя поля Тип поля Описание id INT UNSIGNED AUTO_INCREMENT KEY Уникальный идентификатор остановки name NVARCHAR(100) NOT NULL Название остановки routeid INT UNSIGNED NOT NULL Идентификатор маршрута
Таблица stoppoints содержит информацию об остановочныхпунктахИмя поля Тип поля Описание id INT UNSIGNED AUTO_INCREMENT KEY Уникальный идентификатор остановочного пункта name NVARCHAR(100) NOT NULL Название остановочного пункта direction NVARCHAR(7) NOT NULL Прямому или обратному маршруту принадлежит остановочный пункт (forward/return) stationid INT UNSIGNED NOT NULL Идентификатор остановки routeid INT UNSIGNED NOT NULL Идентификатор маршрута
Информация об автобусах парка хранится в таблице busesИмя поля Тип поля Описание id INT UNSIGNED AUTO_INCREMENT KEY Уникальный идентификатор автобуса model NVARCHAR(50) NOT NULL Модель автобуса issue NVARCHAR(7) NOT NULL Государственный регистрационный номер автобуса routeid INT UNSIGNED NOT NULL Идентификатор маршрута
6 Руководство пользователю
Запустив программу, пользователь попадает в основное еёокно.
Как видно, никаких данных мы пока увидеть, а тем болееизменить или удалить не можем. Происходит это потому, что не произведеноподключение к базе данных. Чтобы это исправить, пользователь должен совершитьследующие действия:
Выбрать в основном меню пункт DB -> Connection Options(Рисунок 2). Откроется окно настроек соединения с сервером базу данных (Рисунок3)./> />
Рисунок 2 — Пункт меню настроек соединения с сервером БД/> />
Рисунок 3 — Окно настроек соединения с сервером базы данных
Здесь нужно задать название сервера базы данных, названиесамой базы данных, а также пару логин/пароль для подключения к серверу базыданных. Задав правильные параметры и нажав на кнопку «OK» пользователь сновапопадает в основное окно программы. Теперь необходимо соединиться с сервером базыданных. Для этого нужно выбрать пункт меню DB -> Connect. Если настройкибыли заданы верно и не возникло никаких проблем в сети, будет установленосоединение с сервером, о чём будет свидетельствовать надпись «Connected» встатусной строке и данные, отображённые на вкладках программы (Рисунок 4).
/>
Рисунок 4 — Главное окно программы после подключения ксерверу БД
По умолчанию активна первая вкладка «Routes», на которойотображаются маршруты. Перемещаясь по вкладкам можно просмотреть сведения обостановках, остановочных пунктах и автобусах парка. Добавление, редактированиеи удаление данных во всех таблицах осуществляется аналогичным образом. поэтомубудет рассмотрено на примере таблицы остановочных пунктов.
Добавление, редактирование и удаление записиосуществляется либо кнопками на вкладке справа, либо при помощи дублирующего ихфункции контекстного меню. Будьте осторожны! При удалении записи никакихдополнительных подтверждений программа не запрашивает!/> />
При редактировании или добавлении записи открывается окно, где мы можемизменить или внести информацию об остановочном пункте (Рисунок 5).
Рисунок 5 — Окно добавления/редактирования остановочногопункта
Чтобы подтвердить изменение/добавление данных нужнонажать на кнопку «OK». Чтобы отменить их — на кнопку «Cancel».
Выбрав пункт основного меню Info -> Help можно увидетьэто руководство.
Чтобы завершить работу с программой. просто закройте еёосновное окно.
8 SQL Запросы
Выборка государственных номеров автобусов марок Lifan иMudan, обслуживающих определённый маршрут
SELECT issue
FROM buses
WHERE routeid = 12 AND model IN('Lifan', 'Mudan')
Выборка автобусов, проезжающих через определённыйостановочный пункт
SELECT model, issue
FROM buses
WHERE routeid =
ANY (SELECT routeid
FROM stoppoints
WHERE stationid = 2)
Выборка остановочных пунктов определённого маршрута,проезжаемых автобусами на обратном пути
SELECT name
FROM stoppoints
WHERE direction = 'return' AND routeid =1
Выборка 5 остановочных пунктов, через которые проходитнаибольшее количество маршрутов
SELECT name, Count(routeid) ASRouteCount
FROM stoppoints
GROUP BY name
ORDER BY RouteCount
limit 5
Заключение
В связи со стремительно развивающимися на данный моменттехнологиями хранение информации на бумажных носителях отходит в прошлое, иповсеместно вводятся средства электронного учета. В курсовой работе предложенметод оперативного обслуживания БД применительно к небольшому автопарку.Подобный метод может быть применен в любой (практически) организации.
Дальнейшее совершенствование программы возможно в сторонунормализации базы данных, добавления неких графических представлений, учётаразличных состояний транспорта и т.д. При их внедрении программа может статькоммерческим продуктом, ориентированным на предприятия, занимающиеся доставкойкорреспонденции, товаров народного потребления, курьерские службы,таксомоторные парки, автобусные и троллейбусные парки и т.п.
Список использованной литературы
1. Структуризированный язык запросов (SQL). Учебное пособие
2. А.М. Терлецкая БД. Лекции.
3. П. Дарахвелидзе, Е. Марков. Программирование в Delphi 7. СПб.:«БХВ-Петербург». 2003. 784 с: ил.
4. М. Фленов. Библия программистов в среде Delphi. 2002. 636 с.
5. С. Лукьяненко. Спектр. М.: ООО «Издательство АСТ», ОАО «Люкс». 2004. 490с.
Приложение А. Листинг программы
главная форма
var
DBHost, DBLogin, DBPassword, DBDatabase:string;
implementation
uses uConnectOptions, uRoutes,uStations, uStopPoints, uBuses;
{$R *.dfm}
procedure TfmMain.mmDBOptionsClick(Sender:TObject);
begin
Application.CreateForm(TfmConnectOptions,fmConnectOptions);
fmConnectOptions.ShowModal;
end;
procedureTfmMain.mmDBConnectClick(Sender: TObject);
begin
try
fmMain.ADOConnection.Open;
StatusBar.Panels[0].Text := 'Connected';
mmDBConnect.Enabled := false;
mmDBDisconnect.Enabled := true;
ADOTableRoutes.Active := true;
ADOQueryStations.Active := true;
ADOQueryStopPoints.Active := true;
ADOQueryBuses.Active := true;
btnRoutesAdd.Enabled := true;
btnStationsAdd.Enabled := true;
btnStopPointsAdd.Enabled := true;
btnBusesAdd.Enabled := true;
ppmnRoutesAdd.Enabled := true;
ppmnStationsAdd.Enabled := true;
ppmnStopPointsAdd.Enabled := true;
ppmnBusesAdd.Enabled := true;
except
ShowMessage('Connection error!');
StatusBar.Panels[0].Text :='Disconnected';
end;
end;
procedure TfmMain.FormCreate(Sender:TObject);
begin
fmMain.DBHost := 'ERETIK\SQLEXPRESS';
fmMain.DBLogin := 'sa';
fmMain.DBPassword := '1';
fmMain.DBDatabase := 'Buzzz';
end;
procedureTfmMain.mmDBDisconnectClick(Sender: TObject);
begin
ADOConnection.Close;
mmDBDisconnect.Enabled := false;
mmDBConnect.Enabled := true;
StatusBar.Panels[0].Text :='Disconnected';
ADOTableRoutes.Active := false;
ADOQueryStations.Active := false;
ADOQueryStopPoints.Active := false;
ADOQueryBuses.Active := false;
btnRoutesAdd.Enabled := false;
btnStationsAdd.Enabled := false;
btnStopPointsAdd.Enabled := false;
btnBusesAdd.Enabled := false;
btnRoutesEdit.Enabled := false;
btnStationsEdit.Enabled := false;
btnStopPointsEdit.Enabled := false;
btnBusesEdit.Enabled := false;
btnRoutesDelete.Enabled := false;
btnStationsDelete.Enabled := false;
btnStopPointsDelete.Enabled := false;
ppmnRoutesAdd.Enabled := false;
ppmnStationsAdd.Enabled := false;
ppmnStopPointsAdd.Enabled := false;
ppmnBusesAdd.Enabled := false;
ppmnRoutesEdit.Enabled := false;
ppmnStationsEdit.Enabled := false;
ppmnStopPointsEdit.Enabled := false;
ppmnBusesEdit.Enabled := false;
ppmnRoutesDelete.Enabled := false;
ppmnStationsDelete.Enabled := false;
ppmnStopPointsDelete.Enabled := false;
end;
procedureTfmMain.btnRoutesAddClick(Sender: TObject);
begin
Application.CreateForm(TfmRoutes,fmRoutes);
fmRoutes.EditFlag := false;
fmRoutes.ShowModal;
end;
procedureTfmMain.dtsrcRoutesDataChange(Sender: TObject; Field: TField);
begin
btnRoutesEdit.Enabled :=ADOTableRoutes.RecordCount 0;
btnRoutesDelete.Enabled :=ADOTableRoutes.RecordCount 0;
ppmnRoutesEdit.Enabled :=ADOTableRoutes.RecordCount 0;
ppmnRoutesDelete.Enabled :=ADOTableRoutes.RecordCount 0;
end;
procedureTfmMain.dtsrcStationsDataChange(Sender: TObject; Field: TField);
begin
btnStationsEdit.Enabled :=ADOQueryStations.RecordCount 0;
btnStationsDelete.Enabled :=ADOQueryStations.RecordCount 0;
ppmnStationsEdit.Enabled :=ADOQueryStations.RecordCount 0;
ppmnStationsDelete.Enabled :=ADOQueryStations.RecordCount 0;
end;
procedureTfmMain.dtsrcStopPointsDataChange(Sender: TObject; Field: TField);
begin
btnStopPointsEdit.Enabled :=ADOQueryStopPoints.RecordCount 0;
btnStopPointsDelete.Enabled :=ADOQueryStopPoints.RecordCount 0;
ppmnStopPointsEdit.Enabled :=ADOQueryStopPoints.RecordCount 0;
ppmnStopPointsDelete.Enabled :=ADOQueryStopPoints.RecordCount 0;
end;
procedureTfmMain.dtsrcBusesDataChange(Sender: TObject; Field: TField);
begin
btnBusesEdit.Enabled :=ADOQueryBuses.RecordCount 0;
btnBusesDelete.Enabled :=ADOQueryBuses.RecordCount 0;
ppmnBusesEdit.Enabled :=ADOQueryBuses.RecordCount 0;
ppmnBusesDelete.Enabled :=ADOQueryBuses.RecordCount 0;
end;
procedureTfmMain.btnRoutesDeleteClick(Sender: TObject);
begin
ADOCommand.CommandText := 'DELETE FROMroutes WHERE id='+DBGridRoutes.DataSource.DataSet.Fields[0].AsString;;
ADOCommand.Execute;
ADOCommand.CommandText := 'DELETE FROMstations WHERE routeid='+DBGridRoutes.DataSource.DataSet.Fields[0].AsString;;
ADOCommand.Execute;
ADOCommand.CommandText := 'DELETE FROMstoppoints WHERE routeid='+DBGridRoutes.DataSource.DataSet.Fields[0].AsString;;
ADOCommand.Execute;
ADOTableRoutes.Requery();
ADOQueryStations.Requery;
ADOQueryStopPoints.Requery;
end;
procedureTfmMain.btnStationsDeleteClick(Sender: TObject);
begin
ADOCommand.CommandText := 'DELETE FROMstations WHERE id='+DBGridStations.DataSource.DataSet.Fields[0].AsString;;
ADOCommand.Execute;
ADOCommand.CommandText := 'DELETE FROMstoppoints WHEREstationid='+DBGridStations.DataSource.DataSet.Fields[0].AsString;;
ADOCommand.Execute;
ADOQueryStations.Requery;
ADOQueryStopPoints.Requery;
end;
procedureTfmMain.btnStopPointsDeleteClick(Sender: TObject);
begin
ADOCommand.CommandText := 'DELETE FROMstoppoints WHERE id='+DBGridStopPoints.DataSource.DataSet.Fields[0].AsString;;
ADOCommand.Execute;
ADOQueryStopPoints.Requery;
end;
procedure TfmMain.btnBusesDeleteClick(Sender:TObject);
begin
ADOCommand.CommandText := 'DELETE FROMbuses WHERE id='+DBGridBuses.DataSource.DataSet.Fields[0].AsString;;
ADOCommand.Execute;
ADOQueryBuses.Requery;
end;
procedureTfmMain.btnRoutesEditClick(Sender: TObject);
begin
Application.CreateForm(TfmRoutes,fmRoutes);
fmRoutes.EditFlag := true;
fmRoutes.ShowModal;
end;
procedureTfmMain.btnStationsAddClick(Sender: TObject);
begin
Application.CreateForm(TfmStations,fmStations);
fmStations.EditFlag := false;
fmStations.ShowModal;
end;
procedureTfmMain.btnStationsEditClick(Sender: TObject);
begin
Application.CreateForm(TfmStations,fmStations);
fmStations.EditFlag := true;
fmStations.ShowModal;
end;
procedureTfmMain.btnStopPointsEditClick(Sender: TObject);
begin
Application.CreateForm(TfmStopPoints,fmStopPoints);
fmStopPoints.EditFlag := true;
fmStopPoints.ShowModal;
end;
procedureTfmMain.btnStopPointsAddClick(Sender: TObject);
begin
Application.CreateForm(TfmStopPoints,fmStopPoints);
fmStopPoints.EditFlag := false;
fmStopPoints.ShowModal;
end;
procedureTfmMain.btnBusesAddClick(Sender: TObject);
begin
Application.CreateForm(TfmBuses,fmBuses);
fmBuses.EditFlag := false;
fmBuses.ShowModal;
end;
procedureTfmMain.btnBusesEditClick(Sender: TObject);
begin
Application.CreateForm(TfmBuses,fmBuses);
fmBuses.EditFlag := true;
fmBuses.ShowModal;
end;
procedure TfmMain.FormClose(Sender:TObject; var Action: TCloseAction);
begin
ADOConnection.Connected := false;
end;
end.
настройки подключения
procedure TfmConnectOptions.btnOKClick(Sender:TObject);
begin
fmMain.ADOConnection.ConnectionString :=
'Provider=SQLOLEDB.1;Password=' +medPassword.Text +
';Persist Security Info=False;User ID='+ edLogin.Text +
';Initial Catalog=' + edDatabase.Text +';Data Source=' + edHost.Text;
fmMain.DBHost := edHost.Text;
fmMain.DBLogin := edLogin.Text;
fmMain.DBPassword := medPassword.Text;
fmMain.DBDatabase := edDatabase.Text;
Close;
end;
procedureTfmConnectOptions.btnCancelClick(Sender: TObject);
begin
Close;
end;
procedureTfmConnectOptions.FormCreate(Sender: TObject);
begin
edHost.Text := fmMain.DBHost;
edLogin.Text := fmMain.DBLogin;
medPassword.Text := fmMain.DBPassword;
edDatabase.Text := fmMain.DBDatabase;
end;
добавление/редактирование автобусов
private
{ Private declarations }
public
{ Public declarations }
EditFlag: boolean;
end;
var
fmBuses: TfmBuses;
implementation
uses uMain;
{$R *.dfm}
procedure TfmBuses.FormShow(Sender:TObject);
begin
if EditFlag then
begin
Caption := 'Edit bus';
ledModel.Text :=fmMain.DBGridBuses.DataSource.DataSet.Fields[1].AsString;
ledIssue.Text :=fmMain.DBGridBuses.DataSource.DataSet.Fields[2].AsString;
lcmbbxRoute.KeyValue :=fmMain.DBGridBuses.DataSource.DataSet.Fields[3].AsInteger;
end
else
begin
Caption := 'Add bus';
ledModel.Clear;
ledIssue.Clear;
lcmbbxRoute.KeyValue := 1;
end;
end;
procedureTfmBuses.btnCancelClick(Sender: TObject);
begin
Close;
end;
procedure TfmBuses.btnOKClick(Sender:TObject);
begin
if (ledModel.Text '') and(lcmbbxRoute.Text '') and (ledIssue.Text '') then
begin
if EditFlag then
begin
fmMain.ADOCommand.CommandText := 'UPDATEbuses SET model=''' + ledModel.Text
+''', issue=''' + ledIssue.Text + ''',routeid=' +
IntToStr(lcmbbxRoute.KeyValue) + ' WHEREid=' +
fmMain.DBGridBuses.DataSource.DataSet.Fields[0].AsString;
fmMain.ADOQueryBuses.Requery;
end
else
begin
fmMain.ADOCommand.CommandText :=
'INSERT INTO buses (model, issue,routeid) VALUES (''' +
ledModel.Text + ''', ''' + ledIssue.Text+ ''', ' +
IntToStr(lcmbbxRoute.KeyValue) + ')';
end;
fmMain.ADOCommand.Execute;
fmMain.ADOQueryBuses.Requery;
close;
end
else
ShowMessage('Incorrect parameters!');
end;
end.
добавление/редактирование маршрутов
private
{ Private declarations }
public
{ Public declarations }
EditFlag: boolean;
end;
var
fmRoutes: TfmRoutes;
implementation
uses uMain;
{$R *.dfm}
procedureTfmRoutes.btnCancelClick(Sender: TObject);
begin
Close;
end;
procedure TfmRoutes.btnOKClick(Sender:TObject);
begin
if ledName.Text '' then
begin
if EditFlag then
begin
fmMain.ADOCommand.CommandText := 'UPDATEroutes SET name=''' + ledName.Text
+ ''' WHERE id=' +fmMain.DBGridRoutes.DataSource.DataSet.Fields[0].AsString;
fmMain.ADOQueryStations.Requery;
fmMain.ADOQueryStopPoints.Requery;
fmMain.ADOQueryBuses.Requery;
end
else
begin
fmMain.ADOCommand.CommandText := 'INSERTINTO routes (name) VALUES (''' + ledName.Text + ''')';
end;
fmMain.ADOCommand.Execute;
fmMain.ADOTableRoutes.Requery;
close;
end
else
ShowMessage('Incorrect parameters!');
end;
procedure TfmRoutes.FormShow(Sender:TObject);
begin
if EditFlag then
begin
Caption := 'Edit route';
ledName.Text :=fmMain.DBGridRoutes.DataSource.DataSet.Fields[1].AsString;
end
else
begin
Caption := 'Add route';
ledName.Clear;
end;
end;
end.
добавление/редактирование остановок
private
{ Private declarations }
public
{ Public declarations }
EditFlag: boolean;
end;
var
fmStations: TfmStations;
implementation
uses uMain, DB;
{$R *.dfm}
procedure TfmStations.FormShow(Sender:TObject);
begin
if EditFlag then
begin
Caption := 'Edit station';
ledName.Text :=fmMain.DBGridStations.DataSource.DataSet.Fields[1].AsString;
lcmbbxRoute.KeyValue :=fmMain.DBGridStations.DataSource.DataSet.Fields[2].AsInteger;
end
else
begin
Caption := 'Add station';
ledName.Clear;
lcmbbxRoute.KeyValue := 1;
end;
end;
procedureTfmStations.btnCancelClick(Sender: TObject);
begin
close;
end;
procedure TfmStations.btnOKClick(Sender:TObject);
begin
if (ledName.Text '') and(lcmbbxRoute.Text '') then
begin
if EditFlag then
begin
fmMain.ADOCommand.CommandText := 'UPDATEstations SET name=''' + ledName.Text
+ ''', routeid=' +IntToStr(lcmbbxRoute.KeyValue) + ' WHERE id=' +
fmMain.DBGridStations.DataSource.DataSet.Fields[0].AsString;
fmMain.ADOQueryStopPoints.Requery;
end
else
begin
fmMain.ADOCommand.CommandText := 'INSERTINTO stations (name, routeid) VALUES (''' + ledName.Text + ''', ' +IntToStr(lcmbbxRoute.KeyValue) + ')';
end;
fmMain.ADOCommand.Execute;
fmMain.ADOQueryStations.Requery;
close;
end
else
ShowMessage('Incorrect parameters!');
end;
end.
добавление/редактирование остановочных пунктов
private
{ Private declarations }
public
{ Public declarations }
EditFlag: boolean;
end;
var
fmStopPoints: TfmStopPoints;
implementation
uses uMain;
{$R *.dfm}
procedureTfmStopPoints.btnCancelClick(Sender: TObject);
begin
Close;
end;
procedure TfmStopPoints.FormShow(Sender:TObject);
begin
if EditFlag then
begin
Caption := 'Edit stop point';
withfmMain.DBGridStopPoints.DataSource.DataSet do
begin
ADOQueryRoutes.SQL.Text := 'SELECT *FROM routes WHERE id = ' +
'ANY (SELECT routeid FROM stations WHEREid = ' +
Fields[3].AsString + ')';
ADOQueryRoutes.Active := true;
ADOQueryRoutes.Requery;
ledName.Text := Fields[1].AsString;
lcmbbxRoute.KeyValue := dtsrcRoutes.DataSet.Fields[0].AsInteger;
lcmbbxStation.KeyValue :=Fields[3].AsInteger;
if Fields[2].AsString = 'forward' thencmbbxDirection.ItemIndex := 0 else
cmbbxDirection.ItemIndex := 1;
end;
end
else
begin
Caption := 'Add stop point';
ledName.Clear;
lcmbbxStation.KeyValue := 1;
ADOQueryRoutes.SQL.Text := 'SELECT *FROM routes WHERE id = ' +
'ANY (SELECT routeid FROM stations WHEREid = 1)';
ADOQueryRoutes.Active := true;
ADOQueryRoutes.Requery;
end;
end;
procedureTfmStopPoints.lcmbbxStationCloseUp(Sender: TObject);
begin
ADOQueryRoutes.SQL.Text := 'SELECT *FROM routes WHERE id = ' +
'ANY (SELECT routeid FROM stations WHEREstations.id = ' +
IntToStr(lcmbbxStation.KeyValue) + ')';
ADOQueryRoutes.Open;
ADOQueryRoutes.Requery;
lcmbbxRoute.DropDown;
end;
procedureTfmStopPoints.btnOKClick(Sender: TObject);
begin
if (ledName.Text '') and(lcmbbxRoute.Text '') and (lcmbbxStation.Text '') then
begin
if EditFlag then
begin
fmMain.ADOCommand.CommandText := 'UPDATEstoppoints SET name=''' + ledName.Text
+ ''', routeid=' +IntToStr(lcmbbxRoute.KeyValue) + ', direction=''' +
cmbbxDirection.Text + ''', stationid=' +IntToStr(lcmbbxStation.KeyValue)
+ ' WHERE id=' +fmMain.DBGridStopPoints.DataSource.DataSet.Fields[0].AsString;
end
else
begin
fmMain.ADOCommand.CommandText :=
'INSERT INTO stoppoints (name,direction, stationid, routeid) VALUES ('''
+ ledName.Text + ''', ''' +cmbbxDirection.Text + ''', ' +
IntToStr(lcmbbxStation.KeyValue) + ', '+ IntToStr(lcmbbxRoute.KeyValue) + ')';
end;
fmMain.ADOCommand.Execute;
fmMain.ADOQueryStopPoints.Requery;
close;
end
else
ShowMessage('Incorrect parameters!');
end;
end.