Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.09.2008, 15:11
kiber0net0 kiber0net0 вне форума
Прохожий
 
Регистрация: 12.08.2008
Сообщения: 15
Репутация: 10
По умолчанию SQL-запрос для приложенией клиент-сервер

Есть приложение-сервер, которое работает с БД mySQL через ADO.

Хочу написать приложение клиент, которое через протокол TCP/IP будет работать с БД через мое приложение-сервер.


Реализовать отображение таблиц через ADOQuery уже заранее созданных на приложении-сервере у меня получается через DCOMConnection, DataSetProvider и ClientDataSet , а от отправить SQL - запрос из клиента для его вылолнения на сервере и получении результатов на клиенте не получается.

Впринцепе можно предусмотреть все нужные таблицы для клиента на сервер-приложении и не мучаться, но хотелось зделать через один-два компонента чтобы в случая изменения клиента не приходилось переустанавливать серверное приложение


Что можете посоветовать? Может есть лучшие способы связи клиент-сервер приложений?

За ранее спасибо за ответы.
Ответить с цитированием
  #2  
Старый 25.09.2008, 15:37
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Бери MIDAS и не разрушай мозг.
Если все-таки очень хочется самому повторить это, то учти, что у тебя будут приличные тормоза на "перекладке" данных. В свое время на этом наелись и перешли на MIDAS.
Ответить с цитированием
  #3  
Старый 26.09.2008, 12:55
kiber0net0 kiber0net0 вне форума
Прохожий
 
Регистрация: 12.08.2008
Сообщения: 15
Репутация: 10
По умолчанию

lmikle
Может я конечно ошибаюсь, но на сколько я понимаю, я его именно и использую, проблема в том, как организовать через один набор данных посылать на сервер SQL-запросы и получать результат, не хочется на каждую функцию в клиенте создавать отдельный набор в приложении-сервер, и если мне захочется добавить какую нибудь функцию для клиента, то прийдется и server переделать
И как тогда создать клиента, в котором необходмо будет получать отобранные строки БД по какому то параметру , например: с начала месяца по сей день, или за прошлий месяц или за прошлый год, если надо отсейять по дате и т.д.

Последний раз редактировалось kiber0net0, 26.09.2008 в 13:01.
Ответить с цитированием
  #4  
Старый 26.09.2008, 14:49
kiber0net0 kiber0net0 вне форума
Прохожий
 
Регистрация: 12.08.2008
Сообщения: 15
Репутация: 10
По умолчанию

Все, тему можно закрыть, я разобрался
Упустил из виду один пример который приводился в книге А.Сорокина "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.AppServer.Qur('se lect * from MK');
ClientConnection.ClientDataSet1.Close;
ClientConnection.ClientDataSet1.Open;
end;

procedure TClient.SpeedButton2Click(Sender: TObject);
begin
ClientConnection.DCOMConnection1.AppServer.Qur('se lect * from TableIn');
ClientConnection.ClientDataSet1.Close;
ClientConnection.ClientDataSet1.Open;
end;


Ну в общем думаю все теперь понятно.



P.S. Я понимаю что это и имелось ввиду выше изложенными подсказами, но для человека который сталкивается с этим в первый раз, тоесть меня, это только натолкнуло на выше приведенный способ, поэтому прошу воздержяться от коментариев типа "Так я об этом и говорил", "Ясен пень..." и т.д. .


P.S. P.S. Надеюсь я не напрасно потратил пол часа на набор этого сообщения и это кому-нибудь пригодится

Всем удачи, и большое спасибо за ответы(вопрос был в нескольких форумах), они меня и натолкнули на такой ответ.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:38.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025