| 
			| 
					
						| 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();
 }
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |