SQL Access Manager簡介
- SQL Access Manager是InTouch的可選組件。可以使用SQL Access Manager來傳輸數據,例如從SQL數據庫到InTouch應用程序的批處理配方。還可以使用SQL Access Manager將運行時數據、警報狀態或歷史數據從InTouch應用程序傳輸到數據庫。SQL Access Manager由一個程序和一組SQL函數組成。SQL Access Manager程序創建數據庫列並將其與InTouch標記通過綁定列表關聯起來。綁定是將數據庫列關聯到InTouch標記的過程。綁定允許您使用SQL Access Manager直接管理存儲在數據庫中的InTouch數據。
- 要點
- SQL Access Manager函數可以在腳本中使用,腳本可以根據操作符輸入、標記值更改或存在一組特定條件時自動運行。這些函數允許您選擇、修改、插入或刪除要訪問的表中的記錄。
- SQL Access Manager將數據庫字段名及其關聯保存在一個名爲SQL. def的逗號分隔的變量文件中。
- SQL Access Manager還創建表模板,定義InTouch HMI使用的數據庫的結構和格式。
Part01-使用Intouch中的SQL數據庫
數據庫將信息存儲在共享公共屬性或字段的表中。結構化查詢(SQL)是用於以查詢的形式訪問信息的語言。SQL Access Manager允許使用查詢訪問、修改、創建和刪除數據庫表。
- 創建並運行復雜的查詢,這些查詢可以動態構建,也可以保存在外部文件中。此外,這些查詢可以包含在運行時傳遞給查詢的參數。
- 運行數據庫支持的SQL語句並從查詢中檢索結果,還可以使用帶有SQL Access Manager的存儲過程,儘管並非完全支持所有的存儲過程函數。
- SQL Access Manager支持Oracle、Microsoft SQL Server和Microsoft Access數據庫。每個數據庫的需求都是獨特的。本節包括單獨的部分,描述如何配置每個數據庫和SQL Access Manager之間的連接。
使用InTouch QuickScript編輯器在QuickScript中插入SQL函數。將SQL函數插入腳本的一般過程包括以下步驟:
將SQL函數添加到腳本
1.啓動InTouch WindowMaker。
2.用QuickScript編輯器打開QuickScript。
3.將光標放在要插入SQL函數的腳本中。
4.在“功能”區域,單擊“外接程序”以顯示“選擇功能”對話框。
5.單擊要插入到QuickScript中的SQL函數。腳本將更新並顯示插入的SQL函數。
打開全部函數面板
可以使用SQL Access Manager來傳輸數據,例如從SQL數據庫到InTouch應用程序的批處理配方。還可以使用SQL Access Manager將運行時數據、警報狀態或歷史數據從InTouch傳輸到數據庫。例如,在完成一個機器週期之後,公司希望保存幾組數據,每組數據用於不同的應用程序。
SQL數據庫提供了在一個或多個第三方應用程序之間輕鬆傳輸信息的能力。
SQL Access Manager允許在任何InTouch應用程序中訪問和顯示這些數據。
SQL Access Manager由一個程序和一組SQL函數組成。SQL Access Manager程序創建數據庫列並將其通過綁定列表與InTouch標記關聯起來。關聯數據庫列和InTouch數據庫標記的過程稱爲綁定。將
InTouch數據庫標記綁定到數據庫列允許SQL Access Manager直接操作存儲在數據庫中的InTouch數據。SQL Access Manager將數據庫字段名及其關聯保存在一個名爲SQL.def的逗號分隔的變量文件中。此文件位於InTouch應用程序文件夾中,可以使用SQL Access Manager或任何文本編輯器(如記事本)查看或修改。SQL Access Manager還創建表模板,定義InTouch使用的數據庫的結構和格式。可以在腳本中使用SQL函數,根據操作符輸入、標記值更改或存在一組特定條件時自動運行SQL函數。這些函數允許您選擇、修改、插入或刪除要訪問的表中的記錄。例如,如果存在警報條件,應用程序可以運行包含SQLInsert()或SQLUpdate()函數的腳本,這些函數保存所有適用的數據點和警報狀態。
Part02-將Intouch標記名映射到數據庫列
可以將InTouch標記通過綁定列表映射到數據庫列,大多數SQL訪問函數使用綁定列表來啓用InTouch標記來訪問SQL數據庫表中的數據。
綁定列表將數據庫表列與InTouch Tagname字典中的標記關聯起來。綁定列表還包括一個表模板,用於描述數據庫表的格式並批量建表。
當您運行一個包含SQLInsert()、SQLSelect()或SQLUpdate()函數的腳本時,Bind列表將被更新,以指定使用哪些InTouch標記以及哪些表列與這些標記相關聯。
創建一個新的綁定列表:
1.在專用菜單上,指向SQL Access Manager,然後單擊Bind List。消息請求確認以創建SQL.DEF文件
2.單擊Yes創建SQL.DEF文件,出現“選擇綁定列表”對話框
3.單擊New“綁定列表配置”對話框出現
4.在“綁定列表名稱”框中,鍵入“綁定列表名稱”,綁定列表名稱最多可以有32個字符
5.要定義綁定,列表的標籤,請執行以下操作之一:
-
在標籤名中,輸入一個InTouch標記名。還可以在表單tag_name.dotfield_name中添加可選標記dotfield
-
雙擊Tagname選擇一個現有的標籤,出現“選擇標記”對話框。從列表中選擇一個標記
注意:I/O類型標記在應用程序中不使用,但在SQL訪問綁定列表中指定,一旦WindowViewer啓動就會被激活(建議DAServer)
6.選擇要在標記後面添加以下內容之一的點域:
-
在標籤名中,在“FieldName”框中,鍵入句點並在標記名稱後鍵入點域名稱
-
單擊字段名,將出現“選擇字段名稱”對話框。單擊要附加到標記的點域
7.在“列名”框中,鍵入列名。列名的長度可以達到30個字符。如果列名有空格,則在綁定列表中列名周圍和在腳本中使用時使用方括號。例如:其中EXPR= "[Valve ID] = " + text (tagname,"#");
8.在綁定列表中定位標籤,方法如下:
-
單擊“向上移動”將選中的標籤在列表中上移一級
-
點擊“向下移動”,將選中的標籤在列表中向下移動一層
9.單擊“添加項”添加新標記名。綁定列表的字段名和列名。
10.單擊OK保存新的綁定列表配置並關閉對話框。
Part03-Intouch定義新表結構
表模板定義:在數據庫中創建的新表的結構和格式,表模板存儲在SQL.DEF文件中,和綁定列表在一個文件裏面。
創建一個新的表模板
1.在專用菜單上指向SQL Access Manager,然後單擊Table Template
2.單擊New,出現“表模板配置”對話框
3.在“表格模板名稱”框中,鍵入表格模板的名稱。一個沒有索引的表模板名最多可以有32個字符。如果要創建索引(惟一或其他),表模板名必須不超過24個字符
4.在“列名”框中,鍵入表模板的列名。一個列名最多可以有30個字符
5.在“列類型”框中,鍵入列的數據類型。數據類型的選擇根據所使用的數據庫的不同而不同
6.在索引類型區域,選擇以下選項之一:
-
惟一性:每個列值必須是惟一的。
-
非唯一:不要求每個列值都是唯一的。
-
None:無索引
注意:當您運行一個包含SQLCreateTable()函數的腳本時,將自動創建一個索引文件。
7.選擇Allow Null Entry允許在該列中輸入Null數據。
注意:InTouch不支持空數據。
在插入數據時,如果沒有爲標記輸入值,則根據標記的類型分配null值。
Data Type | Value |
Discrete | 0 |
Integer | 0 |
Message | Strings with no characters |
8.單擊Add Item將新列名、列類型、長度和索引類型添加到表模板。
9.單擊OK保存新表模板配置並關閉對話框。
修改表模板
1.在專用菜單上,指向SQL Access Manager,然後單擊Table Template。出現“選擇表模板”對話框。
2.選擇要修改的表模板名,然後單擊modify。出現“表模板配置”對話框。
3.修改要求的項目。
4.單擊OK保存您的更改並關閉對話框。
要刪除表模板
1.在專用菜單上,指向SQL Access Manager,然後單擊Table Template。出現“選擇表模板”對話框。
2.選擇要刪除的表模板名。
3.單擊“刪除”。出現一條消息,請求確認刪除表模板。
4.點擊Yes。“表模板配置”對話框重新出現。
5.點擊OK關閉對話框。
Part04-在Intouch中執行常見的SQL操作
InTouch使用SQL訪問函數與存儲在數據庫中的信息進行交互。這些SQL訪問函數使您能夠編寫選擇、修改、插入或刪除數據庫記錄的腳本。SQL操作是同步的。當從InTouch應用程序運行數據庫QuickScript時,控件不會返回InTouch,直到函數請求的數據庫操作完成。當在引號包圍的腳本字符串(“Arg1”)中輸入參數時,將使用該字符串。如果沒有使用引號,則將參數值假定爲標記名,並且標記的當前值與該參數相關聯。大多數SQL函數返回結果代碼。如果結果代碼是非零的,則函數失敗,並應採取其他操作。
SQLErrorMsg()函數返回報錯信息
與SQL訪問函數相關的參數包括:
•BindList:對應於SQL中定義的綁定列表SQL.DEF文件名稱。
•ConnectionID:參數引用一個內存整數標記的名稱,該標記保存SQLConnect()函數分配給每個數據庫連接的編號(ID)。
•ConnectStringConnectString:識數據庫系統和任何其他登錄信息。輸入的格式如下:
"DSN=data source name[;attribute=value
[;attribute=value]...]"
Microsoft SQL Server連接字符串
• Microsoft OLE DB Provider for SQL Server (推薦使用).
"Provider=SQLOLEDB.1;User ID=sa; Password=;Initial Catalog=MyDB;Data Source=MyServer;"
The OLE DB Provider for SQL Server is sqloledb.
• Microsoft OLE DB Provider for SQL Server (推薦使用)
"Provider=SQLOLEDB.1;uid=sa;pwd=;Database=MyDB"
• Microsoft OLE DB Provider for ODBC (使用默認的SQL Server提供者 MSDASQL):
"DSN=Pubs;UID=sa;PWD=;"
• Microsoft OLE DB Provider for ODBC (使用默認的SQL Server提供者 MSDASQL):
"Data Source=Pubs;User ID=sa;Password=;"
Microsoft Access連接字符串
Microsoft OLE DB Provider for Microsoft Jet (推薦使用). Microsoft.Jet.OLEDB.4.0 是Microsoft Jet (Microsoft Access數據庫引擎)的本地OLEDB提供商。
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\DBName.mdb;User ID=UserIDStr;Password=PasswordStr;"
Microsoft OLE DB Provider for ODBC (使用默認的MS Access提供者 MSDASQL):
"Provider=MSDASQL;DSN=DSNStr;UID=UserName; PWD=PasswordStr;"
Part05-理解SQL錯誤消息
SQL Access Manager結果代碼和錯誤表消息
SQLErrorMsg() 函數:所有SQL函數都返回一個可用於故障診斷的結果代碼。
函數的作用是:返回與結果代碼相關聯的錯誤消息,並將其賦值爲InTouch消息標記的值。
ErrorMsg=SQLErrorMsg(ResultCode);
下表列出了一些常見的SQL訪問結果代碼、對應的錯誤消息和描述:
返回值 | 代碼錯誤信息 | 描述 |
0 | 沒有錯誤發生 | QL函數成功運行,沒有錯誤。 |
-1 | <來自數據庫提供程序的消息> | 來自供應商數據庫的特定錯誤消息 |
-2 | 無法執行空語句 |
SQLExecute(ConnectionId, BindList, 0)在沒有使用非空語句調用SQLSetStatement或SQLLoadStatement的情況下運行。 |
-4 | 返回的值爲Null | 從數據庫讀取的整數或實值爲null。這只是發送到Wonderware日誌查看器的警告消息。 |
-5 | 不再需要獲取行 | 已經到達表中的最後一條記錄. |
-7 | 無效的參數ID | SQLSetParamInt(), SQLSetParamLong(), SQLSetParamNull(), SQLSetParamDateTime(), SQLSetParamDecimal(), SQLSetParamFloat(), SQLSetParamInt(), SQLSetParamLong(), SQLSetParamNull(),或使用無效的參數ID調用SQLSetParamTime()函數。 |
-8 | 無效的參數列表 | 無效參數列表的示例:1、2、3、5(缺少4). |
-9 | NULL參數的類型無效 | 使用無效的類型參數值調用SQLSetParamNull函數 |
-10 | 不允許更改參數的數據類型 |
調用SQLSetParamChar()、SQLSetParamDate()、SQLSetParamDateTime()、SQLSetParamDecimal()、SQLSetParamFloat()、SQLSetParamInt()、SQLSetParamLong()、SQLSetParamNull()或SQLSetParamTime()函數時,對現有參數使用不同的類型。 |
-11 | 不允許在語句成功執行後添加參數 | SQLSetParamInt(), SQLSetParamLong(), SQLSetParamNull(), SQLSetParamDateTime(), SQLSetParamDecimal(), SQLSetParamFloat(), SQLSetParamInt(), SQLSetParamLong(), SQLSetParamNull(),或SQLSetParamTime()函數在語句成功運行後爲新參數ID調用。 |
-12 | 無效的日期時間格式 | 例如,在執行SQLSetParamTime()、SQLInsertExecute()或SQLUpdateCurrent()時,會遇到無效的日期時間格式。 |
-13 | 無效的十進制格式 | 例如,在執行SQLSetParamDecimal()、SQLInsertExecute()或SQLUpdateCurrent()時,會遇到無效的小數格式. |
-14 | 無效的當前格式 | 例如,在執行SQLInsertExecute()或SQLUpdateCurrent()時,會遇到n個無效的當前格式。 |
-15 | 此操作的語句類型無效 | SQLPrepareStatement()創建的語句ID調用SQLInsertEnd或SQLClearStatement()被調用,以獲取由SQLInsertPrepare()創建的語句ID。 |
-1001 | 內存不足 | 內存不足,無法運行此函數 |
-1002 | 無效的連接 | 傳遞給ConnectionId參數的值無效. |
-1003 | 未找到綁定列表 | 指定的綁定列表名稱不存在. |
-1004 | 沒有找到模板 | 指定的表模板名稱不存在. |
-1005 | 內部錯誤 | 發生內部錯誤。電話技術支持. |
-1006 | 字符串爲空 | 警告-從數據庫讀取的字符串爲空。這只是發送到Wonderware日誌查看器的警告消息. |
-1007 | 字符串被截斷 | 警告——從數據庫中讀取的字符串長度超過131個字符,並且在選中時被截斷。警告被髮送到Wonderware日誌查看器。 |
-1008 | 沒有Where子句 | 刪除時沒有Where子句. |
-1009 | 連接失敗 | 有關數據庫連接失敗的更多信息,請查看Wonderware日誌查看器。 |
-1010 | 連接字符串的DB=部分上指定的數據庫不存在 | 指定的數據庫不存在 |
-1011 | 沒有選擇行 | 調用SQLNumRows()、SQLFirst()、SQLNext()、SQLLast()或SQLPrev()函數時,不需要首先運行SQLSelect()或SQLExecute()函數。 |
-1013 | 無法找到要加載的文件 | 使用找不到的文件名調用SQLLoadStatement() |
Part06-Intouch SQL Access Manager案例
新建數據庫
輸入數據庫名:ReportDB,確定
生成數據庫
繪製數據庫界面:
連接數據庫
監控數據庫連接的狀態
斷開數據庫
新建綁定列表:Bind1,Intouch標記名爲:Tag01,Tag02,Tag03,Tag04,Tag05,Tag06,Tag07,Tag08,數據庫表字段(列名)爲:Tag01,Tag02,Tag03,Tag04,Tag05,Tag06,Tag07,Tag08
創建表模板:Template,表字段(列名)爲:Tag01,Tag02,Tag03,Tag04,Tag05,Tag06,Tag07,Tag08
新建數據庫表:tbTag
查詢數據庫表所有數據:
查詢數據庫表第一行數據:
查詢數據庫表當前行的上一條數據:
查詢數據庫表當前行的下一條數據:
查詢數據庫表最後一行數據:
刪除數據庫表
寫入一條數據
修改當前行數據
運行畫面,連接數據庫
點擊新建表,則數據庫自動生成一張新表
寫入多條數據後,可以查詢所有想要查的數據
●Intouch上位機組態 | 疑難雜症問題彙總合集+進羣交流
●Intouch製作報表和導出Excel(手把手敲代碼,OK不OK?Happy不Happy?)
●Intouch【歷史報警/事件】導出Excel史上最強插件快拿去用吧
●輕鬆掌握VB開發OPC客戶端最全案例-與KEPServer的通信淺析(Intouch報警管理)
●InTouch | VB | C# | 網頁 顏色RGB對照表(顏色大全)
●InTouch-鼠標懸停自定義下拉菜單(含核心代碼·耐心看)毫不遜色於Web網頁菜單效果
●Intouch-歷史數據庫之報表曲線Historian客戶端開發