Всем доброго времени суток! Была написана простенькая программа, позволяющая работать с базой данных (всего одна таблица). Несмотря на настойчивое продвижение в массовое сознание клиент - серверных. Для эмуляции работы SQL- сервера разработаем сервер приложений с . Раз приложение простейшее, то я решил использовать БД MS Jet 4.0 (проще говоря БД MS Access). Это решение вызвано тем что Jet .

Создание клиент- серверного приложения в Delphi - Cyber. Guru. ru. Written on 0. Января 2. 00. 9. Это решение вызвано тем что Jet (прошу не путать с MS Access) является бесплатным продуктом и поставляется вместе с MS Windows (то бишь для работы нашей программы ненужно устанавливать на компьютер клиента сам Access). Да и редактор БД очень неплохой, и ядро поддерживает кучу типов полей для удовлетворения самых извращенных желаний при хранении данных.
Итак создадим новую БД, назовем ее Test и сохраним ее в папке C: \Client. Server\Server\Data (процесс создания новой БД в Аксесе я, по понятным, причинам опускаю, и приведу только структуру таблиц - входящих в нашу базу). Таблица первая, назовем ее First Имя поля Тип. Описание. Index. Таблица вторая, а назовем ее уже по хитрому - Second Имя поля Тип.
Описание. Index. Приложение сервер. Созданим новое приложение и сохраним его под именем Server в папке C: \Client.
Server\Server. Добавим в приложение Remote Data Module с вкладки Multitier репозитария (Рис. Репозитарий с выделенным Remote Data Module.
При добавлении RDM мастер добавления запросит параметры данного модуля - там введем имя нашего сервера . После нажатия кнопки . Сохраним ее под именем RDMFrm. Компоненты ADOTable и Data. Set. Provider обзовем - adot.
First, adot. Second, dsp. First и dsp. Second соответственно. По двойному клику на компоненте ADOConnection вывалится мастер Connection String. Выбераем пункт . В появившемся окне . После чего закроем мастер путем нажатия на кнопке ОК. Еще у компонента ADOConnection свойство есть Login.
Prompt, которое установим в False и Connected - True. У компонетов ADOTable свойство Connection установим равным ADOConnection путем выбора из выпадающего списка.
Свойство Table. Name установим в First и Second соответсвенно. Свойство Cursor. Type - ct. Dynamic, свойство Table. Direct - True. Вызвать Fields.
Editor и добавить туда все поля. У компонентов Data. Set. Provider: Свойство. Значение. Data. Setadot.
First и adot. Second соответственно. Resolve. To. Data. Set True. Update.
Mode up. Where. Key. Only. В опциях поднять флагиpo. Auto. REfresh Truepo.
Propogate. Changes True. Вот на этом процесс создания примитивного MIDAS сервера можно считать завершенным. Чтобы зарегистрировать сервер в подсистеме DCOM нужно запустить приложение с параметром /regserver - Server. И последний штрих, это приложение Сокет. Сервер от Борланда, которое находится в папке Delphi?/Bin/scktsvr.
Для того чтобы клиент мог видеть сервер нужно запустить scktsvr. Win NT/w. 2k/XP то можно это приложение зарегистрировать как службу, для этого его нужно запустить с параметром scktsvr. Приложение клиент Создадим новое приложение, и сохраним его в папке C: \Client.
Server\Client под именем Client. Разместим на главной форме по два компонента Client. Data. Set(обзовем их cds. First, cds. Second), Data.
Source(обзовем их ds. First, ds. Second), DBGrid(обзовем их dbg.
First, dbg. Second) один компонент Socet. Connection. Socet. Connection. Свойство. Значение. Host. Имя вашего компьютера - в последствии в это свойство нужно будет занести имя компьютера на котором будет рассположено приложение Сервер. Server. Name. Если вы правильно заполнили свойство Host и запущено приложение Сокет.
Сервер то в выпадающем списке должно появится Server. Test - его и нужно выбрать. Если вы все сделали правильно, то при установке свойства Connected в True, должно запустится приложение сервер. Client. Data. Set. Свойство. Значение.
Remote. Server. Socet. Connection. Provider. Name dsp. First и dsp.
Second соответственно. Active True. Для cds. Second. Master. Source ds. First. Master. Fields Index. Для компонентов Client.
Data. Set напишем обработчик sds. After. Postprocedure TMain. Form. cds. After. Post(Data. Set: TData. Set); beginwith (Data. Set as TClient. Data.
Set) do beginif State in . Data. Source. Свойство. Значение. Data. Setcds. First и cds. Second соответственно.
DBGrid. Свойство. Значение. Data. Sourceds. First и ds. Second соответственно.
Запустим Редактор колонок (двойной клик по компоненту) и занесем туда все поля. Положим на форме возле Гридов по кнопке и в обработчик on.
Click запишем: для dbg. First - cds. First. Post dbg. Second - cds. Second. Post Все. Закрываем Делфи (для чистоты эксперимента).
И запускаем приложение клиент. Если вы все сделали правильно то вы должны увидеть нечто подобное этому Если статья получит отзывы и заслужит интерес у читателей, то продолжение не заставит себя долго ждать. Демонстрационный проект (4.
Построение клиент- серверных баз данных в Delphi » Delphi. Component. ru. Оператор посылки сообщения предназначен для уведомления о событии всех приложений- клиентов, связанных с сервером. Данный оператор имеет следующий вид: Триггер представляет собой процедуру, которая постоянно размещена на сервере базы данных (как и хранимая процедура) и вызывается автоматически при изменении записей базы данных. В отличие от хранимых процедур, триггеры нельзя вызывать из приложений- клиентов, а также передавать им параметры и получать от них результаты. По определению триггер похож на обработчик событий Before.
Edit, After. Edit, Before- Delete, After. Delete, Beforelnsert и Afterlnsert. Триггеры в основном используются для программной реализации бизнес- правил. С помощью триггеров накладываются различные ограничения (например, иа значения столбцов).
Для создания триггера применяется оператор CREATE TRIGGER, который имеет следующий вид: CREATE TRIGGER < Имя триггера> FOR < Имя таблицы>. По умолчанию ои будет активен (ACTIVE), то есть при наступлении определенного события триггер будет выполняться. Неактивный триггер (INACTIVE) при наступлении определенного события выполняться не будет. Таким образом, созданный триггер можно включать или выключать. Операнды BEFORE и AFTER указывают, когда будет выполняться триггер: до наступления определенного события (BEFORE) или после (AFTER).
Операнды UPDATE, INSERT и DELETE определяют тип события, при возникновении которого будет выполняться триггер. Это такие типы событий, как изменение (UPDATE), добавление (INSERT) и удаление (DELETE) записей. Для каждого события можно создать несколько триггеров, которые будут выполняться (если они активны). Порядок их выполнения определяется операндом POSITION. Триггеры будут срабатывать в порядке возрастания чисел, указанных в данном операнде. Созданный триггер можно изменить или удалить. Удаление триггера осуществляется оператором DROP TRIGGER < Имя триггера> Изменить уже существующий триггер можно с помощью оператора ALTER TRIGGER, который имеет такой же формат, что и оператор CREATE TRIGGER.
Тело триггера программируется так же, как и тело хранимой процедуры. В таблицах Inter. Base отсутствует автоинкрементный тип. Для обеспечения уникальности значений ключевых столбцов совместно с триггерами используются генераторы.
Генератор применяется для создания уникальных целочисленных значений. Генератор можно создать с помощью приведенного ниже оператора: CREATE GENERATOR < Имя генератора> Кроме непосредственного создания генератора, необходимо присвоить ему начальное значение. Для этого используется следующий оператор: SET GENERATOR < Имя генератора> ТО «Начальное значение> Начальное значение — это число, начиная с которого будут генерироваться уникальные значения. К созданному генератору можно обращаться с помощью функции GEN. В противном случае уникальность генерируемых значений может быть нарушена. Приведем пример создания генератора: CREATE GENERATOR My. Gen: SET GENERATOR My.
Gen TO 2: Здесь создается генератор с именем My. Gen, начальное значение которого равно 2. Пример обращения к этому генератору может быть таким: GENJD(My. Gen. 1): Все операции, выполняемые приложением- клиентом с данными на SQL- сервере, происходят в виде транзакций. Транзакцией называется группа из нескольких операции над данными из таблиц удаленной базы данных. Основным принципом транзакций является «либо все, либо ничего».
Если во время выполнения набора действий (транзакции) па каком- то этапе невозможно произвести очередное действие, то нужно выполнить возврат базы данных к начальному состоянию (произвести откат транзакции). Автоматизированная Система Управления Производством Программа. Таким образом (при правильном планировании транзакций) обеспечивается целостность базы данных.
Далее мы расскажем, как начинать, завершать транзакции п управлять ими с помощью SQL- выражений. А также рассмотрим вопрос об использовании транзакций в приложениях, разработанных в Delphi. Вся приведенная информация относится к Inter.
Base. Для управления транзакциями в Delphi имеются три основные команды: SET TRANSACTION — начинает транзакцию и определяет се поведение; COMMIT — сохраняет изменения, внесенные транзакцией, в базе данных и завершает транзакцию; ROLLBACK — отменяет изменения, внесенные транзакцией, и завершает транзакцию. Рассмотрим эти команды более подробно. Команда для запуска транзакции в общем виде выглядит следующим образом: SET TRANSACTION . Если эти параметры опустить, то получившаяся инструкция SET TRANSACTION равносильна выражению. SET TRANSACTION READ WRITE WAIT ISOLATION LEVEL SNAPSHOTПеречислим параметры команды и их возможные значения.
Параметр Access mode (тип доступа) определяет тип доступа к данным. Он может принимать одно из двух значении. READ ONLY — транзакция может только читать данные н не в состоянии модифицировать их; READ WRITE — указывает, что транзакция может читать и модифицировать данные. Это значение устанавливается по умолчанию. Параметр Isolation Level (уровень изоляции) определяет порядок взаимодействия данной транзакции с другими в рабочей базе данных. Может принимать значения.
SNAPSHOT — значение по умолчанию. Внутри транзакции будут доступны данные в том состоянии, в каком они находились на момент начала транзакции. Если по ходу дела в базе данных появилисьнзменепия, внесенные другими завершенными транзакциями, то начатая транзакция их не увидит. При попытке модифицировать такие записи будет выдано сообщение о конфликте; SNAPSHOT TABLE STABILITY — предоставляет транзакции исключительный доступ к таблицам, которые она использует. Другие транзакции смогут только читать данные из этих таблиц; READ COMMl.
T — позволяеттранзакцин видеть текущее состояние базы данных. ВНИМАНИЕ: Обратите особое внимание на уровень изоляции транзакции. При неправильно установленном уровне могут возникать проблемы. Эти проблемы имеют место в одном из двух случаев: транзакция пытается модифицировать запись, которая была изменена или удалена уже после ее старта; транзакция пытается модифицировать таблицу, заблокированную другой транзакцией с уровнем изоляции SNAPSHOT TABLE STABILITY.
Параметр Lock Resolution (разрешение блокировки) управляет интерпретацией событий при обнаружении конфликта блокировки. Может принимать одно из двух значений. WAIT — значение по умолчанию. Ожидает разблокирования требуемой записи. После этого пытается продолжить работу; NO WATT — немедленно возвращает ошибку блокировки записи и прекращает выполнение транзакции. Параметр Table Reservation (уровень доступа к таблице) позволяет транзакции получить гарантированный доступ необходимого уровня к указанным таблицам. Существует четыре уровня доступа.
PROTECTED READ — запрещает обновление таблицы другими транзакциями, но позволяет им выбирать данные из таблицы; PROTECTED WRITE — блокируетобновление таблицы другими транзакциями, читать данные из таблицы могут только транзакции типа SNAPSHOT пли READ COMMITTED; SHARED READ — самый либеральный уровень. Читать могут все, модифицировать — транзакции типа READ WRITE; SHARED WRITE - транзакции типа SNAPSHOT или READ COMMITTED и READ WRITE могут модифицировать таблицу, остальные способны только выбирать данные. Если все действия, составляющие транзакцию, успешно выполнены или возникла ошибка, транзакция должна быть завершена, для того чтобы база данных оказалась в непротиворечивом состоянии. Для этого в Delphi есть две SQL- команды: COMMIT — сохраняет внесенные транзакцией изменения в базу данных. Это означает, что транзакция завершена успешно; ROLLBACK — откат транзакции.