Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.15;
Скачать: CL | DM;

Вниз

Как обработать в приложении разрыв connect-a   Найти похожие ветки 

 
Анна   (2007-04-12 13:56) [0]

Приложение работает постоянно, по таймеру, выбирая вновь поступившие записи с удаленного сервера MySQL и вставляет их в таблицу локального сервера с FB 1.5.0
Уважаемые программисты, дайте совет, как не прерывая работу программы, выдать сообщение на форме c информацией об отсутствии соединения ( например на label), и только потом по таймеру проверять восстановлено ли соединение. Как погасить собщение WIN об отсутствии коннекта?
Для MySQL  пользуюсь компанентами TMySQLServer и TMySQLQuery. Для FB - DBExpress.


 
Jan1   (2007-04-12 14:02) [1]

если Вы уже сделали
> Приложение работает постоянно, по таймеру, выбирая вновь
> поступившие записи с удаленного сервера MySQL и вставляет
> их в таблицу локального сервера с FB 1.5.0

то посидеть чуть-чуть с хелпом и Вы доделаете то что хотите. Вам же полезнее будет.


 
Анна   (2007-04-12 14:06) [2]


> Jan1   (12.04.07 14:02) [1]

Да я уже посидела и с хелпом и с яндексом! Не могу сообразить, не хватает знаний. Я физик, запрограммировала из-за необходимости. Поэтому и прошу совета.


 
Плохиш ©   (2007-04-12 14:12) [3]

Предлагаю отказаться от постоянного соединения с бд:
1. Подключились
2. Передали данные
3. Отключились


 
Анна   (2007-04-12 14:31) [4]


> Плохиш ©   (12.04.07 14:12) [3]

НЕт, не могу. Приложение пишет по таймеру, через каждую минуту. Каждый раз подключаться и отключаться - слишком долго. Программа запускается утром и работает до конца раб дня (до 23=-00), без присмотра. И поэтому необходимо вывести информацию на форму об отсутствии коннекта и чтобы она продолжала крутиться по таймеру, но уже с другим интервалом ( напр 5 мин) и проверяла только соединение. И как только его обнаруживала - переходила на процедуру где select - insert.
можно так делать?


 
Jan1   (2007-04-12 14:32) [5]


> можно так делать?

можно :)
что Вы уже сделали?


 
Val ©   (2007-04-12 14:36) [6]

>слишком долго
по сравнению с выборкой/заливкой данных?
оберните выборку/заливку в try except и в последнем - все что хотите..


 
Sergey13 ©   (2007-04-12 14:45) [7]

http://ibase.ru/fibc/ibx_disc.htm
http://ibase.ru/devinfo/ibx_connect.txt


 
Анна   (2007-04-12 14:46) [8]


> Jan1   (12.04.07 14:32) [5]

Я сделала  только запись с MySQL на FB и запись текстового файла ( протокол работы, где
try
SQLQuery2.ExecSQL;
except
on E:Exception do begin
Writeln(txt_file,E.Message);
end;
end;
и записываю ошибки по Внешнему ключу, чтобы пропускать записи и не прерывать работу программы.
Работает нормально. Но бывают ситуации, когда обрывается связь. И как это обработать не могу сообразить. :(


 
Jan1   (2007-04-12 14:56) [9]


> Работает нормально. Но бывают ситуации, когда обрывается
> связь. И как это обработать не могу сообразить. :(

в чем проблема слать простенький запрос(скажем select NOW()) каждые 5 минут? если он даст сбой - проблема со связью...


 
Анна   (2007-04-12 15:00) [10]


> Jan1   (12.04.07 14:56) [9]

Хорошо. А как мне сообщение WIN, что нет связи с MySQL - сервером погасить? Как то можно тоже через trу...exception ?


 
Jan1   (2007-04-12 15:02) [11]


> Как то можно тоже через trу...exception ?

да, если ексепшена нет - связь есть, если есть переключаемся в другой режим.


 
Анна   (2007-04-12 15:06) [12]

А как в exception записать в переменную сообщение WIN чтобы программа не останавливалась по сообщению WIN?


 
Jan1   (2007-04-12 15:08) [13]


> А как в exception записать в переменную сообщение WIN чтобы
> программа не останавливалась по сообщению WIN?

моя твоя не понимать :)


 
Плохиш ©   (2007-04-12 15:10) [14]


> Анна   (12.04.07 15:06) [12]
> А как в exception записать в переменную сообщение WIN чтобы
> программа не останавливалась по сообщению WIN?

Aaaa, так вот в чём проблема :-)) На держи

 except
   on E:Exception do labError.Caption := E.Message;
 end;


 
Анна   (2007-04-12 15:14) [15]


> Плохиш ©   (12.04.07 15:10) [14]

А вот "labError" надо где описывать?


 
Плохиш ©   (2007-04-12 15:18) [16]


> Анна   (12.04.07 15:14) [15]
>
> > Плохиш ©   (12.04.07 15:10) [14]
>
> А вот "labError" надо где описывать?

см.

> Анна   (12.04.07 13:56)  
> Уважаемые программисты, дайте совет, как не прерывая работу
> программы, выдать сообщение на форме c информацией об отсутствии
> соединения ( например на label),


 
Анна   (2007-04-12 15:20) [17]


> Плохиш ©   (12.04.07 15:18) [16]

Все. Спасибо.


 
Анна   (2007-04-12 16:08) [18]

Я написала:
try
MуSQLServer1.Connected:=true;
.....
.....
except
on E:Exception do labError.Caption := E.Message;
end;
Работает.

Пожалуйста, ответьте еще, проверка на Connected:=true - будет каждую минуту идти, сильно будет тормозить по времени?


 
Johnmen ©   (2007-04-12 16:43) [19]

Не следует каждую минуту делать коннект-дисконнект.
Надо просто проверять, выполнился ли запрос...


 
Анна   (2007-04-12 16:58) [20]


> Johnmen ©   (12.04.07 16:43) [19]

Хорошо, а если я сделаю так:
try
with MySQLQuery1 do  begin
  Close;
  SQL.Clear;
  SQL.Add("select  pole1,pole2....");
  SQL.Add("from tabl");
  SQL.Add("where pole1>"+inttostr(max_id));
   open; first;
 end;
except
on E:Exception do labError.Caption := E.Message;
end;
У меня в Exception будет сообщение WIN об отсутствии коннекта?


 
Val ©   (2007-04-12 17:05) [21]

а вам проверить не на чем? последние вопросы об этом говорят...
p.s. обратите внимание на использование параметров в тексте запроса.


 
Анна   (2007-04-12 17:06) [22]


> У меня в Exception будет сообщение WIN об отсутствии коннекта?

Попробовала - есть сообщение.


 
Jan1   (2007-04-12 17:56) [23]


> У меня в Exception будет сообщение WIN об отсутствии коннекта?

Анна, пишите плиз понятно для чебурашек.


 
Анна   (2007-04-15 01:12) [24]

Увжаемые знатоки!
Сообщение от отсутствии коннекта получается, как я писала в 20.
Но вот как проверить восстановление сети, опять не могу сообразить. Наверное это сложнее...
Делаю так ( на событие второго таймера, с большим интервалом, чем первый таймер) но ничего не происходит, данные не добавляются...  :
procedure TForm1.Timer2Timer(Sender: TObject);
begin
try
MySQLServer1.Open;
if MySQLServer1.Connected=true then  begin
procedure; //  в этой процедуре инсерт
end;
except
exit;
end;

Помогите, пожалуйста.


 
Плохиш ©   (2007-04-15 04:32) [25]


> except
> exit;

Вот между этими строками надо вставить код для обработки ситуации - "о, блин, а коннекта всё нэма 8-O ждём дальше"


 
Johnmen ©   (2007-04-15 15:41) [26]


> if MySQLServer1.Connected=true then  begin

И это чушь, если почитать про if и try.


 
Анна   (2007-04-16 13:34) [27]


> Johnmen ©   (15.04.07 15:41) [26]

Прочитала про if и try ..
Сделала:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
try
MySQLServer1.Open;
showmessage("Соединение есть");
Ins_values;     // в этой процедуре инсерт
end;
except
showmessage("Соединения нет");
exit;
end;

запускаю программу, все работает... Когда разрывается соединение - начинает по таймеру выдавать, соединения нет. Когда вставляем сетевой шнур обратно, соединения не находит, продолжает выдавать, что соединения нет. Почему не находит соединения?


 
Jan1   (2007-04-16 13:40) [28]

а так?

try
MySQLServer1.Close;
MySQLServer1.Open;
showmessage("Соединение есть");
Ins_values;     // в этой процедуре инсерт
end;
except
showmessage("Соединения нет");
exit;
end;


 
Johnmen ©   (2007-04-16 13:41) [29]

Кто не находит? И должен ли "он" вообще что-то искать?
:))


 
Анна   (2007-04-16 13:51) [30]


> Jan1   (16.04.07 13:40) [28]

Спасибо! Соединение есть.



Страницы: 1 вся ветка

Текущий архив: 2007.07.15;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.013 c
2-1182321387
Ral'f
2007-06-20 10:36
2007.07.15
Как исключить дисковод (DRIVE_REMOVABLE, DRIVE_FIXED)?


2-1181978850
tytus
2007-06-16 11:27
2007.07.15
Потоки кушают оперативку. + System Error 5


2-1182340007
FIL-23
2007-06-20 15:46
2007.07.15
конвертор кода


4-1170871502
Efir
2007-02-07 21:05
2007.07.15
Отловить клик мыши на форме


15-1182177008
oldman
2007-06-18 18:30
2007.07.15
Все-таки в правильной области я работаю...