FIX/IFIX软件的SQL功能缺陷 点击:1340 | 回复:6



Q&A

    
  • 精华:1帖
  • 求助:1帖
  • 帖子:8帖 | 100回
  • 年度积分:200
  • 历史总积分:1636
  • 注册:2001年6月06日
发表于:2006-03-10 13:22:00
楼主
在应用FIX/IFIX软件的SQL功能中,发现软件的SQL功能在网络传输数据过程中,如果定义的数据源网络出现中断,则SQL功能自行退出,进程WSQLODC.EXE退出.必须人为重新运行(带参数),有没有办法让该进程自行维护运行,在网络恢复正常后,自行连接,传输数据.



如火

  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-03-10 13:28:00
1楼
那估计要自己用vba编程了。判断网络状态,启动退出的程序。

lostcity.blog.zj.com

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 246回
  • 年度积分:0
  • 历史总积分:350
  • 注册:2005年7月11日
发表于:2006-03-10 14:56:00
2楼
监测进程wsalodc.exe是否运行
没有运行就用脚本触发运行

这样行不

Q&A

  • 精华:1帖
  • 求助:1帖
  • 帖子:8帖 | 100回
  • 年度积分:200
  • 历史总积分:1636
  • 注册:2001年6月06日
发表于:2006-03-13 11:20:00
3楼
谢谢提示楼上的同志,我已经实现了该功能:以下为VBA代码
实现策略:
通过IFIX的调度,增加一定时调度,在调度中调用查询进程状况,没有该WSQLODC.EXE进程,则运行.
通过测试,可以实现SQL数据源的动态刷新,更新了ODBC数据源,也可以不用重起IFIX了
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Type PROCESSENTRY32
dwSize  As Long
cntUsage  As Long
th32ProcessID  As Long
th32DefaultHeapID  As Long
th32ModuleID  As Long
cntThreads  As Long
th32ParentProcessID  As Long
pcPriClassBase  As Long
dwFlags  As Long
szExeFile  As String * 1024
End Type

Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
Dim My   As PROCESSENTRY32
Dim L   As Long
Dim L1   As Long
Dim Flag   As Boolean
Dim mName   As String
Dim I   As Integer
 
Sub QUERY()
        L = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
    If L Then
            My.dwSize = 1060
            If (Process32First(L, My)) Then     '遍历第一个进程
            Do
                I = InStr(1, My.szExeFile, Chr(0))
                mName = UCase(Left(My.szExeFile, I - 1))   '大写程序名
                    If mName = "WSQLODC.EXE" Then          '发现进程,则退出判断
                        Flag = True
                        Exit Sub
                    Else
                        Flag = False
                    End If
            Loop Until (Process32Next(L, My) < 1)       '遍历所有进程知道返回值为False
            End If
            L1 = CloseHandle(L)
    End If
     
    If Flag = False Then                                '没有发现进程,则运行WSQLODC
        Shell "C:\DYNAMICS\WSQLODC.EXE /CA45 /CL1000", vbHide
    End If

End Sub

Q&A

  • 精华:1帖
  • 求助:1帖
  • 帖子:8帖 | 100回
  • 年度积分:200
  • 历史总积分:1636
  • 注册:2001年6月06日
发表于:2006-05-19 07:29:00
4楼
 运行一段时间后,发现IFIX后态服务占用内存,检查脚本应将循环中的Exit Sub改为 Exit Do,经过测试,功能很好用。

如火

  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-05-19 11:21:00
5楼
恭喜,写的不错。

闲云0111

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 43回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2004年11月15日
发表于:2006-05-24 16:02:00
6楼
高手,做个记号,什么时候用到,来拷一下!
呵呵

热门招聘
相关主题

官方公众号

智造工程师