Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2011, 21:49   #1
minamoto
Пользователь
 
Регистрация: 11.07.2011
Сообщений: 20
По умолчанию БД через ServerSocket

Всем привет!

Задача стоит такая:

1. Клиент отправляет на сервер запрос в виде "SELECT * FROM test_db"
2. Сервер обращается к mysql с этим запросом, получает ответ через компонент Query1 : TSQLQuery;

3. Как передать в коде ответ из mysql клиенту
Код:
For j:=0 to ServerSocket.Socket.ActiveConnections-1 do
    Begin
      If (j+1) = i then ServerSocket.Socket.Connections[j].SendText(Query1);
    end;
что бы в клиенте полученный Query1 можно было запихнуть в TDBGrid

Код:
Query1 := Socket.ReceiveText();
Возможно ли такое? Если да, то подскажите пожалуйста механизм передачи таблицы через сокеты.
minamoto вне форума Ответить с цитированием
Старый 21.07.2011, 22:42   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
.SendText(Query1);
Ну допустим все строки записываются в stringstream, после чего этот поток передается клиенту. Или банально: все пишется в обычный TStringList, после чего его строка (свойство Text) Передается обычной строкой, а клиентом уже парсится (Попадая в клиентскую переменку, в ее свойство, типа тот же TStringList.Text).
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.07.2011, 08:21   #3
minamoto
Пользователь
 
Регистрация: 11.07.2011
Сообщений: 20
По умолчанию

спасибо, буду разбираться
minamoto вне форума Ответить с цитированием
Старый 22.07.2011, 12:27   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

DataSnap же, не?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.07.2011, 13:04   #5
minamoto
Пользователь
 
Регистрация: 11.07.2011
Сообщений: 20
По умолчанию

надо будет ознакомиться
minamoto вне форума Ответить с цитированием
Старый 24.07.2011, 02:27   #6
minamoto
Пользователь
 
Регистрация: 11.07.2011
Сообщений: 20
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
DataSnap же, не?
Если я ничего не путаю, то у DataSnap свои методы подключения Клиент - Сервер. Я использую ServerSocket/ClientSocket. Думаю не в моем случае DataSnap.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну допустим все строки записываются в stringstream, после чего этот поток передается клиенту. Или банально: все пишется в обычный TStringList, после чего его строка (свойство Text) Передается обычной строкой, а клиентом уже парсится (Попадая в клиентскую переменку, в ее свойство, типа тот же TStringList.Text).
Предположим, что я передал кучу записей через TStringList клиенту.

Подскажите пожалуйста, как этот TStringList вывести в DBGrid, через цепочку ClientDataSet -> DataSource -> DBGrid ? Как тогда вносить записи в ClientDataSet ?



Если не так, пожалуйста, подскажите способ, как вывести информацию из TStringList в DBGrid.
У клиента нет прямой связи с БД. Только через ServerSocket.
minamoto вне форума Ответить с цитированием
Старый 24.07.2011, 08:10   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Я к тому, что изобретаете вы велосипед. Коннект к удалённой базе через TCP сервер (включая поддержку протоколов HTTP/SOAP и др.), Борланд реализовал сто лет назад, называлось это MIDAS, сейчас DataSnap.

В принципе, если научите свой сервер общаться по протоколу SOAP, на клиенте можно будет использовать стандартный SOAP клиент (TSOAPConnection), и обычный DBGrid, которому пофиг, куда именно коннектится датасет. Связка будет SOAPConnection -> ClientDataSet -> DataSource -> DBGrid.

> как этот TStringList вывести в DBGrid

ну, допустим, вывели вы (хотя в проще в обычный Grid вывести), и что дальше? Юзер изменил одно поле, будете строить огород для обновления данных на сервере? А потом точно такой же огород для DBEdit и ещё десятка DB-aware контролов?

Тогда уж проще наследовать свой объект от ClientDataSet и научить его работать с вашим сервером. Напишите свой DataSnap, фактически )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 28.07.2011, 23:48   #8
Neef-El
Пользователь
 
Регистрация: 23.07.2011
Сообщений: 10
По умолчанию БД через ServerSocket

ну у меня именно так.
только не поиграешь через прокси, маяк не умеет.
конечно у меня впринципе есть идея как его можно пустить через проксю но оно не надо мне теперь
Neef-El вне форума Ответить с цитированием
Старый 29.07.2011, 08:23   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ну у меня именно так.
А что за СУБД то? Может стоит попробовать СУБД предназначенные для интернета типа InterBase?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2011, 03:45   #10
minamoto
Пользователь
 
Регистрация: 11.07.2011
Сообщений: 20
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Я к тому, что изобретаете вы велосипед.
Ага, уже изобрел и вроде бы ездит.

DBGrid в помойку, сделал свою сетку как класс и прикрутил к ней нужные для моей работы методы, сеттеры и геттеры.

Просто почитал много инфы про грид.Пытался настроить под себя её. Пытался поставить халявную версию DBGridEh, но что то разочаровался.

Цитата:
Сообщение от veniside Посмотреть сообщение
ну, допустим, вывели вы (хотя в проще в обычный Grid вывести), и что дальше? Юзер изменил одно поле, будете строить огород для обновления данных на сервере? А потом точно такой же огород для DBEdit и ещё десятка DB-aware контролов?
Может я извращенец и многое еще не понимаю в протоколах, но передаю от сервера к клиенту по своим рукописным правилам.
Например: (команда)(действие)(данные). - естественно с MD5

(Скажите, правильно ли я делаю передачу между клиент - сервером ?)

Вот в "данные" как раз и пересылаю запарсеные записи из таблицы.

А на стороне клиента разбираю через отдельно написанный класс. И все данные, пришедшие с сервера как раз пропускаю через такой парсер.

Вот с этого парсера и пускаю в самопальную сетку все данные.
Единственная проблема, это не знаю как отследить, что mysql запрос выполнен и только тогда отправлять с сервера весь пакет. А то получается, что с клиента передал команду серверу. А тот не дожидаясь ответа от mysql посылает ответ клиенту. Иногда приходит пустой пакет без ответа от mysql.

Скажите пожалуйста, каким событием это отловить?

Да и ошибки на стороне сервера думаю не так сложно отловить.


А сам принцип работы как в PHP делаю. Тоесть послал запрос, жди ответа от сервера. А мне больше и не нужно.

Данные в сетке в реальном времени мне не надо обрабатывать. Если нужно поменять какую нибудь запись в поле, то просто сделал отдельное окно для редактирования этой записи. Да, писанины много, но зато свое, родное, и за одно понимаешь как это все работает.
minamoto вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
progressbar и отправка файла через ServerSocket D_E_N Работа с сетью в Delphi 2 15.02.2011 15:37
Отправка типизированных данных через Client/ServerSocket prod87 Работа с сетью в Delphi 2 10.07.2010 20:47
Передача данных StringGrid через ServerSocket - ClientSocket Polotenchik Общие вопросы Delphi 4 18.03.2010 01:42
Реализация бана через ServerSocket и ClientSocket Sensizu Общие вопросы Delphi 0 04.01.2010 13:42
Одновременная работа с несколькими портами через ServerSocket Sane2k Работа с сетью в Delphi 16 06.03.2009 17:24