Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.08;
Скачать: CL | DM;

Вниз

Как по TCP IP подключиться к RecordSet Другого приложения?   Найти похожие ветки 

 
d@vinchi ©   (2009-09-22 13:59) [0]

Первое приложение - служба, создает, открывает, пишет данные в БД (mdf) средствами DAO, второе приложение - консоль управления для этой службы... Возможно ли из консоли (второе приложение) подцепить DBGrid к открытому RecordSet в первом приложении (т.е. службе)? Нужно хотябы направление как это сделать или что-то подобное. Это необходимо, т.к. обновлять рекордсет по уведомлению от службы получается, но не очень корректно, уведомления приходят а в результатах ADOQuery.Requery нет последних записанных данных, т.е. обновление происходит слишком медленно... И еще минус - второму приложению нужен прямой доступ к x.mdf файлу от чего тоже хотелось бы избавиться...


 
Сергей М. ©   (2009-09-22 14:11) [1]


> уведомления приходят а в результатах ADOQuery.Requery нет
> последних записанных данных


Можно подумать, что если ты таки умудришься "по TCP\IP подключиться к RecordSet Другого приложения", то данные от этого станут записываться быстрее)


 
d@vinchi ©   (2009-09-23 12:31) [2]


> то данные от этого станут записываться быстрее)

не записываться, а передаваться клиенту на отображение без задерки, т.е. сначала отобразились а потом записались, это мое предположение и вот почему...
если из второго приложения которое подключено к БД через ADOConnection и выводит данные в DBGrid которые формирует ADOQuery выполнить следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
begin
 for I:=0 to 9 do
   begin
     ADOQuery1.Append;
     ADOQuery1.FieldByName("FieldName").AsString:="Test "+IntToStr(I);
     ADOQuery1.Post;
   end;
end;

... то данные в DbGrid отображаются мгновенно, из чего я и предположил что новые данные первом делом поступают в DataSource откуда уже в DbGrid и далее уже пишутся непосредственно в БД на диск что занимает некоторое время.


 
Медвежонок Пятачок ©   (2009-09-23 12:34) [3]

сохранить рекордсет в xml пакет и передать второму приложению.
в нем загрузить датасет из пакета и показать его в гриде.


 
Сергей М. ©   (2009-09-23 12:34) [4]

Подозревю, что дело всего лишь в незнании и/или непонимании работы механизма транзакций.


 
Sergey13 ©   (2009-09-23 13:01) [5]

> [2] d@vinchi ©   (23.09.09 12:31)
> не записываться, а передаваться клиенту на отображение без задерки
Не боищься, что отображаться начнет то чего нет в базе и возможно не будет никогда?

> если из второго приложения
Возможно, если выполнить все тоже самое, но через второй комплект компонент ADOConnection и ADOQuery и "мгновенность" будет слабее.

>     ADOQuery1.Append;
Если подобными методами работает и пишущий сервис, то я не удивлюсь плохому быстродействию этой пары.
Кстати твои приложения работают на одной машине? Где лежит база и каков запрос в твоем ADOQuery1?

И главное - чего хочется в идеале? Чтоб записи показывались в реальном времени?


 
d@vinchi ©   (2009-09-23 13:21) [6]


> Сергей М. ©   (23.09.09 12:34) [4]
> Подозревю, что дело всего лишь в незнании и/или непонимании
> работы механизма транзакций.

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


> Sergey13 ©   (23.09.09 13:01) [5]
>     ADOQuery1.Append;
Если подобными методами работает и пишущий сервис...

я показал чтобы понятно было о чем речь, в службе вообще DAO используется и пишется напрямую через рекордсет.

Приложения тестирую на одной машие, в последствии будут на разных, запрос просто на выборку всего что есть в нужной таблице без всяких условий, использовал такой метод т.к. тут же на форуме кто-то рекомендовал делать именно так потомучто ADOQuery работает быстрее чем ADOTable...

И идеале отображение того что пишется в БД на втором приложении в реальном времени...


 
Сергей М. ©   (2009-09-23 13:48) [7]


> в службе вообще DAO используется


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


 
Sergey13 ©   (2009-09-23 13:56) [8]

> [6] d@vinchi ©   (23.09.09 13:21)
> И идеале отображение того что пишется в БД на втором приложении в реальном времени...

А примерные объемы записываемого можно узнать?

> запрос просто на выборку всего что есть в нужной таблице без всяких условий
И сколько в ней нужного?


 
d@vinchi ©   (2009-09-23 14:00) [9]

спросто в службе вообще не использую VCL компоненты и в случае с службой DAO "компактнее", в приложении-мониторе VLC компонеты, т.к. это обычное приложение и компактность тут не так важна на мой взгляд...

а почему солянка, какая разница каким образом происходит взаимодействие с БД или есть разница?

Вообще складывается впечатление что DAO работает медтенне т.к. происходит гораздо больше вызовов чем у ADO...


 
Сергей М. ©   (2009-09-23 14:15) [10]


> d@vinchi ©   (23.09.09 14:00) [9]


А чем обоснован выбор именно MDF-формат в кач-ве контейнерного формата ?


 
d@vinchi ©   (2009-09-23 14:18) [11]


> Sergey13 ©   (23.09.09 13:56) [8]

О примерных объемах тяжело сказать - все зависит от количества клиентов работающих со службой и генерирующих события для лога и от интенсивности работы этих клиентов, поэтому от 10-50 сторк в час до 100-500 от одного клиента...


> И сколько в ней нужного?

при начале мониторнга нужно все начиная с того как мониторинг начался, далее критерии нужного могут измениться...

Отвечая на вопрос об объемах записываемого и думая об отображении в реальном времени представил как будет отображаться даже 100 сток в минуту (10 клиентов)...


 
d@vinchi ©   (2009-09-23 14:23) [12]

добавлю к 11, т.е. догадываюсь к чему спрашивал Sergey13 об объемах отображаемого в реальном времени - большие обемы будут неинформативны, тут наверное имеет смысл таймер, а не уведомления...


> А чем обоснован выбор именно MDF-формат в кач-ве контейнерного
> формата ?

удобный формат - все таблицы, индексы, обекты и т.д. все в одном файле...


 
Сергей М. ©   (2009-09-23 14:31) [13]


> d@vinchi ©   (23.09.09 14:23) [12]


Понятно.
Я-то подумал, то это безусловное требование Заказчика)
Ну, положим, аналогичными "удобствами" обладаеет далеко не одна СУБД.


 
d@vinchi ©   (2009-09-23 15:02) [14]

В моем случае самым идеальным и правильным использовать на стороне приложения монитора RDSConnection1 -> TADODataSet -> TDataSource -> TDbGrid, а на стороне службы реализовывать COM объект для предоставления доступа RDSConnection к локальному рекордсету...


 
Sergey13 ©   (2009-09-23 16:05) [15]

> [12] d@vinchi ©   (23.09.09 14:23)
> тут наверное имеет смысл таймер, а не уведомления...

Раз эти данные смотрит человек, то имеет смысл кнопка "Обновить". Таймер это тоже знаете ли....

> [11] d@vinchi ©   (23.09.09 14:18)
> все зависит от количества клиентов

Так клиентов еще и не один! Тогда имеет смысл выбрать все таки серверную СУБД. Есть масса неплохих и при этом даже бесплатных.


 
d@vinchi ©   (2009-09-23 16:19) [16]


> Тогда имеет смысл выбрать все таки серверную СУБД

не очень хочется обязывать конечного пользователя иметь серверную СУБД для ведения логов моей проги, к томуже ведение логов опционально и тебуется только на этапе первоначальной настройки проги или при возникновении проблем, с другой стороны при использовании MDF на компе обязательно должен быть установлен MS Access или я ошибаюсь?

Есть ли возможность выполнить обновление ADOQuery таким образом, чтобы в него вошли только новые данные с момента последнего запроса при условии что критерии запроса не менялись?


 
Медвежонок Пятачок ©   (2009-09-23 16:25) [17]

ну пусть лог.
пусть даже в бд.
почему из этого следует, что смотреть эти логи надо обязательно в гриде?


 
Sergey13 ©   (2009-09-23 16:28) [18]

> [16] d@vinchi ©   (23.09.09 16:19)
> не очень хочется обязывать конечного пользователя иметь
> серверную СУБД для ведения логов моей проги

Не надо думать, что серверная СУБД это здоровый шкаф с лампочками. Например firebird - это просто запущеный сервис на любой (практически) машине.


 
Медвежонок Пятачок ©   (2009-09-23 16:33) [19]

ставить сервер или просто использовать мдб для логов, тем более временных, для периода отладки и внедрения - это круто.

еще и программу написать для их чтения.

воистину дурная голова рукам покоя не дает.
текстовый лог - чего еще больше то?


 
d@vinchi ©   (2009-09-24 09:56) [20]


> Медвежонок Пятачок ©   (23.09.09 16:33) [19]
> ставить сервер или просто использовать мдб для логов, тем
> более временных, для периода отладки и внедрения - это круто.
>

не только для логов, в этой БД еще куча других таблиц, которые хранят совсем другие данные...

> еще и программу написать для их чтения.

программа не только читает логи, просмотр логов это одна из многочисленных ее функций...

> воистину дурная голова рукам покоя не дает.

не стоит так говорить когда не знаешь всей сути, ты же даже о 99% не в курсе о чем речь...

> текстовый лог - чего еще больше то?

не просто тестовый, для нормальной отладки надо в реальном времени видеть какие события происходит после выполнения человеком конкретных действий над аппаратным обеспечением, просто просмотреть лов в текстовом виде не даст никакой информации...

to [ALL]
всем спасибо, решение в итоге нашел благодаря изложенным тут мыслям!
еще раз всем спасибо!


 
Медвежонок Пятачок ©   (2009-09-24 10:24) [21]

не стоит так говорить когда не знаешь всей сути, ты же даже о 99% не в курсе о чем речь...

Здесь обсуждается конкретный вопрос, а не то, что там у тебя за кадром подразумевается.

не просто тестовый, для нормальной отладки надо в реальном времени видеть какие события происходит после выполнения человеком конкретных действий над аппаратным обеспечением, просто просмотреть лов в текстовом виде не даст никакой информации...

Я текстовые логи вижу в онлайне в реальном режиме времени с прокруткой окна. (F3 в фаре) - и чего?


 
sniknik ©   (2009-09-24 10:42) [22]

> всем спасибо, решение в итоге нашел благодаря изложенным тут мыслям!
наверняка кривое такое же как действия после другого совета с форума ->

> т.к. тут же на форуме кто-то рекомендовал делать именно так
скорее всего рекомендация была несколько иная...
> потомучто ADOQuery работает быстрее чем ADOTable...
ничего подобного, работают они ОДИНАКОВО быстро, просто ADOTable идеологически НЕВЕРНО и потому медленно (много лишних действий/данных делается/перемещается)... вот,  но если туже идеологию использовать у других компонентов (как ты похоже и сделал судя по обрывку кода) то получится ТОЖЕ САМОЕ.



Страницы: 1 вся ветка

Текущий архив: 2009.11.08;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.018 c
3-1229385486
Dem
2008-12-16 02:58
2009.11.08
ТCalendar


1-1222628088
Castello
2008-09-28 22:54
2009.11.08
Общение между приложениями


2-1253798864
Fr
2009-09-24 17:27
2009.11.08
Закрытие формы


2-1253285152
Сергей
2009-09-18 18:45
2009.11.08
Динамически создать три формы и для каждой свою кнопку


15-1252517487
@!!ex
2009-09-09 21:31
2009.11.08
Мона Лиза за 2.5 часа в MS Paint