06-07-2019 12:52 PM
Hi,
I am completely new to DIAdem and VB, i was wondering if there is any way to interact with the SQL database on drop down selection from GUI or .SUD file. Any explanation is highly appreciated.
Thanks in Advance,
Raghavendra
06-10-2019 05:18 PM
Hello Raghavendra,
I think a good starting point for you will be the ADO Database Application Example found in DIAdem. Help>>Examples from the Menu
Diego H
National Instruments
06-11-2019 08:19 AM
Hi,
yes it helped me in understanding the structure.
Call Globaldim("NEWT") ' name of the variable i am getting from the dropdown dim myConn dim myCommand dim RS Const DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=name of the server;Initial Catalog=name of the database;user id ='name of the user';password='password'" Set myConn = CreateObject("ADODB.Connection") Set myCommand = CreateObject("ADODB.Command" ) myConn.Open DB_CONNECT_STRING Set myCommand.ActiveConnection = myConn myCommand.CommandText = "your Querry" Set RS = myCommand.Execute MsgBox RS.GetString ' returns the message box with the result, just to cross check if its working or not myConn.Close
06-18-2019 02:28 AM - edited 06-18-2019 02:31 AM
Attached you will find some example code extending the ADO example.
It Consists of:
SQLTableReader.vbs: vbs utility to read content of sql tables
SQLBrowser.SUD: SUD dialog showing the content of the SQL database (tables, columns) loading channels tables when you double click.
SQLBrowser.vbs: Showing the above dialog
This is just a start for an example but it might help.
I attach the Code of the Table reader for direct view.
How to use it:
Option Explicit scriptinclude currentScriptPath & "SQLTableReader.vbs" AdoConStrGet : dim connStr : connStr = ADOConString data.Root.clear dim tr : set tr = new SQLTableReader.Init(connStr) dim schema : set schema = tr.schema() dim tableName : for each tableName in schema.keys dim grpO : set grpO = data.Root.ChannelGroups.Add(tableName) dim columnDict : set columnDict = schema.item(tableName) dim columnName : for each columnName in columnDict.keys dim chO : set chO = grpO.Channels.Add(columnName,columnDict.item(columnName)) dim columnVals : columnVals = tr.GetColumnValues(tableName, columnName) if not isempty(columnVals) then call ArrayToChannels(columnVals,Array(chO.GetReference(eRefTypeIndexIndex)),True) end if Next Next
SQLTableReader.vbs:
Option Explicit class SQLTableReader function Init(byVal adoConnectionString) set Init = Me set conn_ = CreateObject("ADODB.Connection") conn_.Mode = 1 conn_.Open adoConnectionString conn_.CursorLocation = 3 end function function Schema() Set schema_ = CreateObject("Scripting.Dictionary") Dim TablesSchema : Set TablesSchema = conn_.OpenSchema(20) Do While Not TablesSchema.EOF dim tableName : tableName = TablesSchema("TABLE_NAME") dim tableType : tableType = TablesSchema("TABLE_TYPE") ' Add if this is no SYSTEM or ACCESS table if (0 = InStr(1, tableType, "SYSTEM", 1)) AND (0 = InStr(1, tableType, "ACCESS", 1)) then dim tableDict : set tableDict = CreateObject("Scripting.Dictionary") ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Get all columns of the current table Dim ColumnsSchema : Set ColumnsSchema = conn_.OpenSchema(4, Array(Empty, Empty, tableName)) ColumnsSchema.Sort = "ORDINAL_POSITION ASC" ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Add all channels Do While Not ColumnsSchema.EOF dim columnName : columnName = ColumnsSchema("COLUMN_NAME") dim columnDataType: columnDataType = GetDataType__(ColumnsSchema("DATA_TYPE")) if NOT isempty(columnDataType) then ' If valid data type import it call tableDict.Add(columnName, columnDataType) end if ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Next column ColumnsSchema.MoveNext Loop call schema_.Add(tableName, tableDict) end if ' Next table TablesSchema.MoveNext Loop set Schema = schema_ end function function GetColumnValues(byVal tableName, byVal columnName) dim sqlSelect : sqlSelect = GetColumnSelect_(tableName, columnName) dim getResult : set getResult = conn_.Execute(sqlSelect) if NOT (getResult.BOF or getResult.EOF) then GetColumnValues = getResult.GetRows(-1, 0, 0) else GetColumnValues = empty end if end function private function GetColumnSelect_(byVal tableName, byVal columnName) dim tableNameT : tableNameT = sqlStringSeperator_ + tableName + sqlStringSeperator_ dim columnNameT : columnNameT = sqlStringSeperator_ + columnName + sqlStringSeperator_ dim rv : rv = sqlGetStatement_ rv = replace(rv, "@@TABLENAME@@", tableNameT) rv = replace(rv, "@@COLUMNNAME@@", columnNameT) GetColumnSelect_ = rv end function Private Sub Class_Initialize() sqlGetStatement_ = "SELECT @@COLUMNNAME@@ FROM @@TABLENAME@@" sqlTerminator_ = ";" sqlStringSeperator_ = "" ' e.g. " or ` set conn_ = nothing set schema_ = nothing End Sub Private Sub Class_Terminate() set conn_ = nothing End Sub private sqlGetStatement_ private sqlTerminator_ private sqlStringSeperator_ private conn_ private schema_ end class Function GetDataType__(adoDataType) if NOT isNumeric(cInt(adoDataType)) then GetDataType__ = empty exit Function end if const adBigInt = 20 ' Indicates an eight-byte signed integer (DBTYPE_I8). const adBinary = 128 ' Indicates a binary value (DBTYPE_BYTES). const adBoolean = 11 ' Indicates a boolean value (DBTYPE_BOOL). const adBSTR = 8 ' Indicates a null-terminated character string (Unicode) (DBTYPE_BSTR). const adChapter = 136 ' Indicates a four-byte chapter value that identifies rows in a child rowset (DBTYPE_HCHAPTER). const adChar = 129 ' Indicates a string value (DBTYPE_STR). const adCurrency = 6 ' Indicates a currency value (DBTYPE_CY). Currency is a fixed-point number with four digits to the right of the decimal point. It is stored in an eight-byte signed integer scaled by 10,000. const adDate = 7 ' Indicates a date value (DBTYPE_DATE). A date is stored as a double, the whole part of which is the number of days since December 30, 1899, and the fractional part of which is the fraction of a day. const adDBDate = 133 ' Indicates a date value (yyyymmdd) (DBTYPE_DBDATE). const adDBTime = 134 ' Indicates a time value (hhmmss) (DBTYPE_DBTIME). const adDBTimeStamp = 135 ' Indicates a date/time stamp (yyyymmddhhmmss plus a fraction in billionths) (DBTYPE_DBTIMESTAMP). const adDecimal = 14 ' Indicates an exact numeric value with a fixed precision and scale (DBTYPE_DECIMAL). const adDouble = 5 ' Indicates a double-precision floating-point value (DBTYPE_R8). const adEmpty = 0 ' Specifies no value (DBTYPE_EMPTY). const adError = 10 ' Indicates a 32-bit error code (DBTYPE_ERROR). const adFileTime = 64 ' Indicates a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (DBTYPE_FILeTime). const adGUID = 72 ' Indicates a globally unique identifier (GUID) (DBTYPE_GUID). const adIDispatch = 9 ' Indicates a pointer to an IDispatch interface on a COM object (DBTYPE_IDISPATCH). const adInteger = 3 ' Indicates a four-byte signed integer (DBTYPE_I4). const adIUnknown = 13 ' Indicates a pointer to an IUnknown interface on a COM object (DBTYPE_IUNKNOWN). const adLongVarBinary = 205 ' Indicates a long binary value (Parameter object only). const adLongVarChar = 201 ' Indicates a long string value (Parameter object only). const adLongVarWChar = 203 ' Indicates a long null-terminated Unicode string value (Parameter object only). const adNumeric = 131 ' Indicates an exact numeric value with a fixed precision and scale (DBTYPE_NUMERIC). const adPropVariant = 138 ' Indicates an Automation PROPVARIANT (DBTYPE_PROP_VARIANT). const adSingle = 4 ' Indicates a single-precision floating-point value (DBTYPE_R4). const adSmallInt = 2 ' Indicates a two-byte signed integer (DBTYPE_I2). const adTinyInt = 16 ' Indicates a one-byte signed integer (DBTYPE_I1). const adUnsignedBigInt = 21 ' Indicates an eight-byte unsigned integer (DBTYPE_UI8). const adUnsignedInt = 19 ' Indicates a four-byte unsigned integer (DBTYPE_UI4). const adUnsignedSmallInt = 18 ' Indicates a two-byte unsigned integer (DBTYPE_UI2). const adUnsignedTinyInt = 17 ' Indicates a one-byte unsigned integer (DBTYPE_UI1). const adUserDefined = 132 ' Indicates a user-defined variable (DBTYPE_UDT). const adVarBinary = 204 ' Indicates a binary value (Parameter object only). const adVarChar = 200 ' Indicates a string value (Parameter object only). const adVariant = 12 ' Indicates an Automation Variant (DBTYPE_VARIANT). const adVarNumeric = 139 ' Indicates a numeric value (Parameter object only). const adVarWChar = 202 ' Indicates a null-terminated Unicode character string (Parameter object only). const adWChar = 130 ' Indicates a null-terminated Unicode character string (DBTYPE_WSTR). Select Case cInt(adoDataType) case adBigInt GetDataType__ = DataTypeChnFloat64 case adBoolean GetDataType__ = DataTypeChnFloat64 case adBSTR GetDataType__ = DataTypeChnString case adChar GetDataType__ = DataTypeChnFloat64 case adCurrency GetDataType__ = DataTypeChnFloat64 case adDate GetDataType__ = DataTypeChnDate case adDBDate GetDataType__ = DataTypeChnDate case adDBTime GetDataType__ = DataTypeChnDate case adDBTimeStamp GetDataType__ = DataTypeChnDate case adDecimal GetDataType__ = DataTypeChnFloat64 case adDouble GetDataType__ = DataTypeChnFloat64 case adFileTime GetDataType__ = DataTypeChnFloat64 case adInteger GetDataType__ = DataTypeChnFloat64 case adNumeric GetDataType__ = DataTypeChnFloat64 case adSingle GetDataType__ = DataTypeChnFloat64 case adSmallInt GetDataType__ = DataTypeChnFloat64 case adTinyInt GetDataType__ = DataTypeChnFloat64 case adUnsignedBigInt GetDataType__ = DataTypeChnFloat64 case adUnsignedInt GetDataType__ = DataTypeChnFloat64 case adUnsignedSmallInt GetDataType__ = DataTypeChnFloat64 case adUnsignedTinyInt GetDataType__ = DataTypeChnFloat64 case adVarChar GetDataType__ = DataTypeChnFloat64 case adVariant GetDataType__ = DataTypeChnFloat64 case adVarNumeric GetDataType__ = DataTypeChnFloat64 case adVarWChar GetDataType__ = DataTypeChnString case adWChar GetDataType__ = DataTypeChnString Case Else GetDataType__ = empty End Select End Function
06-18-2019 01:46 PM
Andreas,
Nice Software!
Paul
ps. from really hot and humid Ohio.