Создание сетевой БД

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем Programmer_Hard, 29 ноя 2006.

  1. Programmer_Hard

    Programmer_Hard Гость

    Здравствуйте
    Делаю Сетевую БД . Принцип простой - клиент-приложение делает запрос к БД сервер-приложения . и получает результат.
    Посоветуйте, кто знает, какие компоненты нужно испальзовать?
    Может эти (TIBTable TIBQuery TIBDatabase)
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-Programmer_Hard+29:11:2006, 15:52 -->
    <span class="vbquote">(Programmer_Hard @ 29:11:2006, 15:52 )</span><!--QuoteEBegin-->Делаю Сетевую БД
    [snapback]49232" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    А с чего вы взяли что это называеться сетевая БД... судя по описанию вы делаете 3-х звенку

    а 3х звенка делается, ну например , на сокетах

    З,Ы,
    <<ADO & COM или SQL-сервер своими руками.>>

    <<Как писать DataSet>>

    <<COM. Автоматизация - от простого к сложному>> и <<Midas и COM. Советы и Приемы>> + <<сокет сервер>>
     
  3. SNike

    SNike Гость

    Может ошибаюсь, но по-моему это двухзвенка, и можно обойтись, например, ADO или dbExpress
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: SNike
    давайте расуждать
    1. Есть клиент
    2. Есть сервер который обрабатывает запросы клиента, и общаеться с БД
    3. У афтара нет ещё БД, возможно он воьмёт какуюнибуть локальную (Парадокс, аксес и т.д....)

    Возможно! автор хочет обьеденить 2 + 3 и зделать СУБД...

    З,Ы, << Похожий топик >>
     
  5. Programmer_Hard

    Programmer_Hard Гость

    -> Morpheus Все так и есть.
    Я сделал так: взял Query1,Table1, DBGrid1, DataSourse1 и создал локальную БД - получил "сервер-прилож-е".
    Затем я создал "приложение-клиент" аналогичное предыдущему "сервер-прилож-ю", но без источника данных.
    "Приложение-клиент" посылает "сервер-прилож-ю" SQL -запрос в чистом виде c помощью SendText().
    "Cервер-прилож-е" в ответ на этот запрос формир-ет таблицу-результат.

    Меня интересует: как эту таблицу переслать клиенту через сокеты ? НЕ знаю как выделить отдельную запись и обратиться к полю в нем.
     
  6. LAW

    LAW Гость

    Результат выполнения запроса SQL содержащего "SELECT", выполненного в приложении-сервер называется "курсор", он содержит в себе отобранные по "SELECT" записи.
    То что в приложении-клиент нужно создавать DataSet - это 100-пудово и обращаться с ним как с обычной БД. А вот как в него передать курсор от DataSet приложения-сервера не знаю. Но если учесть, что в курсоре может быть несколько миллионов записей - это должна быть часть курсора или какой-то указатель.
     
  7. SNike

    SNike Гость

    В общем-то все зависит от конкретного случая, потому трудно что-либо конкретное сказать по общей формулировке. Если захочет создать свои бизнес-правила - тогда трехзвенка. Но судя по всему, т.к. есть вопрос о том какие VCL использовать, проще начать с обычного клиент-сервера. Опять же, все зависит от постановки задачи и исходных факторов...
     
  8. LAW

    LAW Гость

    Я полазил по данном вопросу и пришёл к выводу, что роль серверной части заключается в основном синхронизации работы клиентских частей и взятию на себя основной обработки данных. По этому, собственно, ничего кроме управляющих (синхронизирующих) команд с приложения-сервера и не должно передаваться на приложение-клиента. Приложение-клиент может вполне забирать результат обработки данных приложением-сервер прямо с сервера БД. Например с помощью виртуальных таблиц если результат хранить не надо.
    Например: приложение-клиент хочет отредактировать запись. Посылается запрос в приложение-сервер на выделение записи для редактирования. Приложение-сервер смотрит свободна ли запись, блокирует ее и разрешает редактирование приложению-клиенту. При этом считывание и обновление записи происходит с клиента прямо на сервер БД. После успешного редактирования на приложение-сервер посылается команда об отмене блокировки записи. Также приложение-сервер должно известить остальные клиенты о том, что запись изменилась.
    По моему так проще и быстрее чем пробрасывать данные через приложение-сервер.
    Остаётся вопрос об уязвимости открытого порта сервера БД. Но думаю, что здесь всё можно решить авторизацией и тунелированием данных (что-то типа VPN) между хостами.
     
  9. Programmer_Hard

    Programmer_Hard Гость

    еще вопрос по работе с DBGrid
    После выполнения SQL запроса его результат заносится в DBGrid:
    Код (Text):
      Query1->Open();
    DataSource1->DataSet = Query1;
    Теперь нужно отослать содержимое DBGrid через сокет
    Из таблицы я отсылал так:
    Код (Text):
     ServerSocket1->Socket->Connections[0]->SendText(Table1->FieldByName("Fio")->AsString +
    "\n"+
    Table1->FieldByName("Kol")->AsInteger +
    "\n"+        
    Table1->FieldByName("Price")->AsInteger);
    ... а как из DBGrid не знаю, подскажите.


    8<----------------- ????
    з.ы. юзай тэг
    Код (Text):
    [/size][/b][/color]
     
  10. LAW

    LAW Гость

    Непонятно, зачем тебе получать данные из DBGrid если он, DBGrid показыает то, что есть в Table1.
    Чем плох вышеописанный тобой способ?
     
  11. Programmer_Hard

    Programmer_Hard Гость

    LAW-> При обработке запроса клиента Select данные в основной таблице не изменяются, результат отображается только в дбгрид путем Query1->Open(); DataSource1->DataSet = Query1;. соответсвенно я не могу взять данные из таблицы.
    А насчет виртуальных таблиц не знаю , подскажи
     
  12. LAW

    LAW Гость

    Если грид подключен к квери, то точто в гриде, то и в квери. Нужны данные из грида - читай квери.
    Код (Text):
    Query1->First();
    while(!Query1->Eof)
    {
    'Результат1'=Query1->FieldByName("Поле1")->As'Тип';
    'Результат2'=Query1->FieldByName("Поле2")->As'Тип';
    /////
    Query1->Next;
    }
    Таким образом внутри каждого прохода цикла считываются все поля одной записи.
    Грид тоже можно как-то прочитать, но я ещё не встречал пока такой надобности.

    Сорри если есть ошибки. Писал на коленке.
     
  13. Programmer_Hard

    Programmer_Hard Гость

    Спасибо, разобрался ,сделал :(
     
Загрузка...

Поделиться этой страницей