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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.05.2013, 17:29
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
Печаль Обновление ADOTable

Всем привет!
Начну с того что не один форм/статью я прочитал по этой проблеме, решения есть, но они без толковые. В чем суть. Имеются две копии программы (на двух разных компьютерах), обе работают с БД, которая просто лежит в общей папке. И при изменении какой либо таблицы, программа посылает сообщение по локальной сети, что собственно некая таблица изменилась необходимо обновить. И все вроде бы ничего, но сообщение посылается мгновенно, а обновляется не совсем. Если после приема сообщения не выждать 3-4 секунды данные не обновиться вообще. Использованные компоненты ADOconnect, ADOTable, DataSourse, DBgridEh. База данных Access.
Обновлять пытался так:

Код:
   form1.ADOTable.Active:=false;
   form1.ADOTable.Active:=true;
   form1.DataSource1.DataSet.Refresh;
   form1.DataSource1.Enabled:=false;
   form1.DataSource1.Enabled:=true;
   form1.ADOTable.Refresh;
   form1.DBGridEh1.Refresh;

Этим кодом который нашел в интернете:

Код:
procedure ReOpenDataSet(DataSet: TDataSet; StayActiveRecord: boolean = true);
begin
   with DataSet do
      begin
        if StayActiveRecord then
            Tag := Fields[0].AsInteger;  
        DisableControls;               
        Close;
        Open;
        if StayActiveRecord then
            Locate(Fields[0].FieldName,Tag,[]);
        EnableControls;            
      end;
end;

Но результата к сожаление нет . Обновляет, но так же 3-4 секунды - это долго. Мне посоветовали использовать компонент ADOQeury мол с ним таких проблем нету, да я сам где читал, что кому то это помогло. Хорошо что не весь проект переписал, а только к одной таблице его поставил, потому что результат оказался точно таким же. Пробовал я запускать обе программы на одном ПК, да бы исключить проблему с сетью. Исключил.
Что собственно хотелось бы узнать, как грамотно/правильно обновить данные. Хотя бы с задержкой 1-1,5 сек. Или может дело еще в чем? Надеюсь на вашу помощь. Спасибо.

И еще кое что, если может у кого есть хорошие статьи или книги по этой проблеме, ткните. Просто хотелось бы знать, почему вообще так происходит и разобрать по поподробнее.

Последний раз редактировалось listerine, 28.05.2013 в 17:51.
Ответить с цитированием
  #2  
Старый 28.05.2013, 17:59
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

похоже дело еще в чем-то
сеть? фаерволы? антивири?

а как adoquery использовал?

у меня даже на удаленном сервере десятки запросов в секунду отлетают
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #3  
Старый 28.05.2013, 18:12
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Насколько я в курсе, к сожалению это не лечится. Обновление акцесовского набора данных идет с приличной задержкой секунд в 5. Мгновенного не выйдет. Единственный вариант - перейти на SQL-сервер. Там все будет обновляться вовремя.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 28.05.2013, 18:18
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Mrak
похоже дело еще в чем-то
сеть? фаерволы? антивири?

а как adoquery использовал?

у меня даже на удаленном сервере десятки запросов в секунду отлетают

Сеть в норме. Да я и как уже говорил на одном компьютере проверял. Насчет фаерволов и антивирей тоже была такая мысль, но результата не дала.
Сейчас обратил внимание что данные с опоздание добавляются в саму бд. То есть открыл свою программу и бд через MS Access, отредактировал строку через свою программы изменения прошли через как раз 3-4 секунды. Где подвох? Может настройки самой бд?
Ответить с цитированием
  #5  
Старый 28.05.2013, 18:22
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Страдалецъ
Насколько я в курсе, к сожалению это не лечится. Обновление акцесовского набора данных идет с приличной задержкой секунд в 5. Мгновенного не выйдет. Единственный вариант - перейти на SQL-сервер. Там все будет обновляться вовремя.

Mark, пишет что все норм, да и на других формах читал что у людей по 0,34 - 0,57 сек. обнова проходит. Но если честно надежды уже почти нет, что найду решение.
Ответить с цитированием
  #6  
Старый 28.05.2013, 19:33
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Я как-то пробовал ради эксперимента замутить чат через АДО на Акцесе. И вот там я наткнулся на те-же грабли. Запускал 4-5 клиентов и они должны были общаться в реальном времени. Написал простенький скрипт имитирующий вопрос-ответ группового чата. И вот периодически там наступал клин из-за задержки обновления общей таблицы. Но, стоило перевести все это хозяйство на MSSQL и все заработало как часы. Вот такие пироги.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 28.05.2013, 23:30
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Страдалецъ
Я как-то пробовал ради эксперимента замутить чат через АДО на Акцесе. И вот там я наткнулся на те-же грабли. Запускал 4-5 клиентов и они должны были общаться в реальном времени. Написал простенький скрипт имитирующий вопрос-ответ группового чата. И вот периодически там наступал клин из-за задержки обновления общей таблицы. Но, стоило перевести все это хозяйство на MSSQL и все заработало как часы. Вот такие пироги.

MSSQL никогда не работал, но раз другого выхода нет - буду разбираться. Есть пару вопросов. Поставил MSSQL, создал БД, перенес все свои данные с Access. Подключил вот так:

Код:
  form1.ADOConnection1.ConnectionString:=
  'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BDIC;'+
  'Data Source=ONECOMP\SQLEXPRESS;Use Procedure for Prepare=1;'+
  'Auto Translate=True;Packet Size=4096;Workstation ID=ONECOMP;'+
  'Use Encryption for Data=False;';

