The MySQL function block is a simple MySQL client.
Syntax
C++
FUNCTION_BLOCK MySQL
VAR_INPUT
Port: WORD;
END_VAR
VAR_OUTPUT
State: MySQLState;
SQLErrorMessage: STRING(MYSQL_STRING_LENGTH);
SQLErrorCode: WORD;
ServerVersion: STRING;
ServerProtocolVersion: BYTE;
ServerCapabilities: WORD;
ServerStatus: WORD;
ServerLanguage: BYTE;
LastCallAffectedRows: DWORD;
LastCallServerStatus: WORD;
LastCallWarningCount: WORD;
LastCallMessage: STRING(MYSQL_STRING_LENGTH);
END_VAR
Parameters
|
Parameter |
Description |
|---|---|
|
Port |
Port of the MySQL database (default: 3306). |
|
State |
Status of the connection. |
|
SQLErrorMessage |
Last SQL error message. |
|
SQLErrorCode |
Last SQL error code. |
|
ServerVersion |
server version |
|
ServerProtocolVersion |
protocol version |
|
ServerCapabilities |
server info |
|
ServerStatus |
Server status |
|
ServerLanguage |
server language |
|
LastCallAffectedRows |
Changed entries during last query execution. |
|
LastCallServerStatus |
Last query execution Status. |
|
LastCallWarningCount |
Last query execution warnings. |
|
LastCallMessage |
Last query execution message. |
Example
C++
VAR
sql : MySQL;
host: STRING := '192.168.1.40';
user: STRING := 'root';
pwd: STRING := 'root';
query : STRING;
response : STRING;
iCounter: INT;
RetVal : MySQLReturnValue;
iCountFields: INT;
iCountRows: INT;
sTableHeader : ARRAY [0..10] OF STRING;
sTableData : ARRAY [0..600, 0..10] OF STRING;
iTableIndex1: INT;
iTableIndex2: INT;
field: MySQLField;
bReadSQLDatabase: BOOL;
END_VAR
IF bReadSQLDatabase THEN
RetVal := sql.Connect(Server:= host, Username:= user, Password:= pwd);
IF (sql.State = MySQLState.MYSQL_CONNECTED) THEN
query := 'USE atest';
RetVal := sql.Query(sQuery:= query);
query := 'INSERT INTO mytable VALUES (';
query := CONCAT(query, INT_TO_STRING(iCounter));
query := CONCAT(query, ')');
query := 'SELECT * FROM xtest';
RetVal := sql.Query(sQuery:= query);
IF (RetVal = MySQLReturnValue.MYSQL_DATA) THEN
iCountFields := sql.GetFieldCount();
iCountRows := sql.GetRowCount();
FOR iTableIndex2 := 0 TO sql.Fields - 1BY 1 DO
field := sql.GetField(iFieldIndex:= iTableIndex2);
sTableHeader[iTableIndex2] := field.name;
END_FOR
FOR iTableIndex1 := 0 TO sql.Rows - 1 BY 1 DO
FOR iTableIndex2 := 0 TO sql.Fields - 1 BY 1 DO
sTableData[iTableIndex1, iTableIndex2] := sql.GetRow(iFieldIndex:= iTableIndex2, iRowIndex:= iTableIndex1);
END_FOR
END_FOR
END_IF
END_IF
RetVal := sql.DisConnect();
bReadSQLDatabase := FALSE;
END_IF
Requirements
Remarks