Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обновление базы???  (Прочитано 19532 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Nevis
Гость
« : 16-11-2004 15:40 » 

есть вопрос, он был и ранее: Как сделать так, чтобы во время работы программы, она постоянно или раз, допустим, в 5 секунд обновляла сама содержимое таблицы? Речь идет о таблицах dBase IV. Есть ведь DBNavigator, но там надо самому нажимать на кнопку обновить. Есть ли другой способ?
Или как сделать так, чтобы одновременно пользователи не могли редактировать одну и туже таблицу dBase IV. Первому она открывалась для редактирования, а всем остальным только для чтения, с уведомлением что ее открыл тот-то тот-то?Не понял
Записан
Diletant
Помогающий

de
Offline Offline

« Ответ #1 : 16-11-2004 15:49 » 

Судя потому, что топик открыт в разделе "С++ для ОС" речь идет об управлении Таблицей из программы на С++. Прочитай в MSDN про класс СRecordset. Там есть флаги при открытии таблицы.

PS. А dBase IV - это круто. Откуда это сокровище откопать удалось?  Отлично
Записан
Nevis
Гость
« Ответ #2 : 16-11-2004 17:32 » 

мне нужно что-нибудь такое, что обновляло таблицу во время просмотра, или не давала войти указывая на имя того кто редактирует таблицу
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #3 : 17-11-2004 16:10 » 

Если тебе надо, чтоб обновлялась информация на экране - используй событие оконного таймера. Но 5 секунд - а не слишком ли часто?
Одновременное редактирование для DBase - не знаю... Там такой особой защиты, вроде, нету. Рекомендую делать SQL-запросы. ИМХО более безопасно. А если это Builder, то еще проще - там полно компонентов для этого. Не забудь про хранимые процедуры.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Nevis
Гость
« Ответ #4 : 18-11-2004 08:04 » 

Скажите пожалуйста, как пользоваться событием оконного таймера, где его искать?
Записан
Nevis
Гость
« Ответ #5 : 18-11-2004 08:08 » 

Я даже подумал о том, что можно как-то использовать процедуру обновления таблицы, как при нажатие на кнопку Refresh в DBNavigatore с заданным таймером. Только как? Если я сказал какую-то чушь, то простите меня!!! Отлично
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #6 : 18-11-2004 09:26 » 

Если в билдере - то там есть компонент Timer. Используй его.
Если MSVC - посмотри сообщение WM_TIMER
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Nevis
Гость
« Ответ #7 : 18-11-2004 09:43 » 

Спасибо за таймер, но вот только не могу найти по нему нормального хелпа, нужен пример!
В Events, напротив OnTimer незнаю что надо поставить.
Так же есть вопрос касательно того что вписать внутри.
Попробовал так, но не получилось!

void __fastcall TForm1::nbRefresh(TObject *Sender)
{
Table1->AutoRefresh;
}

Где можно найти хелп по этой функции?
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #8 : 18-11-2004 10:11 » 

А ты указал ему интервал?
Ему надо всего два параметра, насколько я помню: интервал вызова и функцию-обработчик.
Не знаю как в билдере, а в Дельфи можно было кликнуть на панель свойств и автоматически создается обработчик...
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Nevis
Гость
« Ответ #9 : 18-11-2004 10:33 » 

Да интервал указал, для начала 5000, далее в OnTimer пишу название обработчика, но как его написать ума не приложу!
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #10 : 18-11-2004 12:24 » 

Я ж грю - дважды кликай на это поле - должно само создаться.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Nevis
Гость
« Ответ #11 : 18-11-2004 12:46 » 

я написал следующее в обработчике:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

Table1->Close();
Table1->Open();

}
Он теперь обновляет таблицу целиком(проблема решена частично)
Таймер стоит на 5 секунд, при этом если не успел ввести что хотел, то она выкидывает из записи и приходится нажимать заново.
Вот как решить теперь это?
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #12 : 18-11-2004 13:02 » 

гы-гы-гы.  Жжешь
Хочешь правильный метод? Обновлять не каждые 5 секунд, а после изменения базы. Однозначно.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Nevis
Гость
« Ответ #13 : 18-11-2004 13:42 » 

так а как это прописать?
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #14 : 18-11-2004 14:01 » 

Ну вообще по событию, вроде...
Под рукой билдера нету, так что попробовать не могу...
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Nevis
Гость
« Ответ #15 : 18-11-2004 14:52 » 

Не поможешь правильно написать часть программы?
Это добавление записи из четырех обычных эдитов в строку таблицы:
Вот что у меня есть и то что не работает:
void __fastcall TForm4::Button1Click(TObject *Sender)
{

Table1->FieldDefs["TIME_ON"] = Edit1->Text;
Table1->FieldDefs["TIME_OFF"] = Edit1->Text;
Table1->FieldDefs["ADRES"] = Edit1->Text;
Table1->FieldDefs["ZAK"] = Edit1->Text;

}
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #16 : 18-11-2004 15:44 » 

С билдером я вообще не работал. Я юзал Дельфи и это было, правда, давно.
Но я помню из своего опыта работы в Дельфи с базами данных - что на каком-то этапе я столкнулся с необходимостью одновременного доступа к базе нескольких юзеров. И было много проблем с этими компонентами для прямой работы с базами. Я долго мучался, потом переписал все свои обращения к БД через SQL-запросы (там есть компонент TQuery, кажется). Стало все хорошо.
Я не буду на тебя давить и убеждать юзать запросы, но об этих компонентах у меня до сих пор стойкое предубеждение. Жаль
Не помню, как они используются, пусть кто-нибудь еще подскажет...
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Nevis
Гость
« Ответ #17 : 18-11-2004 15:55 » new

Выход нашел:
Добавление из простых Edit`ов в таблицу с добавлением в новую строку осуществляется таким образом, через отдельную кнопку:

void __fastcall TForm4::BitBtn3Click(TObject *Sender)
{
Table1->Append();
Table1->Fields->Fields[0]->Text=Edit1->Text;
Table1->Fields->Fields[1]->Text=Edit2->Text;
Table1->Fields->Fields[2]->Text=Edit3->Text;
Table1->Fields->Fields[3]->Text=Edit4->Text;
Table1->Post();
}

Таймер у меня работает так:

void __fastcall TForm4::Timer1Timer(TObject *Sender)
{
Table1->Close();
Table1->Open();
}
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines