Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопользовательская работа 
:(
    Опции темы
Leklerk
Дата 1.3.2012, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Добрый день. Работаю через ADO с SQL Server 2005, запускаю 2 одинаковых exe в одном отменяю (или разрешаю) возможность корректировать данные, а во втором это не отражается, не могу понять, почему. Может, есть какие-то тонкости многопользовательской работы в delphi? 
ADODataSet1 формирует запрос, который показывается в DBGrid; ADODataSet2 выполняется, чтобы узнать значение поля, которое показывает, разрешена ли корректировка. ADOCommand1 и ADOCommand2 изменяют соответствующим образом значение этого поля. Вот код:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  ADODataSet1.Open();
  ADODataSet2.Open();
  ADODataSet2.First();
 
 
  if ADODataSet2.Fields[0].Value=1 then begin
    DBGrid1.ReadOnly := FALSE;
    Button3.Caption:='Запретить корректировку';
  end;
 
  if ADODataSet2.Fields[0].Value=0 then begin
    DBGrid1.ReadOnly := TRUE;
    Button3.Caption:='Разрешить корректировку';
  end;            
 
// Кнопка запрета или разрешения корректировки
procedure TForm1.Button3Click(Sender: TObject);
begin
  if Button3.Caption='Запретить корректировку' then begin
    DBGrid1.ReadOnly := TRUE;
    Button3.Caption:='Разрешить корректировку';
    ADOCommand1.Execute();
  end
  else begin
    DBGrid1.ReadOnly := FALSE;
    Button3.Caption:='Запретить корректировку';
    ADOCommand2.Execute();  
  end;
end;
 
// Обновление таблицы и времени каждые 10 секунд
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ADODataSet1.Close();
  ADODataSet1.Open();  
 
  ADODataSet2.Close();
  ADODataSet2.Open();
  ADODataSet2.First();
 
  if ADODataSet2.Fields[0].Value=1 then begin
    DBGrid1.ReadOnly := FALSE;
    Button3.Caption:='Запретить корректировку';
  end;
 
  if ADODataSet2.Fields[0].Value=0 then begin
    DBGrid1.ReadOnly := TRUE;
    Button3.Caption:='Разрешить корректировку';
  end;
end;

PM MAIL ICQ   Вверх
Данкинг
Дата 1.3.2012, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



А что в ADOCommand1-то содержится?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Leklerk
Дата 1.3.2012, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата

А что в ADOCommand1-то содержится? 

Код

update Табель set Корректировка=0 where
LEFT(Дата, 2)=Day(Getdate())

ADOCommand1 и ADOCommand2 изменяют поле корректировки (на 0 и 1, соответственно).
PM MAIL ICQ   Вверх
Данкинг
Дата 1.3.2012, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



А если вторую программу просто перезапустить после корректировки, то работает?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Leklerk
Дата 2.3.2012, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(Данкинг @  1.3.2012,  22:38 Найти цитируемый пост)
А если вторую программу просто перезапустить после корректировки, то работает?

Да.


PM MAIL ICQ   Вверх
Данкинг
Дата 2.3.2012, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Ну, попробуй после
Код

Button3.Caption:='Запретить корректировку';
Application.ProcessMessages;



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
superVad
Дата 2.3.2012, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



Leklerk, какой запрос в ADODataSet2?
PM MAIL   Вверх
Leklerk
Дата 2.3.2012, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(superVad @  2.3.2012,  14:04 Найти цитируемый пост)
Leklerk, какой запрос в ADODataSet2? 

Код

select TOP 1 Корректировка from Табель where 
LEFT(Дата, 2)=Day(Getdate())


Добавлено через 11 минут и 4 секунды
Цитата(Данкинг @  2.3.2012,  13:33 Найти цитируемый пост)
Ну, попробуй после

Нет, Данкинг, не помогает.
PM MAIL ICQ   Вверх
Leklerk
Дата 13.3.2012, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Проблема решена. Нужно было вместо
Код

if ADODataSet2.FieldByName('Корректировка').Value=1

писать
Код

if ADODataSet2.FieldByName('Корректировка').Value=TRUE

PM MAIL ICQ   Вверх
Данкинг
Дата 13.3.2012, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Leklerk @  13.3.2012,  15:57 Найти цитируемый пост)
Проблема решена. 

А ты изменение данных непосредственно в таблице не проверял, что ли? smile

Добавлено через 24 секунды
Да и написал бы, что поле булево.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Leklerk
Дата 14.3.2012, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 31.7.2009
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(Данкинг @  13.3.2012,  17:49 Найти цитируемый пост)
А ты изменение данных непосредственно в таблице не проверял, что ли?

Дело в том, что в таблице записывается именно 1 или 0. 
Цитата(Данкинг @  13.3.2012,  17:49 Найти цитируемый пост)
Да и написал бы, что поле булево. 

Оно не булево.
Цитата

bit (Transact-SQL)
An integer data type that can take a value of 1, 0, or NULL.


Это сообщение отредактировал(а) Leklerk - 14.3.2012, 07:19
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0892 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.