IFIX連接SQL讀寫資料和製作excel報表

大概記錄一下流程免忘,原理其實很簡單,都是設定,無限的設定生涯:

1.最基本的安裝sql,創建管理員,創建資料庫還有設置,本處重點記錄:安裝時選用伺服器驗證登入,密碼要記住,伺服器名要記住,後邊要用上

2.打開windows控制台的管理工具,找到obdc數據源,把創建好的sql資料庫連接進去。

3.在iFix的組態工具裡打開Alarm到obdc的功能,就可以使用了。

原理很簡單 sql <=> obdc <=> ifix

有空再圖片記錄

沒空記錄可以參考csdn的,寫的很詳細

https://blog.csdn.net/chinazz2025/article/details/78047966?locationNum=10&fps=1


記錄1,使用IFIX中的tag連接sql資料庫:

框架:sql腳本語法寫在表裡,ifix透過tag觸發sql腳本執行取得結果

資料在下方:IFIX中將資料記錄通過ODBC保存到SQL SERVER


記錄2,使用vba直接連sql資料庫:

框架:引用 microsoft activeX Data objects 2.X library;'引用microsoft activeX Data objects recordset 2.X;引用Microsoft excel 15.0 object library

本頁元件有輸入起始日期和結束日期的功能,一個生產報表的按鈕,一個顯示HTML檔的控制項,檔名report.grf 儲存在網盤的原始程式碼目錄

代碼:

Option Explicit
'引用microsoft activeX Data objects 2.X library
'引用microsoft activeX Data objects recordset 2.X
'引用Microsoft excel 15.0 object library
    
Dim a As String '定義中間變數,用來暫存從資料庫中取出的資料
Dim b As String
Dim c As String
Dim d As String
Dim enddayplus1 As Integer

Dim rsADO As ADODB.Recordset '定義連接資料庫的ADO變數
Dim conn As New ADODB.Connection
Public CmdTruck As New ADODB.Command
Public dbUpdata As New ADODB.Command
Public rstUpdata As New Recordset

Private Sub CommandButton3_Click() '點擊按鈕的回應函數
    Fix32.AB_FIX.SDAY.A_CV = Fix32.AB_FIX.Year.A_CV + "-" + Fix32.AB_FIX.Month.A_CV + "-" + Fix32.AB_FIX.Day.A_CV
    enddayplus1 = Val(Fix32.AB_FIX.EDay.A_CV) + 2
    Fix32.AB_FIX.ENDAY.A_CV = Fix32.AB_FIX.EYear.A_CV + "-" + Fix32.AB_FIX.EMonth.A_CV + "-" + Str(enddayplus1)
    Call showbb '調用顯示報表的函數showbb
    Call closeDB1 '調用關閉資料庫的函數
    closeDB1
End Sub

Private Sub showbb()
    Dim COL1 As String
    Dim COL2 As String
    Dim COL3 As String
    Dim COL4 As String
    COL1 = "ALM_NATIVETIMEIN"
    COL2 = "ALM_TAGNAME"
    COL3 = "ALM_VALUE"
    COL4 = "ALM_DESCR"
    Dim Rs As New ADODB.Recordset '定義連接資料庫的ADO變數
    openDB1 '打開DB1資料庫,該函數在後面有定義
    CmdTruck.ActiveConnection = conn
    CmdTruck.CommandText = "SELECT ALM_NATIVETIMEIN, ALM_TAGNAME, ALM_VALUE, ALM_DESCR FROM FIXALARMS WHERE ALM_NATIVETIMEIN Between " + "'" + Fix32.AB_FIX.SDAY.A_CV + "'" + " AND " + "'" + Fix32.AB_FIX.ENDAY.A_CV + "'" + " And ALM_TAGNAME! = '' "    '按需求生成ADODB.recordset
    
    Dim xlApp As Object '定義報表物件
    Dim xlBook As Object
    Dim xlSheet As Object
    Dim e As String
    Dim f As String
    Dim g As String
    Dim h As String
    Dim i As Integer
    i = 2  'ADODB.recordset要寫入EXCEL的ROW數,從ROW2開始寫,ROW1留給中文說明標題了
    e = "報警時間"
    f = "報警點"
    g = "狀態"
    h = "說明"
    'On Error GoTo errorhandle
    Set xlApp = New Excel.Application
    Set xlBook = xlApp.Workbooks.Open(System.ProjectPath & "\app\temp.xls")     '打開報表範本此範本可以調整樣式,不要放值就好,輸出的報表就會按設計的樣式輸出
    Set xlSheet = xlBook.Worksheets(1)
    xlApp.DisplayAlerts = False  '警告禁用
    xlApp.Visible = False 'EXCEL隱藏
    xlSheet.Cells(1, 1) = e & ""    '第一行的標題文字說明
    xlSheet.Cells(1, 2) = f & ""
    xlSheet.Cells(1, 3) = g & ""
    xlSheet.Cells(1, 4) = h & ""
    
    Set Rs = CmdTruck.Execute   '執行SQL語句生成ADODB.RecordSet
    While (Not Rs.EOF)           '只要不是指向ADODB.RecordSet最後一筆資料將讀出來的數據傳給變數a、b、c、d
        a = Rs(COL1)
        b = Rs(COL2)
        c = Rs(COL3)
        d = Rs(COL4)
        xlSheet.Cells(i, 1) = a & ""      '將變數的值寫到對應excel的儲存格
        xlSheet.Cells(i, 2) = b & ""
        xlSheet.Cells(i, 3) = c & ""
        xlSheet.Cells(i, 4) = d & ""
        Rs.MoveNext '指向下一條ROW
        i = i + 1
    Wend
    xlSheet.SaveAs System.ProjectPath & "\app\report.htm", FileFormat:=xlHtml '工作表另存為html
    xlSheet.SaveAs System.ProjectPath & "\app\report.xls" '工作表另存為xls
    xlApp.DisplayAlerts = True '警告使能
    xlApp.Quit
    Me.WebBrowser1.Navigate System.ProjectPath & "\app\report.htm" '在WebBrowser控制項上顯示報表
    xlApp.Quit
    Set xlSheet = Nothing '釋放記憶體
    Set xlBook = Nothing
    Set xlApp = Nothing
    Set CmdTruck = Nothing
    Set Rs = Nothing
Exit Sub
errorhandle:
    MsgBox "報表生成錯誤!", vbOKOnly + vbInformation, "信息..."
    Set xlSheet = Nothing   '釋放記憶體
    Set xlBook = Nothing
    Set xlApp = Nothing
    
End Sub

Public Sub openDB1()       '定義打開資料庫的函數openDB1
    If conn.State <> adStateOpen Then
        With conn
        .ConnectionString = "Driver={SQL Server};Server=127.0.0.1;Database=msdb;Uid=sa;Pwd=123456789;"   '連接資料來源的相關資訊
        .ConnectionTimeout = 30
        .Mode = adModeReadWrite
        .Open
        End With
    End If
End Sub

Public Sub closeDB1() '定義關閉資料庫的函數closeDB1
    If conn.State = adStateOpen Then
        conn.Close
    End If
End Sub



資料在下方:IFIX連接SQL讀寫資料和製作excel報表

IFIX连接SQL读写数据和制作excel报表图文教程.pdf
IFIX中将数据记录通过ODBC保存到SQLSERVER.pdf