|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.09.2008, 15:11 | #1 |
Пользователь
Регистрация: 12.08.2008
Сообщений: 18
|
SQL-запрос для приложенией клиент-сервер
Есть приложение-сервер, которое работает с БД mySQL через ADO.
Хочу написать приложение клиент, которое через протокол TCP/IP будет работать с БД через мое приложение-сервер. Реализовать отображение таблиц через ADOQuery уже заранее созданных на приложении-сервере у меня получается через DCOMConnection, DataSetProvider и ClientDataSet , а от отправить SQL - запрос из клиента для его вылолнения на сервере и получении результатов на клиенте не получается. Впринцепе можно предусмотреть все нужные таблицы для клиента на сервер-приложении и не мучаться, но хотелось зделать через один-два компонента чтобы в случая изменения клиента не приходилось переустанавливать серверное приложение Что можете посоветовать? Может есть лучшие способы связи клиент-сервер приложений? За ранее спасибо за ответы. |
26.09.2008, 18:08 | #2 |
Форумчанин
Регистрация: 28.07.2007
Сообщений: 361
|
Если уж так сильно захотелось трех уровневое приложение, осваивайте web интерфейс. прочитайте что такое бизнес правила, сервер приложений, тонкий и толстый клиент. Web client - самый тонкий клиент. У вас есть одна существенная ошибка, от клиента логику не строят. Вся логика должна быть на сервере, или на SQL или на сервере приложений. Вы пишите, при изменении клиента - возможна переустановка сервера - Самая страшная инженерная ошибка. Сервер точно от клиента зависеть не должен.
|
27.09.2008, 03:59 | #3 |
Пользователь
Регистрация: 12.08.2008
Сообщений: 18
|
Я наверное не правильно обьяснил. Весь основной код обработки данных как раз на сервере, данные берутся из log файлов которые создаются автоматически, заносятся в БД и дополняются или редактируются(если необходимо) юзером через клиент.
Просто мне было интересно как получить данные через SQL-запрос через тонкий клиент, да можно настроить куче провайдерво для каждой таблицы, но помоему это только плутает, проще когда один провайдер и через него проходят SQL-запросы для отображения отсеянных клиентом данных (по крайней мере для меня). Тему можно впринцепе закрыть, я разобрался. Упустил из виду один пример который приводился в книге А.Сорокина "Delphi разработка баз данных" и помоему еще где-то виде, там очень подробно росказывается как считать количество юзерей подключенных в данный момент к серверу . Все как всегда просто. Кто столкнется с такой проблемой - рецепт(для Delphi7): I На приложении-сервере: 1) Через меню "File -> New -> Other... -> закладка "Multitier" -> выбираем "Remote Data Module" -> OK -> называем этот модуль в поле "CoClass Name"; 2) В созданном модуле помешаем компонент TDataSetProvider(закладка "Data Access") 3) Настраиваем поле DataSet с компонентом TADOQuery или c чем вам удобней, главное чтоб было куда SQL-запрос задать 4) TADOQuery(или что там выбрали) соединяем с БД. 5) Через меню "viev -> Type Library" добавляем к нашему "Remote Data Module" новый метод. 6) На закладке "Parametrs" добавляем переменную типа "BSTR", в "modifier" оставляем "in", закрываем "Type Library". 7) Теперь в нашем модуле ищем процедуру с именем которым мы назвали созданный метод и вписываем туда что-то типа procedure TThermoForm.Qur(const sqlQ: WideString); begin DMConn.QConnection.SQL.Text:=sqlQ; end; где "sqlQ"- наша переменная созданная в методе. I На приложении-клиенте: 1) Соединяемся с нашим сервером через компонент TDCOMConnection(на закладке "DataSnap") 2) Связываем TClientDataSet(закладка "Data Access") c TDCOMConnection через поле "Remote Server" и указываем в поле "Provider Name" имя нашего TDataSetProvider установленного на сервере. 3) Компонент DataSource1 связываем с TClientDataSet, а сам DataSource1 с TDBGrid(или как сами хотите); 4) Создаем две кнопочки и пишем примерно такой код. procedure TClient.SpeedButton1Click(Sender: TObject); begin ClientConnection.DCOMConnection1.Ap pServer.Qur('select * from MK'); ClientConnection.ClientDataSet1.Clo se; ClientConnection.ClientDataSet1.Ope n; end; procedure TClient.SpeedButton2Click(Sender: TObject); begin ClientConnection.DCOMConnection1.Ap pServer.Qur('select * from TableIn'); ClientConnection.ClientDataSet1.Clo se; ClientConnection.ClientDataSet1.Ope n; end; Ну в общем думаю все теперь понятно. P.S. Я понимаю что это и имелось ввиду выше изложенными подсказами, но для человека который сталкивается с этим в первый раз, тоесть меня, это только натолкнуло на выше приведенный способ, поэтому прошу воздержяться от коментариев типа "Так я об этом и говорил", "Ясен пень..." и т.д. . P.S. P.S. Надеюсь я не напрасно потратил пол часа на набор этого сообщения и это кому-нибудь пригодится Всем удачи, и большое спасибо за ответы(вопрос был в нескольких форумах), они меня и натолкнули на такой ответ. Rik если Вам не сложно не могли бы вы указать источники , где можно по подробней почитать или расказать на пальцах про бизнес правила, потому что в литературе про это вскользь упомянули, но без коментариев и примеров. Кстати меня смущает выше приведенный код, не может ли создаться такая ситуация когда два юзера начинают изменять SQL-запрос одновременно и тот кто последний получит нуный результат, а все остальные не верный, а результат последнего, или delphi как то прослеживает чтобы данное не повторялось!!! |
27.09.2008, 18:30 | #4 | |
Форумчанин
Регистрация: 28.07.2007
Сообщений: 361
|
Цитата:
Для серверных СУБД, все бизнес правила, весь контроль за правильностью вводимых значений, могут быть вынесены на сервер в ввиде хранимых процедур, триггеров и др. Клиент работающий с такой базой, не содержащий в своем коде никаких бизнес правил, называется тонким. Существуют и смешанные варианты. Лучший вариант, конечно, вынесение бизнес правил на сервер, или на SQL или на сервер приложений. Как известно самый тонкий клиент это Web браузер, поэтому я и рекомендую для 3х уровневых архитектур Web интерфейс. Существуют правила Кодда, которые характеризуют реляционные СУБД и правила нормализации таблиц. Если вы с этим незнакомы, поищите в интернете, должно быть, все эти правила тоже помогут с верной организацией бизнес правил. Я впервые про Бизнес правила прочитал в книге Натальи Елмановой Borland C++ Builder 4, давным давно это было, не знаю издается ли сейчас что-либо, поэтому на счет литературы что посоветовать и не знаю... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сервер клиент | Dr.zlo | Работа с сетью в Delphi | 13 | 15.06.2009 21:43 |
Клиент-сервер-клиент | Кронос | Работа с сетью в Delphi | 3 | 24.08.2007 07:57 |
Клиент-Сервер | snakesoft | Работа с сетью в Delphi | 8 | 20.07.2007 17:34 |
клиент сервер | Oksana1988 | Фриланс | 3 | 10.04.2007 12:12 |
Клиент-сервер | Scorpio | Работа с сетью в Delphi | 6 | 13.02.2007 22:57 |