Все вроде как работает. Но не могу подключиться с другого ПК по локальной сети. Я так понимаю нужно что то из пакета MSSQL дополнительно устанавливать? Если не секрет то что? А то ставить весь пакет(670мб) нецелесообразно да и незачем я предполагаю. Или можно как то обойтись без дополнительных установок?
Ответить с цитированием
  #8  
Старый 28.05.2013, 23:45
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

Цитата:
Сообщение от listerine
Mark, пишет что все норм, да и на других формах читал что у людей по 0,34 - 0,57 сек. обнова проходит. Но если честно надежды уже почти нет, что найду решение.
Mrak, а не mark, прошу не путать
и где я писал что все норм?
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #9  
Старый 29.05.2013, 00:00
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Mrak
Mrak, а не mark, прошу не путать
и где я писал что все норм?

Прошу прощения за ник. Вероятно я вас не так понял.
Ответить с цитированием
  #10  
Старый 29.05.2013, 09:06
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от listerine
MSSQL никогда не работал, но раз другого выхода нет - буду разбираться. Есть пару вопросов. Поставил MSSQL, создал БД, перенес все свои данные с Access. Подключил вот так:

Код:
  form1.ADOConnection1.ConnectionString:=
  'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BDIC;'+
  'Data Source=ONECOMP\SQLEXPRESS;Use Procedure for Prepare=1;'+
  'Auto Translate=True;Packet Size=4096;Workstation ID=ONECOMP;'+
  'Use Encryption for Data=False;';

Все вроде как работает. Но не могу подключиться с другого ПК по локальной сети. Я так понимаю нужно что то из пакета MSSQL дополнительно устанавливать? Если не секрет то что? А то ставить весь пакет(670мб) нецелесообразно да и незачем я предполагаю. Или можно как то обойтись без дополнительных установок?
Должно нормально по сети работать. Возможно у того компьютера нет прав доступа на компьютер на котором стоит MSSQL сервер?
MSSQL поддерживает 2 вида аутентификации: стандартную Windows-кую и свою собственную. Если есть проблемы со стандартной аутентификацией можешь использовать встроенную SQL-Server-ную. Только для этого её нужно разрешить в настройках MSSQL сервера.
Ответить с цитированием
  #11  
Старый 29.05.2013, 09:12
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Цитата:
Должно нормально по сети работать. Возможно у того компьютера нет прав доступа на компьютер на котором стоит MSSQL сервер?
MSSQL поддерживает 2 вида аутентификации: стандартную Windows-кую и свою собственную. Если есть проблемы со стандартной аутентификацией можешь использовать встроенную SQL-Server-ную. Только для этого её нужно разрешить в настройках MSSQL сервера.

Буду пробовать, спасибо. И я правильно понял доп. ПО на локальную машину не требуется?

Последний раз редактировалось listerine, 29.05.2013 в 09:17.
Ответить с цитированием
  #12  
Старый 29.05.2013, 10:22
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Права доступа имеются. Стояла аутентификация - проверка подлинности Windows, поменял на проверка подлинности SQL и Windows. Создал пользователя. Переписал под него подключение вот:

Код:
  form1.ADOConnection1.ConnectionString:=
   'Provider=SQLOLEDB.1;Password=12345;Persist Security Info=True;'+
   'User ID=TWOCOMP;Initial Catalog=ICC;Data Source=ONECOMP\SQLEXPRESS';

Но все осталось также с локального компьютера не подключается. Ошибка
SQL Server не существует, или доступ запрещен. Как можно проверить доступен ли сервер с локального компа?
Ответить с цитированием
  #13  
Старый 29.05.2013, 10:36
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от listerine
Код:
  form1.ADOConnection1.ConnectionString:=
   'Provider=SQLOLEDB.1;Password=12345;Persist Security Info=True;'+
   'User ID=TWOCOMP;Initial Catalog=ICC;Data Source=ONECOMP\SQLEXPRESS';

Но все осталось также с локального компьютера не подключается. Ошибка
SQL Server не существует, или доступ запрещен. Как можно проверить доступен ли сервер с локального компа?
В строке подключения в параметре "Data Source=" нужно указать имя компьютера - тогда будет работать и на локальном компьютере и по сети.
Ты какую версию установил? У меня опыт работы только в MSSQL Server 2000 - в более новых версиях есть некоторые нюансы.
Ответить с цитированием
  #14  
Старый 29.05.2013, 10:42
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от poli-smen
В строке подключения в параметре "Data Source=" нужно указать имя компьютера - тогда будет работать и на локальном компьютере и по сети.
Ты какую версию установил? У меня опыт работы только в MSSQL Server 2000 - в более новых версиях есть некоторые нюансы.

ONECOMP - это и есть имя компьютера, на котором установлен сервер. Или я вас не так понял? У меня MSSQL 2012.
Ответить с цитированием
  #15  
Старый 29.05.2013, 11:10
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от listerine
ONECOMP - это и есть имя компьютера, на котором установлен сервер. Или я вас не так понял? У меня MSSQL 2012.
В новых версиях MSSQL на один компьютер можно установить несколько SQL-серверов, при этом для доступа к основному серверу нужно просто указать имя компьютера, а для доступа к дополнительным нужно к имени компьютера добавлять через косую имя этого SQL-сервера. К дополнительным серверам по сети мне ни разу не удалось подключиться, а локально без проблем подключается. И да, мне для этого пришлось доустанавливать какие-то дополнительные компоненты которые были на диске вместе с SQL-Server 2005.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter