9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200
|
||||||
1 | ||||||
Ликбез по DataSnap30.01.2015, 23:54. Показов 22355. Ответов 30
Метки нет (Все метки)
Всех приветствую,
предлагаю открыть дисскусию по теме технологии DataSnap (трехзвенка от создателей delphi) интересна любая информация по данной технологии (в идеале ссылку на рабочий проект - только не такой ,как в папке sampels, что в комплекте с delphi в котором во первых черт ногу сломит, во вторых того что нужно все равно нет, а сделанный самостоятельно ) Те кто пытался самостоятельно разобраться, по книгам и учебным примерам думаю меня поймут. И так цель: есть одноранговая локальная сеть TCP/IP 1й Компьютер: (ОС Win7. Установлена Delphi XE7 Architect) Лежит база firebird (2.5/3 диалект/win1251) в ней всего одна таблица - "clients" Запущен сервер приложений datasnap - в качестве службы Windows. На форме клиентского приложения VCL. есть таблица dbgrid и кнопки под ней "Вставить" "Изменить" "Удалить" "Найти запись" также присутствует кнопка "ПОДКЛЮЧИТСЯ/ОТКЛЮЧИТСЯ" и несколько Edit-ов для внесения параметров (логин/пароль/ip адрес сервера приложений/порт/протокол) 2й Компьютер: ОС WinXP Только тонкий клиент (приложение VCL) 3й Компьютер: ОС Win7 Только тонкий клиент (приложение VCL) Собственно просто хочу, чтобы это работало. Если бы на первом же "вэбинаре" эпизод 1 или, как там у них показали бы "на пальцах популярно " такой или подобный проект, интерес вникать в эту рекламируемую технологию дальше, был бы на много выше А вот, что я выяснил за 2 недели исследований: 1. Самое главное, данный проект можно реализовать 2мя путями "по старому" - DataSnap до delphi 2010 ( клиент на основе провайдера TDSProvidrConnection) "по новому" - DataSnap delphi 2010, XE,XE2,........ (клиент на базе компонента TSqlServerMethod) меня прежде всего интересует "по новому" ибо (цитирую Осипова ниже) (но и по старому интересно) "Использование провайдеров наборов данных TDataSetProvider и TDSProviderConnection в проектах DataSnap целесообразно лишь в том случае, когда клиентское приложение должно работать на основе интерфейса IAppServer -т.е. для совместимости со старыми проектами зависимыми от COM ..................... Основное достоинство новой DataSnap — избавление от зависимости от COM, что позволило создавать более простые и производитель-ные приложения" не буду корчить из себя знатока - совершенно не представляю, что в итоге дает мне на практике эта независимость от COM но я делаю проект с нуля и хочу, чтобы он был универсальным и актуальным. Подозреваю, что будет легче "портировать" тонкий клиент на другие оси (не мелкософтные). ТЕПЕРЬ В КРАТЦЕ: по старому: сервер Firebird - ТSQLconnection - ТSQLdataset - DataSetProvaider - SQLquery (причем у ТSQLdataset интересны 2 свойства это CommandType и Commandtext) В CommandText передается инструкция SQL если в CommandType выбранно stQuery, но надо не забыть поставить флаг poAllowCommandText в опциях. клиент ТSQLconnection - DSProviderConnection - ClientDataSet1 - DataSource1 - DBGrid (есть один нюанс клиент не будет работать если на компьютере с клиентом не зарегистрирована библиотека midas.dll) Сразу вопрос, а если "по новому" - нужна эта midas.dll на клиенте? .. нет, а что нужно? по новому: сервер Firebird - ТSQLconnection - ТSQLdataset -SQLquery клиент ТSQLconnection - SqlServerMethod - - DataSetProvaider - ClientDataSet1 - DataSource1 - DBGrid (здесь все sql запросы передаются через параметры серверных методов - ниже есть пример) (отступление) в посте (ISAPI, MySQL и DataSnap XE2. от 26/08/2012 Vlad 11 Комментарии Delphi в Web ) сказано цитирую: "Теперь настроим TSQLServerMethod. Вообще, этот компонент удобно использовать в том случае, если нам необходимо получить данные только для чтения. " и "В приведенном выше примере клиента мы создали вот такую связь компонентов: ТSQLconnection - SqlServerMethod - - DataSetProvaider - ClientDataSet1 - DataSource1 - DBGrid Для чтения данных с сервера этого достаточно, для модификации — нет. Напишем теперь клиентское приложение, которое будет и читать и модифицировать данные." Далее автор реализует вариант "по старому" причем не с механизмом Commandtext, а с пресловутым dbnavigatorom, что есть не серьезно Так вот - это не правда с помощью SqlServerMethod данные прекрасно редактируются. Совсем другой вопрос, как в реальном времени обновлять данные в DBGrid не включая и не выключая постоянно ТSQLconnection. Связь (TDSProvidrConnection-DataSetProvaider) сама рулила обновлением данных (там и команда нужная имеется ApplyUpdate) достаточно было открыть/закрыть ClientDataSet1 рвать ТSQLconnection было не нужно. Я добился конечно видимости - реальной работы с данными через тонкий клиент только при помощи SqlServerMethod но что будет дальше если я захочу встроить например механизм транзакций ? Не помешает постоянное отключение/включение ТSQLconnection ? Так как я читал все подряд, то мой проект сначала получился комбинированным т.е на форме присутствовали как компоненты - провайдеры так и SqlServerMethod и удивительное дело все это вместе работало - а точнее "Вставить" "Изменить" "Удалить" работали через SqlServerMethod в то время как DBGrid обнавляли провайдеры в тчении одного подключения ТSQLconnection ЧТО Я НЕ СМОГ ПОБЕДИТЬ 1. "Найти запись" - я не смог передать sql запрос SELECT из клиента в сервер не "по старому " не "по новому" Господин Осипов к величайшему сожалению показал только пример с Insert , по которому я и реализовал Delet и Update. как правильно обновить ClientDataSet1 через метод - не понимаю "по старому " через Commandtext не так интересно но тоже пока не получается 2. Я не могу заставить работать клиент на машине где нет delphi, сервер - могу. Т.Е 1й Компьютер (клиент) ----------- 2й Компьютер (сервер) работает 1й Компьютер (клиент) ----------- 3й Компьютер (сервер) работает 1й Компьютер (сервер) ----------- 2й Компьютер (клиент) не работает 1й Компьютер (сервер) ----------- 3й Компьютер (клиент) не работает Пишет мол Error Asess Violation xxxxxx Not READ adress 00000000000000 ну то есть имеется попытка доступа к чемуто , что пока/или уже (nil) 3. Как правильно организовать процедуру самого подключения, особенно меня интереует запрос имени и пароля
мне интересен вариант - datasnap но когда я делаю свойство ТSQLconnection Loginpromt - True то выскакивает окошко, а как сделать в своей форме ? и еще один момент, реакцию на вводимые данные в edit по портам, протоколам, ip я наблюдаю но если клиент и сервер на одной машине (где делфи) то даже если данные не вводить то все равно таблица открывается, где я только не вычищал из инспектора данные по умолчанию безполезно клиент все равно их находит - этот момент меня напрягает Вот на всякий случай кому интересно, листинг сервера и клиента:
1
|
30.01.2015, 23:54 | |
Ответы с готовыми решениями:
30
Делегаты. Ликбез Ликбез по ООП Требуется ЛикБез ^,.,^ Qthread (ликбез) |
16 / 16 / 1
Регистрация: 29.11.2014
Сообщений: 227
|
|
04.09.2015, 17:08 | 21 |
PiNorDim, привет, короче с базовыми операциями я разобрался, все летает, а вот картинки грузить - трабл... - метод ApplyUpdates - не работает. То есть, в закешированных элементах (Simpledataset, ClientDataSet) отображается загрузка картинки, а вот в реальной базе MySQL EmtyDataSet (((
kebot, я видел в соседней ветке ты мучался с загрузкой картинок - домучал в итоге?
0
|
1 / 1 / 4
Регистрация: 09.09.2013
Сообщений: 112
|
|
10.05.2018, 13:48 | 22 |
Кто-нибудь разобрался с этим ClientDataSet? Прошерстив инет вдоль и поперек, так и не нашел решения.
0
|
16 / 16 / 1
Регистрация: 29.11.2014
Сообщений: 227
|
|
10.05.2018, 14:09 | 23 |
Привет, сформулируй свою задачу
0
|
1 / 1 / 4
Регистрация: 09.09.2013
Сообщений: 112
|
|
11.05.2018, 10:44 | 24 |
Нужно с клиента передать запрос серверу, делаю через ClientDataSet, но получаю ошибку открытого набора данных. Решение нашел только то, которое выше опубликовано. Но может быть кто-нибудь обошел эту проблему?!
Добавлено через 6 часов 3 минуты Есть ли у кого книга Боба Сворта "Delphi 2010 DataSnap: новые возможности в управлении и доступе к данным"? Не могу найти, ссылки не рабочие.
0
|
11.05.2018, 15:44 | 25 |
что значит передать запрос?
запрос это просто строка. вы строку на сервер передать не можете? ответ получать можно в чем угодно, можно и автоматом в Clientdataset но современные тенденции программирования как бы намекают, что можно и без датасетов, простыми JSON обходиться весь WEB обходится, и вы справитесь )))
0
|
16 / 16 / 1
Регистрация: 29.11.2014
Сообщений: 227
|
|
14.05.2018, 10:37 | 26 |
kaz4640984, привет! На днях собираюсь обновить свои знания по Datasnap, если вопрос ещё актуален, думаю смогу тебе помочь. Маякни здесь - актуально ещё или нет.
С уважением,
0
|
1 / 1 / 4
Регистрация: 09.09.2013
Сообщений: 112
|
|
15.05.2018, 10:06 | 27 |
GringoV, привет! С этой проблемой разобрался. Сейчас пытаюсь уменьшить Connection Timeout, при неправильном хосте выдает дефолтные 20-25 секунд.Пытаюсь решить, но пока безрезультатно!
0
|
15.05.2018, 10:22 | 28 |
да. это есть. таймауты игнорятся
у меня только одна мысль. вынести сам коннект в поток и прекращать его ждать через нужный нам таймаут он конечно потом отвалится и все такое, но это уже просто игнорить
0
|
1 / 1 / 4
Регистрация: 09.09.2013
Сообщений: 112
|
|
05.06.2018, 11:34 | 29 |
Всем привет!) Долго меня не было!
Очередной трабл, который не могу сам решить. В общем есть сервер к которому подключаются клиенты. Клиенты отправляют отчет на сервак. Все хорошо работает и работало, пока не добавил сворачивание в tray. Как только сверну в tray, клиент получает ошибку от БД (SQLite) "The database file is locked". Если не сворачивать в tray, то работает без ошибок. Есть у кого какие идейки по этому поводу?
0
|
06.03.2023, 10:52 | 30 |
Прекрасно.
Единственное замечание, что в современных реалиях лучше исходники не паковать в архив и хранить непонятно где, а разместить например на GitHub. То же и с доками. Так доступ к ним будет гораздо шире.
1
|
7 / 5 / 0
Регистрация: 08.05.2009
Сообщений: 48
|
|
07.03.2023, 09:35 | 31 |
Спасибо
0
|
07.03.2023, 09:35 | |
07.03.2023, 09:35 | |
Помогаю со студенческими работами здесь
31
Ликбез по ТВ и apple tv DataSnap и БД Ликбез по стеку прошу ликбез по оконным приложениям Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |