Nevis
Гость
|
|
« : 16-11-2004 15:40 » |
|
есть вопрос, он был и ранее: Как сделать так, чтобы во время работы программы, она постоянно или раз, допустим, в 5 секунд обновляла сама содержимое таблицы? Речь идет о таблицах dBase IV. Есть ведь DBNavigator, но там надо самому нажимать на кнопку обновить. Есть ли другой способ? Или как сделать так, чтобы одновременно пользователи не могли редактировать одну и туже таблицу dBase IV. Первому она открывалась для редактирования, а всем остальным только для чтения, с уведомлением что ее открыл тот-то тот-то?
|
|
|
Записан
|
|
|
|
Diletant
Помогающий
Offline
|
|
« Ответ #1 : 16-11-2004 15:49 » |
|
Судя потому, что топик открыт в разделе "С++ для ОС" речь идет об управлении Таблицей из программы на С++. Прочитай в MSDN про класс СRecordset. Там есть флаги при открытии таблицы. PS. А dBase IV - это круто. Откуда это сокровище откопать удалось?
|
|
|
Записан
|
|
|
|
Nevis
Гость
|
|
« Ответ #2 : 16-11-2004 17:32 » |
|
мне нужно что-нибудь такое, что обновляло таблицу во время просмотра, или не давала войти указывая на имя того кто редактирует таблицу
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #8 : 18-11-2004 10:11 » |
|
А ты указал ему интервал? Ему надо всего два параметра, насколько я помню: интервал вызова и функцию-обработчик. Не знаю как в билдере, а в Дельфи можно было кликнуть на панель свойств и автоматически создается обработчик...
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Nevis
Гость
|
|
« Ответ #9 : 18-11-2004 10:33 » |
|
Да интервал указал, для начала 5000, далее в OnTimer пишу название обработчика, но как его написать ума не приложу!
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #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
|
|
« Ответ #12 : 18-11-2004 13:02 » |
|
гы-гы-гы. Хочешь правильный метод? Обновлять не каждые 5 секунд, а после изменения базы. Однозначно.
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Nevis
Гость
|
|
« Ответ #13 : 18-11-2004 13:42 » |
|
так а как это прописать?
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #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
|
|
« Ответ #16 : 18-11-2004 15:44 » |
|
С билдером я вообще не работал. Я юзал Дельфи и это было, правда, давно. Но я помню из своего опыта работы в Дельфи с базами данных - что на каком-то этапе я столкнулся с необходимостью одновременного доступа к базе нескольких юзеров. И было много проблем с этими компонентами для прямой работы с базами. Я долго мучался, потом переписал все свои обращения к БД через SQL-запросы (там есть компонент TQuery, кажется). Стало все хорошо. Я не буду на тебя давить и убеждать юзать запросы, но об этих компонентах у меня до сих пор стойкое предубеждение. Не помню, как они используются, пусть кто-нибудь еще подскажет...
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Nevis
Гость
|
|
« Ответ #17 : 18-11-2004 15:55 » |
|
Выход нашел: Добавление из простых 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(); }
|
|
|
Записан
|
|
|
|
|