Страница 1 из 1

MAV & Hibernate

Добавлено: 10 Ноябрь 2010, 1:46
Admin
Можно ли в MAV как то после Гибернации восстановить подключение? А то проги все валятся после сна.

Спасибо

Re: MAV & Hibernate

Добавлено: 10 Ноябрь 2010, 12:02
Andrew Listiev
Ты о каком Hibernate говоришь? :shock:

Re: MAV & Hibernate

Добавлено: 10 Ноябрь 2010, 12:21
Admin
Компьютер с ОС Windows можно не выключать а переключать в режимы разные типа ожидания, когда винты останавливаются и т.д.
Так же есть режим сна, когда память сбрасывается на винт и комп мухой отрубается. После включения все программы находятся в памяти как будто ты не выключался.
Я думаю все понятно? Так вот после просыпания из этого режима соединение с SQL сервером разорвано.
Как бы его незаметно восстановить...

Re: MAV & Hibernate

Добавлено: 10 Ноябрь 2010, 12:26
Andrew Listiev
Ах про этот, я уж было про http://www.hibernate.org/ подумал :D

Re: MAV & Hibernate

Добавлено: 13 Март 2011, 14:56
Admin
Апнем тему.

Re: MAV & Hibernate

Добавлено: 14 Март 2011, 13:35
Andrew™
проверяй регулярно что то типа: (главное, чтобы не ресурсоёмкий запрос был)

IF MAVLOAD('select getdate()',datetimefield)
MAVDISCONNECT
If MAVCOMEMECT(ConnectName,ConnectString)
MAVSHOWERROR
END
END

Re: MAV & Hibernate

Добавлено: 14 Март 2011, 14:33
Admin
Andrew™ писал(а):проверяй регулярно что то типа: (главное, чтобы не ресурсоёмкий запрос был)

IF MAVLOAD('select getdate()',datetimefield)
MAVDISCONNECT
If MAVCOMEMECT(ConnectName,ConnectString)
MAVSHOWERROR
END
END
Понятно... найти бы событие которое прогам разбегается при восстановлении винды из гибернейта еще...

Re: MAV & Hibernate

Добавлено: 14 Март 2011, 16:15
Andrew Listiev

Re: MAV & Hibernate

Добавлено: 16 Март 2011, 6:43
Admin
Всем спасибо. Все работает как доктор прописал...

Код: Выделить всё

                    PROGRAM
                    INCLUDE('equates.clw'),ONCE
                    INCLUDE('errors.clw'),ONCE
                    INCLUDE('keycodes.clw'),ONCE
                    INCLUDE('mav.inc'),ONCE
                    MAP
                      MODULE('MAV SQL')
                        INCLUDE('mavsql.inc'),ONCE
                        INCLUDE('mavfunc.inc'),ONCE
                      END
                      MODULE('Windows API')
                        GetWindowLong(UNSIGNED, SIGNED), LONG, PASCAL, NAME('GetWindowLongA')
                        SetWindowLong(UNSIGNED, SIGNED, LONG), LONG, PASCAL, NAME('SetWindowLongA')
                        CallWindowProc(ULONG,UNSIGNED,UNSIGNED,UNSIGNED,LONG),PASCAL,LONG,NAME('CallWindowProcA')
                      END
                      MAVCallBack(UNSIGNED,UNSIGNED,UNSIGNED,LONG),LONG,PASCAL
                      ConnectProc
                    END

DbManager           MAVConnectManager,NAME('MAV$DbManager')
DbFiles             MAVFiles,NAME('MAV$DbFiles')

ConnectString       CSTRING(200)
Result              STRING(200)

DataQueue           QUEUE
GoodsName             STRING(50)
                    END
PrevCallBack        LONG

GWL_WNDPROC         EQUATE(-4)
WM_POWERBROADCAST   EQUATE(0218h)
PBT_APMRESUMESUSPEND EQUATE(7)

Window WINDOW('MAV Resume'),AT(,,287,176),FONT('Tahoma',8,,FONT:regular,CHARSET:CYRILLIC),CENTER,GRAY, |
         RESIZE
       LIST,AT(7,7,274,143),USE(?List1),VSCROLL,FORMAT('20L(2)|M~GoodsName~@S255@'),FROM(DataQueue)
       BUTTON('Reconnect'),AT(6,156,45,14),USE(?ButtonReconnect)
       BUTTON('Clear'),AT(54,156,45,14),USE(?ButtonClear)
     END

  CODE
  OPEN(Window)
  PrevCallBack = SetWindowLong(Window{PROP:Handle}, GWL_WNDPROC, ADDRESS(MAVCallBack))
  ConnectProc
  ACCEPT
    CASE ACCEPTED()
    OF ?ButtonReconnect
      ConnectProc
    OF ?ButtonClear
      FREE(DataQueue)
    END
  END
  CLOSE(Window)

ConnectProc               PROCEDURE
  CODE
  MAVDISCONNECT('MSSQL')
  ConnectString = 'DRIVER={{SQL Server};SERVER=XXX;DATABASE=YYY;UID=ZZZ;PWD=PPP;App=AAA'
  IF MAVCONNECT('MSSQL', ConnectString)
    MAVSHOWERROR
    RETURN
  END
  FREE(DataQueue)
  IF MAVLOAD('SELECT TOP 100 G.GoodsName FROM Goods G', DataQueue)
    MAVSHOWERROR
    RETURN
  END

MAVCallBack               PROCEDURE(LOC:hWnd, LOC:usMsg, LOC:WParam, LOC:IParam)
  CODE
  IF LOC:usMsg = WM_POWERBROADCAST
    IF LOC:WParam = PBT_APMRESUMESUSPEND
      ConnectProc
    END
  END
  RETURN CallWindowProc(PrevCallBack, LOC:hWnd, LOC:usMsg, LOC:WParam, LOC:IParam)