2016-11-15 2 views
4

Я установил приложение delphi, которое я создал с помощью кнопки с именем Connect. После я нажимаю его он выполняет следующий код:Сохранение соединения в сети - mysql

begin 
    someConnection.Connected:=true; 
    somecomenziDataSet.Active:=true; 
end; 

Точно так же у меня есть кнопка для Disconnect целей, которая делает то же самое, но с = ложь;

Моя проблема в базе данных я подключении размещен на общей учетной записи хостинга, а сервер MySQL имеет wait_timeout набор переменных на 60 секунд, interactive_timeout устанавливается на 30 секунд. Естественно, это отключает меня, если я не использую свое приложение в течение 60 секунд.

Есть ли способ сохранить это соединение в живых?

Хостинговая компания не изменит настройки, поэтому я застрял с ней.

Я использую RAD Studio 10 Сиэтл, dbexpress компоненты, TSQLConnection и моя база данных mysql

Пожалуйста, дайте мне знать в комментариях, если я оставил всю необходимую информацию из, спасибо!

+0

«пинг» базу данных каждые 10 сек или около того. – kobik

+0

@kobik Не могли бы вы привести пример кода для этого? Я столкнулся с mysql_ping в googling, и я подумал о том, чтобы добавить это в TTimer, но еще не нашел пример кода о том, как это сделать, сделать его ответом, если вы хотите, чтобы я мог принять, я был бы признателен, благодаря! – Petzy

+1

Возможно, @Kobik думает сделать «SELECT 1» (что связано с небольшим количеством активности сервера или сетевого трафика). – MartynA

ответ

6

Вы можете использовать TTimer периодически «пинг» базы данных (например интервал 10-20 секунд заданный тайм-аут 60 сек):

procedure TMyDataModule.ConnectionPingTimer(Sender: TObject); 
begin 
    if not MySQLConnection.InTransaction then 
    MySQLConnection.Exceute('DO 0', nil); // or "SELECT 1" or whatever is cheapest 
end; 
+0

Спасибо, он работает - просто протестировал его. Есть ли разница между DO 1 и DO 0? Я нашел приятное обсуждение, которое использует DO 1 в качестве примера и утверждает, что лучше (чуть быстрее), чем select 1 или mysql_ping - любые мысли? – Petzy

+2

нет разницы между 'DO 0' и' DO 1', которая вычисляет выражение без возврата значения в отличие от 'SELECT 0' или' SELECT 1', которые возвращают результирующий набор. различия в сетевом трафике, однако, не учитываются. см. также: http://stackoverflow.com/q/2546868/937125 – kobik

+0

Я вижу, да, это то, что я читал, хорошо .. спасибо за ответ:) – Petzy

Смежные вопросы