Using SQL PDF
Using SQL PDF
Using SQL PDF
USING SQL
Version 5.0
August 2008
All rights reserved. No part of this publication may be reproduced in any form or by any electronic or mechanical
means, including photocopying and recording, without permission in writing from GE Fanuc Intelligent Platforms, Inc.
Notice
©2008 GE Fanuc Intelligent Platforms, Inc. All rights reserved. *Trademark of GE Fanuc Intelligent Platforms, Inc.
Microsoft® is a registered trademark of Microsoft Corporation, in the United States and/or other countries.
All other brands or names are property of their respective holders.
We want to hear from you. If you have comments, questions, or suggestions about our documentation, send them to the
following email address:
doc@gefanuc.com
Table of Contents
About This Guide ..............................................................................................................................1
SQL Overview...................................................................................................................................3
ODBC Term Definitions ................................................................................................................4
ODBC Architecture .......................................................................................................................5
Typical ODBC Architecture .......................................................................................................5
Single Tier ODBC Architecture .................................................................................................6
Accessing SQL Data Sources Through VBA ...................................................................................7
Data Access Objects (DAO) .........................................................................................................7
Joint Engine Technology (Jet) ..................................................................................................8
ODBCDirect ..............................................................................................................................8
Remote Data Objects (RDO) ........................................................................................................9
Configuring Data Sources ..........................................................................................................10
Accessing ODBC Data Sources .................................................................................................10
Accessing an ODBC Data Source with DAO .........................................................................10
Accessing an ODBC Data Source with RDO .........................................................................12
iFIX ODBC ......................................................................................................................................17
Understanding the Communication Process ..............................................................................17
Understanding Multiple Relational Database Support................................................................18
Setting Up iFIX ODBC ................................................................................................................18
Installing an ODBC Driver ..........................................................................................................19
Configuring an ODBC Data Source ............................................................................................19
System and User Data Sources .............................................................................................19
Running iFIX ODBC as a Service...............................................................................................20
Installing and Configuring Data Sources ........................................................................................21
Configuring an ODBC Data Source ............................................................................................21
Verifying and Editing an ODBC Data Source .............................................................................22
Configuring the SCU for an ODBC Data Source ........................................................................22
Microsoft Access.........................................................................................................................22
Installing an Access Driver .....................................................................................................22
Creating the Library and Error Tables for Access ..................................................................23
Supported Column Data Types for Access ............................................................................24
Handling Errors for Access .....................................................................................................25
Microsoft SQL Server .................................................................................................................25
Installing Microsoft SQL Server Database .............................................................................26
iii
Installing and Configuring the SQL Server Client ...................................................................26
Installing a SQL Server Driver ................................................................................................26
Creating the Library and Error Tables for SQL Server ...........................................................26
Supported Column Data Types for SQL Server .....................................................................27
Oracle .........................................................................................................................................29
Tested Oracle Versions ..........................................................................................................29
Installing and Configuring Client Support ...............................................................................29
Installing the Oracle Driver .....................................................................................................29
Creating the Library and Error Tables for Oracle ...................................................................30
Supported Column Data Types for Oracle .............................................................................31
Network Problems and Workarounds .........................................................................................31
Configuring the SQL Task ..............................................................................................................33
Modifying the Startup Options ....................................................................................................33
Using Command Caching .......................................................................................................35
Using the SQL Task Dialog Box .................................................................................................35
Using SQL Commands ...................................................................................................................37
INSERT Command .....................................................................................................................37
Explanation .............................................................................................................................37
UPDATE Command....................................................................................................................38
Explanation .............................................................................................................................39
SELECT Command ....................................................................................................................40
Selecting Multiple Rows .........................................................................................................40
DELETE Command ....................................................................................................................44
Explanation .............................................................................................................................44
Stored Procedures ......................................................................................................................45
Using Multiple Relational Database Support ..................................................................................47
Managing Multiple SQL Connections .........................................................................................47
Using Multiple User Accounts.....................................................................................................48
Using Multiple Databases ...........................................................................................................49
Storing Commands Centrally......................................................................................................49
Monitoring and Controlling Database Communication ...................................................................51
Changing Block Settings Through Links ....................................................................................51
Manually Triggering the Application .......................................................................................51
Resetting Time/Date/Events Specifications ...........................................................................51
Resetting SQD Blocks ............................................................................................................52
Transaction Tracking ..................................................................................................................53
Displaying Alarm and Application Messages .................................................................................55
iv
Displaying Alarms .......................................................................................................................55
Displaying Process Messages....................................................................................................56
Displaying Alarms ...................................................................................................................56
Generating Status Reports .........................................................................................................57
Backing Up and Restoring Data .....................................................................................................59
Backing Up Data .........................................................................................................................59
Restoring Back-up Data .............................................................................................................59
v
About This Guide
The Using SQL manual is intended for system administrators responsible for interfacing iFIX® to an
ODBC database. This manual assumes an understanding of ODBC relational databases and the SQL
language.
Reference Documents
• Implementing Security
• Using VisiconX
1
SQL Overview
Structured Query Language (SQL) is a standard language that is used by relational databases to
retrieve, update, and manage data. Although it provides the common syntax for applications to use, it
does not provide a common application program interface (API). Open Database Connectivity
(ODBC) is Microsoft's standard API for accessing, viewing, and modifying data from a variety of
relational databases.
To provide access to SQL data sources through the ODBC API, iFIX® allows you to use the
following: the iFIX SQL Interface option, called iFIX ODBC, and Microsoft® Visual Basic® for
Applications through DAO or RDO.
3
Using SQL
Data Source – a data source consists of the data and the information needed to access the data, such as
the database management system (DBMS), operating system, and network platform.
Database Layer – the database layer is composed of the database engine and the file or collection of
files where the data is actually stored.
Listener Processes – the listener process ties the network protocol to the database engine. This is really
the server part of a database server. The first figure shows three separate listener processes to
demonstrate one possible configuration serving three separate clients. This layer varies widely
depending on database vendors and operating systems.
Network Layer – the network layer is completely separate from the ODBC layers and is specific to the
operating system. It is usually provided with the operating system or by a network provider. The
client computer and the database server computer each contain this layer.
ODBC Administrator Program – the program used to configure ODBC data sources. Typically
installed in the Control Panel, but can also be installed as a separate executable
(ODBCAD32.EXE).
ODBC Application – an application that makes ODBC calls. Since the application communicates to the
ODBC layer, it is database independent. This means an ODBC application can be written and, by
plugging in various ODBC drivers, can access any database. iFIX ODBC is an ODBC application.
ODBC Driver – an ODBC driver translates an ODBC call issued by the application into a specific
call(s) for a particular database. In this module, the application links dynamically to a specific
database. ODBC drivers are available from a variety of sources. Some companies specialize in
writing database drivers. They provide a package that contains over a dozen ODBC drivers for
various databases. ODBC drivers are often available from the database vendor as well. Often
times, the user has more than one ODBC driver and manufacturer to choose from. The ODBC
driver communicates to the client support layer.
ODBC Driver Manager – a module written by Microsoft that is supplied with most ODBC drivers. It
acts as the layer between the application and any ODBC drivers. In fact, it loads the driver when
the application requests a connection.
NOTE: There is no ODBC software on the database server computer. The ODBC driver on the client
translates the ODBC calls into native database calls that the client support layer can understand.
Therefore, by the time the database request leaves the client machine, it has been totally transformed
into a native call for that database. The listener and engine on the server computer do not know if the
request came from an ODBC application or a native database application.
4
Using SQL
ODBC Architecture
There are basically two types of ODBC architecture: those that involve multiple tier ODBC drivers and
single tier ODBC drivers.
Multiple tier drivers are more common, and are typically used with a remote database server such as
Oracle® and SQL Server. Multiple tier ODBC drivers process ODBC calls made by the application,
but pass the actual SQL command to the database system.
Single tier drivers, such as the Microsoft® Access® driver, often operate directly on a database file or
files. A single tier ODBC driver processes both ODBC calls and the actual SQL commands. In most
cases, a configuration using a single tier driver can be contained on just one computer.
5
Using SQL
Note that there is no database server computer, client support layer, or network in the previous figure.
The Access ODBC driver works directly on the database file. In this simple configuration, the database
file is located on the same computer as the application. By using Microsoft networking, Novell
networks, and the like, the database file could be located on another computer just like any other
shared file. In this way, an Access database could be shared among several computers and applications.
6
Accessing SQL Data Sources through VBA
VBA is embedded directly into iFIX, allowing you to access SQL data sources from any relational
database through the ODBC API. The VBE, which is accessible in Proficy iFIX in Ribbon View, on
the Home tab, in the WorkSpace, click Visual Basic Editor or in Classic view, on the WorkSpace
menu, click Visual Basic Editor. For complete information on accessing SQL data sources through
VBA, refer to the Writing Scripts manual.
VBA supports two Microsoft technologies that allow iFIX to connect to SQL data sources: Data
Access Objects (DAO) and Remote Data Objects (RDO). Both of these technologies provide an
object-based interface for accessing relational databases. Although either technology can be used, each
one has specific capabilities that should be considered when making a choice.
Once you have set a reference to the Microsoft DAO object library, you can view the DAO objects in
the Object Browser by selecting DAO in the Project/Library box.
DAO supports two technologies for accessing SQL data sources: Microsoft Joint Engine Technology
(Jet) and ODBCDirect. The DAO technology you use depends on the type of operation you need to
perform.
The following figure illustrates how DAO uses Jet and ODBCDirect to access a SQL data source.
7
Using SQL
Accessing SQL Data Sources with DAO Jet versus DAO ODBCDirect
Heterogeneous data access – allows you to join data stored in different back ends.
Programmatic DDL – provides table definitions and the ability to create or modify tables using Data
Definition Language (DDL).
Support for Find and Seek methods – permits the use of the Find and Seek methods.
Although Jet is capable of accessing ODBC data sources, this functionality is limited and, compared to
ODBCDirect, has two major disadvantages. First, Jet loads the Microsoft Jet database engine even
when it is not a Jet database being accessed. Second, since calls must be passed through the Jet
database engine before reaching the ODBC API, Jet is slower than ODBCDirect.
ODBCDirect
As the name suggests, ODBCDirect provides more direct access to ODBC data sources by way of
bypassing the Jet engine. ODBCDirect is a thin DAO wrapper around the RDO interface, meaning it
routes DAO objects, methods, and properties to equivalent RDO functions. The following is a list of
ODBCDirect advantages not provided by Jet.
Direct data access – allows direct access to ODBC data resources.
8
Using SQL
Reduced resource requirements – eliminates the resources required by Jet to load the Jet database
engine.
Local batch processing – caches Recordset changes locally and submits the changes to the server in a
single batch.
RDO incorporates most of the higher-level functions of ODBCDirect, such as support for
asynchronous operations. It also provides additional functionality, such as triggered events for
connections and queries, advanced support for stored procedures and multiple-select queries, and
enhanced error trapping. Since RDO directly calls the ODBC API, it's speed nearly matches that of
calling the ODBC API directly, and it's use of resources is reduced.
To use RDO within iFIX, you must first set a reference to the Microsoft Remote Data Object library.
Once you have set a reference to the Microsoft Remote Data Object library, you can view the RDO
objects in the Object Browser by selecting RDO in the Project/Library box.
9
Using SQL
To configure a data source with RDO you use the rdoRegisterDataSource method and the following
syntax:
RdoRegisterDataSource, "dsName", "driver", silent, attributes
read-only, connect)
When using ODBCDirect, you can also use the OpenConnection method to connect to a data source.
The OpenConnection method allows you to perform asynchronous operations and use QueryDef
objects. To connect to a data source using the OpenConnection method, use the code shown below.
Set connection = workspace.OpenConnection ("name", options, _
read-only, connect)
The following extended example creates a Jet workspace, opens a database called DB1.mdb, and
10
Using SQL
creates a recordset called Table1. The additional code moves the current record position, manipulates
the grid, displays the data, and resets the object variables.
NOTE: To use the MSFlexGrid, you must install it and then set a reference to it by selecting
References from the Tools menu in the VBE. You can use the MSFlexGrid or any similar spreadsheet,
such as the VideoSoft VSFlexGrid, in your applications. GE Fanuc does not provide the MSFlexGrid;
it is referenced in the documentation for illustration purposes only.
Dim db as Database
`Create a Recordset
Dim rs As Recordset
rs.Movelast
rows = rs.RecordCount + 1
rs.MoveFirst
myGrid.rows = rows
myGrid.Cols = 3
myGrid.Row = 0
myGrid.Col = 0
myGrid.Text = "Date"
11
Using SQL
myGrid.Col = 1
myGrid.Text = "Value"
myGrid.Col = 2
myGrid.Text = "Description"
Dim r as Integer
Dim t as Integer
r = 1
myGrid.Row = r
For t = 0 to 2
myGrid.Col = t
Next t
r = r + 1
rs.MoveNext
Wend
Set rs = Nothing
Set db = Nothing
End Sub
12
Using SQL
Dim en As rdoEnvironment
Dim cn As rdoConnection
With cn
.LoginTimeout = 15
Do While .StillExecuting
DoEvents
Loop
End With
13
Using SQL
strSQL = "Select A_TAG, F_CV, A_CUALM from JJP Where A_TAG > `AI3'"
with rdoQ
Set .ActiveConnection = cn
.SQL = strSQl
.Execute
End With
Set rdoRS = cn.OpenResultset ("Select A_TAG, F_CV, A_SCAN, from JJP Where
A_TAG > `AI3'")
myGrid.rows = 150
myGrid.Cols = 3
myGrid.Row = 0
myGrid.Col = 0
myGrid.Text = "Results"
Dim r As Integer
Dim t As Integer
r = 1
14
Using SQL
myGrid.Row = r
For t = 0 To 2
myGrid.Col = c
Next t
r = r + 1
rdoRS.MoveNext
Wend
Set cn = Nothing
Set en = Nothing
End Sub
15
iFIX ODBC
iFIX ODBC provides communication between relational databases and the iFIX database. The iFIX
database can be configured to communicate based on an event, a time, or a combination of both.
iFIX ODBC consists of the:
• SQL task.
• SQL Trigger (SQT) database block.
• SQL Data (SQD) database block.
The SQL task performs the following functions:
• Executes the SQT blocks that trigger.
• Retrieves process data from the SQD blocks and inserts the data into the relational database.
• Selects data from the relational database and writes the data back to the iFIX database.
• Backs up data in the event of a network failure (backup continues until the primary and
secondary paths are full).
• Automatically restores data to the relational database once network communications are
established.
The SQL Trigger block defines:
• Which SQL commands in the SQL Library Table are used to manipulate data.
• Whether the SQL commands are backed up in the event that the application loses a
connection with the server.
• The time or event that triggers the data transfer.
The SQL Data block defines:
• The data that is collected and transferred.
• The direction of the data transfer.
Both database blocks communicate with the SQL task, WSQLODC.EXE. This task runs on a SCADA
node and handles communication with the ODBC driver.
If the connection to the relational database is lost, SQL commands and data can be backed up. When
the connection is re-established, SQL commands and data are executed in the order in which they were
backed up. Refer to the Backing Up and Restoring Data section for a more detailed description of the
back-up and restore process.
NOTE: If you copy and paste the SQT and SQD blocks, they will not fire. You must create these blocks
in full.
17
Using SQL
To collect and insert process data into a relational database using iFIX ODBC:
1. The SQL Trigger block (SQT) triggers; the SQL task reads the SQL command name from the
SQT block.
2. The SQL task retrieves the associated command from the SQL Library Table.
3. The SQL task reads the tags specified in the SQL command from the SQL Data block (SQD)
and reads the values associated with these tags from the iFIX database.
4. The SQL task executes the SQL command and inserts data into or selects data from the
relational database.
5. If the SQL command is a SELECT command, the retrieved data is written to the iFIX tags
defined in the SQD block.
1. Set up your relational database on the server along with user accounts and passwords. Consult
your relational database manuals for specific instructions.
2. Set up the ODBC driver to communicate with iFIX. To do this, use the relational database
tools that come with your SQL software.
3. Define the SQL commands. To do this, create a library table that contains the SQL commands
you want executed. The examples in this manual use SQLLIB as the SQL command table
name.
4. Create the error log table that stores all SQL runtime error messages that are recorded by the
system.
5. Set up or upgrade your network to support communications.
6. Configure iFIX ODBC.
7. Confirm that the SCADA node can establish network communications with the server by
using an ODBC test program supplied by your ODBC vendor (such as MSQUERY).
NOTE: When logging alarms to an Oracle database, you must use the Microsoft Oracle
driver or data loss could occur.
18
Using SQL
1. Ensure that the SQL task is added to the Configured Task List in the SCU Task Configuration
dialog box. Refer to the Configuring the SQL Task section for more information on
configuring the SQL task.
2. Add an account for each relational database you need to communicate with to the Configured
Accounts list in the SCU SQL Configuration dialog box. Refer to the Installing and
Configuring Data Sources section for more information on defining specific accounts.
3. Configure the SQL task using the Configure SQL Task dialog box in the SCU. Refer to the
Configuring the SQL Task section for more information on configuring the SQL task.
4. Define the SQT and SQD blocks in the iFIX database. Refer to the iFIX Database Reference
for more information on blocks.
19
Using SQL
user. A user data source, on the other hand, is only available to the user who created it.
For example, assume your system has three user accounts: Account1, Account2, and Account3.
Account1 creates a system data source sysAccount1. Account2 creates a user data source
userAccount2. Account3 creates a user data source userAccount3. Account1 can only use sysAccount1.
Account2 can use sysAccount1 and userAccount2. Account3 can use sysAccount1 and userAccount3.
The ODBC Data Source Administrator allows you to create a system data source simply by clicking
the System DSN button and adding the data source. System data sources appear in the System DSN
list. However, when you call up the list of available data sources in the SCU, both system and user (for
the user currently logged in) data sources are listed. If your ODBC driver installs an earlier version of
the driver manager, you can copy the driver manager located in the iFIX Base path to your operating
system's SYSTEM directory.
The procedure for configuring a system data source is similar to configuring other data sources. The
only difference is that you must click the System DSN button in the ODBC Data Sources dialog box
and add the data source you want. Refer to the System and User Data Sources section for more
information on system data sources.
Refer to the Installing and Configuring Data Sources section for more specific information on
configuring data sources for each database supported by iFIX ODBC.
20
Installing and Configuring Data Sources
This chapter provides instructions and tips on installing and configuring Microsoft Access, Microsoft
SQL Server, and Oracle data sources for use with iFIX ODBC. It includes the following sections:
• Configuring an ODBC Data Source
• Verifying and Editing an ODBC Data Source
• Configuring the SCU for an ODBC Data Source
• Microsoft Access
• Microsoft SQL Server
• Oracle
• Network Problems and Workarounds
1. Click the Start button and point to Programs, Administrative Tools, and then Data Sources
(ODBC). You can also access the Administrative Tools folder from the Control Panel.
The ODBC Data Source Administrator program opens.
2. On the User DSN tab, click Add. The Create New Data Source dialog box appears.
3. Select the ODBC driver for the relational database you want to access from the list.
4. Click Finish. An ODBC Data Source Setup dialog box appears for the ODBC driver you
selected.
NOTE: If you do not have the correct ODBC driver installed on your system, an error
message appears instead of the ODBC Data Source Setup dialog box.
5. In the ODBC Data Source Setup dialog box, enter the required information.
NOTE: Skip steps 6-9 if you are not accessing a Microsoft Access data source and not
running iFIX as a service.
21
Using SQL
10. Click OK in the ODBC Data Source Setup dialog box. The new data source appears in the
Data Sources dialog box.
11. Click Close.
To verify information and edit the settings for an ODBC data source:
1. Click the Start button and point to Programs, Administrative Tools, and then Data Sources
(ODBC). You can also access the Administrative Tools folder from the Control Panel.
The ODBC Data Source Administrator program opens.
2. On the User DSN tab, select the appropriate data source from the list and click Configure. The
ODBC Data Source Setup dialog box appears for the data source you selected.
3. Check the settings and make any necessary changes.
4. In the ODBC Data Source Setup dialog box, click OK.
5. In the Data Source Administrator dialog box, click OK.
Microsoft Access
This section provides instructions and tips specific to installing and configuring Microsoft Access data
sources for use with iFIX ODBC. It includes the following topics:
• Installing an Access Driver
• Creating the Library and Error Tables for Access
• Supported Column Data Types for Access
• Handling Errors for Access
22
Using SQL
documentation.
1. Start Access.
2. On the File menu, click Open. Select a database to open, such as
C:\ACCESS\EXAMPLE.MDB.
3. Click the Tables icon.
4. Click New to add a new table.
The spreadsheet displayed has entries for the field (column) name, its datatype, and an optional
description. As you move from row to row, the attributes for that field are displayed below the
spreadsheet. Use the following tables in this section as guides for the two tables.
sqlname Text, size 8 Select Yes for the Indexed attribute. Also, click the Key icon in the
toolbar to make this the Primary Key for the table.
sqlcmd Text, size If any of your SQL commands are longer than 255 characters, make
100 - 255 this field a Memo field. This allows up to 64,000 characters. You
must also modify the /CLn parameter to allow for greater than 255
characters. Refer to the Modifying the Startup Options section for
more information on modifying the /CLn parameter.
23
Using SQL
td Date/Time
The SQLERR table does not need a key, but you can create a counter field to use as a key if you wish.
NOTE: SQLLIB and SQLERR are the default names for the tables. You can name them anything you
want as long as those names are reflected in the SCU. However, the field (column) names must be
entered exactly as shown. (Access column names are not case sensitive.)
Date/time O O O I
24
Using SQL
Counter I, O I
Text I, O
NOTE: iFIX does not support the use of data types that accept large amounts of data. For example,
the MEMO field in a Microsoft Access database or the LONG data type in an Oracle database. Do not
select a column with either data type from Run. Doing so may cause unexpected results.
iFIX ODBC has been tested with SQL Server 2005 SP2, and SQL Server 2000 SP4.
25
Using SQL
will not work if the table T1 is actually t1, or if the ValveSetting1 column is actually Valvesetting1,
and so on.
sqlcmd varchar, size If any of your SQL commands are longer than 255 characters,
100 - 255 make this field a Text field. This allows over 2 billion
characters.
26
Using SQL
NOTE: SQLLIB and SQLERR are the default names for the tables. You can name them anything you
want as long as those names are reflected in the SCU. However, the field (column) names must be
entered exactly as shown.
Use the following commands to create the Library table, Index, and Error Log table if using ISQL:
create table sqllib (sqlname varchar(8) NOT NULL,
datetime O O I
27
Using SQL
smalldatetime O O I
char/varchar O I, O
int I, O I
real I, O I
float I, O I
tinyint I, O I
smallint I, O I
text I
28
Using SQL
Oracle
This section provides instructions and tips specific to installing and configuring Oracle 10g for use
with iFIX. It includes the following topics:
• Installing and Configuring Client Support
• Installing the Oracle Driver
• Creating the Library and Error Tables for Oracle
• Supported Column Data Types for Oracle
1. Install the Oracle 10g Release 2 Client. When prompted for the installation type, select
"Runtime" and then complete the install and exit.
2. From the Oracle program group, open the Oracle Net Manager application.
3. In the Oracle Net Manager, expand the tree and select the Service Naming item.
4. On the Edit menu, click Create.
5. In the Net Service Name field, enter a name and click Next.
6. Select the TCP/IP (Internet Protocol) option and click Next.
7. In the Host Name field, enter the computer name where the Oracle database resides, and click
Next.
8. In the Service Name field, enter the global database name that you want. This name was set
on the Oracle database computer in Oracle 8i or later. Click Next to continue.
9. Optionally, test the connection.
10. Click Finish.
11. Exit and save the configuration.
Refer to your Oracle documentation for more information.
29
Using SQL
1. Run the setup program for the Oracle 10g Release 2 Client.
2. On the Welcome screen, click Next.
3. When prompted for an installation type, select Custom Installation and click Next.
4. On the Destination screen, in the Name field, change the default setting by selecting the
destination you used when installing the "Runtime" Client. The path should automatically
change to the path associated with the name. Click Next.
5. On the Available Product Components screen, select the Oracle Windows Interfaces
10.2.0.1.0 and click Next.
6. On the Product-Specific Prerequisite Check screen, click Next.
7. On the Summary screen, click Install. When the installation completes, a final screen appears.
8. Click Exit to finish the install.
NOTE: SQLLIB and SQLERR are the default names for the tables. You may name them anything you
want as long as those names are reflected in the SCU. However, the names of the columns must be
30
Using SQL
Use the following commands to create the Library table, Index, and Error Log table:
create table SQLLIB ( sqlname varchar2(8) NOT NULL PRIMARY KEY, sqlcmd varchar2(1000) NOT
NULL )
create table SQLERR ( td date NOT NULL, node varchar2(8) NOT NULL, tag varchar2(30) NOT
NULL, sqlname varchar2(8) NOT NULL PRIMARY KEY, sql_err varchar2(250), fix_err
varchar2(100), prog_err varchar2(100) )
date O O I
char, varchar2 I, O
NOTE: iFIX does not support the use of data types that accept large amounts of data. For example,
the LONG data type in an Oracle database or the MEMO field in a Microsoft Access database are not
supported. Do not select either data type from View. Doing so may cause unexpected results.
31
Using SQL
error.
Use the following format when editing the SQLERR text file:
! This is a comment
2034
6000,6499
3100,3199
237
238
You can define a single error number or an error range. In the preceding example, if Oracle returned
error code 2034, or any error between 6000-6499 or 3100-3199, the SQL task would interpret the error
as a communication failure.
The SQLERR.TXT file installs to the Application path, usually C:\Program Files\GE Fanuc\Proficy
iFIX\App. Do not rename this file.
32
Configuring the SQL Task
The iFIX ODBC SQL task, WSQLODC.EXE, is responsible for:
• Executing the SQT blocks that trigger.
NOTE: When using the confirm tag for an SQT block that is triggered by an event, make sure
that you define the security so that users do not have access to Mission Control to shut down
the SQL task.
• Retrieving process data from the SQD blocks and inserting the data in the relational database.
• Selecting data from the relational database and writing the data back to the FIX® database.
• Backing up data in the event of a network failure (backup continues until the primary and
secondary paths are full).
• Automatically restoring data to the relational database once network communications are re-
established.
Refer to the following sections for information on:
• Modifying the Startup Options
• Using the SQL Task Dialog Box
33
Using SQL
The following table describes the command parameters available to this task.
/LDn Defines how often the task attempts to log onto the 60 seconds
server after it has lost a connection. This parameter is (minimum).
optional. The system defaults to 300 seconds if this
No maximum limit set.
parameter is not defined.
However, most
applications do not
need more than one
hour (3600 seconds).
/Dn Defines a startup delay before attempting to log into 0 to 65535 seconds.
the SQL database. Use this parameter if you
encounter problems connecting to the database during
startup.
34
Using SQL
Error/Debug Message Routing – displays the Configure Alarm Areas - SQL Error Messages or SQL
Debug Messages dialog box. Using this dialog box, you can enable the alarm areas that receive
error or debug messages generated by iFIX ODBC. Error messages indicate that the SQL system
task encountered an error. Debug messages provide information to help you troubleshoot the
connection to the relational database. Refer to the Implementing Alarms and Messages manual for
more information on how iFIX performs alarming.
Error/Debug message to screen – determines if error or debug messages are sent to the SQL task.
Select each check box to enable this function.
Primary and Secondary Backup Files – defines the primary and secondary back-up paths and file
names that iFIX ODBC uses when it cannot write to the relational database. If iFIX ODBC cannot
connect to the server, or loses a connection with the relational database, it backs-up data to the file
identified in the Primary path field. If iFIX ODBC fails to write to this file, it backs-up data to the
file identified in the Secondary path field.
If you set the primary path to a file server, consider setting the secondary path to a local drive. With
this configuration, if iFIX ODBC cannot connect to the server because of a bad cable connection, the
secondary path can back-up data to the local drive. Once iFIX ODBC re-establishes a connection to the
relational database, it first processes any backed up SQL commands and data. The back-up file is
deleted when the back-up operation completes.
NOTE: Backed-up SQL commands are processed on a first in, first out (FIFO) basis.
You can enter any valid iFIX path in these fields along with a back-up file name. Enter the path and
file name in the following format:
35
Using SQL
drive:path\filename.SQL
If your path entry does not exist at runtime, iFIX ODBC generates an error message. This is because it
tries to send back-up data to a file that is assigned no destination path. In this case, if backed-up SQL
commands and data are stored in a file, it cannot be used in restoring data. The SQL system task does
not support the following characters in backup file names:
, + * = | < > [ ] " : ; ?
Refer to the Backing Up and Restoring Data section for more information on how iFIX ODBC
performs backups.
Database ID – defines the default location for both SQL commands and the data for SQL Trigger
blocks. The Database ID is the ODBC data source name specified during ODBC setup for the
relational database.
If you leave this field blank, you can define a Database ID in each SQL Trigger block instead.
Refer to the Using Multiple Relational Database Support section for more information on
connecting to several relational databases simultaneously.
SQL cmd table – identifies the name of the SQL Library Table that contains the SQL commands. The
default name is SQLLIB. However, the table name can have between 1 and 31 characters
(inclusive). Refer to the Installing and Configuring Data Sources section for more information on
the SQL Library Table.
Error log table – identifies the name of the error log table to which the SQL task sends error messages.
If an SQL transaction fails, an entry is made to this table, providing useful information for
debugging SQL transactions.
The default name for the error log table is SQLERR. However, the table can have between 1
and 31 characters (inclusive).
NOTE: Completing the error log table field is optional. If no table name is entered, the
application does not record error messages to the relational database.
Task Sleep Interval – determines how often the SQL task processes the SQT blocks in the database. Be
sure to enter a time that is sufficient to monitor your application. Valid entries are 0 to 99 seconds.
The default is 5 seconds.
Once you have configured the SQL task for your application, the next step is to configure the
SQL chains in the iFIX database.
36
Using SQL Commands
All SQL commands are supported by iFIX ODBC. However, this manual focuses on the most
frequently-used SQL commands, shown below:
• INSERT
• UPDATE
• SELECT
• DELETE
SQL commands are stored in the SQL Library table. The SQL Trigger block defines which SQL
command to use in this table.
INSERT Command
The INSERT command adds data from iFIX tags into a new row in the relational database. INSERT
statements can have only one record associated with them.
SQT1 – the SQL Trigger block defines the SQL name and command to use. In this example, the
following INSERT command in the SQLLIB table executes when the SQT block triggers:
SQD1 – the SQL Data block references three tag and field name combinations in the database, and sets
the direction for the data transfer to OUT.
T01-. AI1.A_DESC
T02-. AO1.F_CV
T03-. DO1.A_ADI
TBL1 – is the table referenced by the INSERT command that is used in the SQT block.
Explanation
When the software executes this INSERT command, it creates a new row in TBL1 that contains the
values of the iFIX tags and field names listed in the SQD1 block. The resulting table is shown below:
37
Using SQL
ABDFG – comes from the DO1 block using the A_ADI field.
NOTE: If the SQL task cannot read a value from a block (for example, it attempts to read the current
value of an Analog Input block while the block is off scan), the SQL task substitutes a null value in
place of the block value. If the target column does not accept null values, a new row is not inserted and
the SQL task generates an error. The SQT block also generates an alarm.
UPDATE Command
The UPDATE command changes the values in the relational database to reflect the current values of
the iFIX tags.
SQT1 – the SQL Trigger block uses the following UPDATE command defined in the SQLLIB table:
SQD1 – the SQL Data block references three tag and field name combinations in the database, and sets
the direction for the data transfer to OUT.
T01-. AI1.A_DESC
T02-. AO1.F_CV
T03-. DO1.A_ADI
38
Using SQL
TBL1 – is the table referenced by the UPDATE command used in the SQT block.
Explanation
When the software executes this command, it looks at each value in COL3 for the value that matches
the A_ADI field for the DO1 block. Since the last row in the table matches, the system updates that
row. COL1 and COL2 receive new values from AI1's descriptor and AO1's current value, respectively.
The resulting table is shown below:
ABDFG – comes from the DO1 block using the A_ADI field.
iFIX does not support updates to a date column. If you need to update a date, we recommend that you
carefully consider the design for your relational database tables. Consider what data needs to be
accessed and how. For example, you may want to keep the year, month, and day in separate columns
and then update each column individually.
If the SQL task cannot read a value from a block, it substitutes a null value in place of the block value.
If the target column does not accept null values, rows are not updated and the SQL task generates an
error. The SQT block also generates an alarm.
39
Using SQL
SELECT Command
The SELECT command retrieves data from the relational database based on the selection criteria.
SQT1 – in this example, the SQL Trigger block uses the following SELECT command defined in the
SQLLIB table:
SQD1 – in this example, the SQL Data block references three tag and field name combinations in the
database, and sets the direction for two of them to IN and the other to OUT.
T01-. AI1.A_DESC
T02-. AO1.F_CV
T03-. DO1.A_ADI
TBL1 — is the table referenced by the SELECT command used by the SQT block.
Deadband 9 ALL
Explanation
When the software executes this command, the value for DO1.A_ADI is read, since it is an outgoing
field. The value for the field is ALL. This command retrieves only the last row since it is the only row
that matches the selected criteria. The values from COL1 and COL2 in the last row are selected from
TBL1 and are written to AI1.A_DESC and AO1.A_CV.
The new descriptor for AI1 is now Deadband. The new current value for AO1 is now 9.
The process database does not accept null values. If the SQL task reads a null value from the SQL
table, no value is written to the target database block field. Additionally, the SQT block generates an
alarm and a field write error. However, any other non-null values selected are written to the process
database.
40
Using SQL
Many rows and columns Array Mode Limit of how many rows are
used out of the result set.
The SQT block's Column field is used to determine the number of columns to be used. This applies
only when using Multiple Rows and Array Mode Select Parameters.
NOTE: When querying iFIX database tags, you cannot retrieve the A_CV value from a tag or group of
tags when the tag or tags are off scan. If you try to do so, an error message appears.
Single Row
If a SELECT command returns multiple rows, you can use the SQT block's Single Row mode and the
Rows field to determine which row is written to the SQD block. When the SQT block is configured for
Single Row mode, the SQD block accepts only one row of data regardless of the number of rows the
SELECT command returns.
The SQT block's Rows field determines the row number within the result set to use. The Rows field
normally defaults to zero when you select Single Row mode in the SQT block. If zero is the value in
Single Row mode, and more than one row is returned, an error results and no data is written to iFIX
tags. If a number other than zero is used, the corresponding row number returned from the selected is
used.
For example, if the Row field is set to one, the first row of the selected data is used. If it is set to two as
shown in the following figure, the second row is used. In this manner you can identify the row to use.
The Columns field is ignored in this mode. The number of columns is defined by the number of tags in
the SQD block that have a direction of IN. If the number of IN tags does not match the number of
41
Using SQL
Multiple Row
When the SQT block is configured for Multiple Row mode, the SQD block accepts more than one row.
A set of iFIX tags is used for each row returned. Returned values are written column by column, row
by row.
The Columns field must be configured with the correct number of columns in the SELECT command.
This information must be defined before the command is executed.
For example, consider the following SELECT statement:
Select col1, col2, col3 from table1
This command returns three columns from the database. The SQD block must contain a multiple of
three iFIX tags. If the SELECT command returns two rows of data, six tags should be specified in the
SQD block. If more rows are returned by the SELECT command than tags defined in the SQD block,
the additional rows are discarded. If less rows are returned, the extra tags in the SQD block are not
written to.
The Rows field determines the starting row to use in the selected data. For example, the Rows field can
be defined as 3. If the SELECT command returns 10 rows, the tags in the SQD block receive the
values starting with the third row. If the number of IN tags in the SQD block is not an even multiple of
the number of columns returned, an error results and no data is written to the tags.
You can also use the SELECT command to include parameter markers. For example:
Select col1, col2, col3 from table1 where col4 = ?
In this case, three columns are returned. The command requires one tag with a direction of OUT for the
42
Using SQL
parameter marker.
Array mode
Array mode is used with register blocks. One register block is specified for each column returned from
a SELECT statement. Each register block receives multiple rows from a column. The Rows field is
used to set a limit on how many rows to write.
In the following example, the SELECT statement returns three columns and requires one parameter
marker:
Select col1, col2, col3 from table1 where col4 = ?
In array mode, the SQD block contains one IN register block for each column returned. A tag with an
OUT direction is specified in the SQD block for each parameter marker.
Each Register block receives one row of data starting with the register offset specified in the SQL Data
block. Data is written until either the Rows limit is reached (specified by the Rows field) or until the
data is exhausted.
The F_n field is used for the register block in the SQD block, where n is the offset from the base
address that the block references. For example, AR1.F_10, AR2.F_0, and AR3.F_0 are shown in the
following figure. Values from the selected data are written to the blocks starting at the offset specified,
10,0 and 0 respectively.
The Columns field is ignored in this mode since the number of columns is the same as the number of
IN SQD tags defined.
43
Using SQL
DELETE Command
The DELETE command removes records from the relational database based on the selection criteria.
SQT1 – the SQL Trigger block uses the DELETE command in the SQLLIB table. The DELETE
command executes the following statement when the SQT block triggers:
SQD1 – the SQL Data block references a tag and field name combination in the database, and sets the
direction for the data transfer to OUT.
T01-.DO1.A_ADI
T02-.
T03-.
T04-.
TBL1 – is the table referenced by the DELETE command used by the SQT block.
Deadband 9 ALL
Explanation
The value of DO1.A_ADI is equal to NONE. When the software executes this command, the value is
read and substituted into the SQL command. The command is then:
Delete from TBL1 where COL3 = `NONE';
Since both row one and row three have `NONE' as the value in column three, they are both deleted.
The resulting table is shown below:
Deadband 9 ALL
44
Using SQL
Stored Procedures
Stored procedures are compiled blocks of code in the relational database. They are useful since they
can have conditional statements and flow statements. Stored procedures can perform INSERT,
UPDATE, DELETE, and SELECT commands. However, stored procedures can also take arguments
and return results. The arguments may be values to insert or values to use in where clauses.
Procedures can be much faster than SQL commands for the following reasons:
• Executing a stored procedure requires only one call.
To execute an SQL command, two calls are made to the relational database: one to retrieve
the command and another to execute it. Using a stored procedure, the reference is made by
name and the name is passed to the database, including any parameters.
To configure the SQL blocks to use a stored procedure, use the following information:
• Select Procedure in the Command Type group box in the SQT block's SQL Parameters dialog
box.
• Enter the name of the procedure in the SQL Name field, using no more than eight characters.
• Define any input arguments required by the stored procedure using the Direction field in the
SQD block.
For example, if the stored procedure takes two input arguments and returns data from a
SELECT statement, configure the SQD block with OUT tags for the parameter markers and
IN tags for the results from the SELECT statement.
Refer to the Selecting Multiple Rows section for more information on configuring the database blocks
to use multiple rows of data.
NOTE: Microsoft Access does not support the use of stored procedures. If you are using Microsoft
Access as your relational database, do not use the PROCEDURE command in your command
language scripts and do not select the Stored Procedures option button in the SQL Command
Configurator. Doing so can produce unexpected results.
45
Using Multiple Relational Database
Support
Multiple database support allows iFIX ODBC to execute commands in different databases.
Implementing multiple relational database support allows you to:
• Use different user name/password combinations in a database.
• Communicate with several different relational databases.
• Store all SQL commands in one database and execute the commands in several different
relational databases.
NOTE: The methods of storing SQL commands and using multiple relational databases discussed in
this chapter cannot be mixed.
System starts Reads the SQL Task Configuration information from the SCU and logs into the
up Database ID (if defined) in the SQL Task Configuration. This data source is
the default login.
SQT Block Logs into a database using the following search pattern for Database IDs:
triggers
1. SQT block's Database ID.
2. SCU Database ID (location for command & Errlog tables).
3. First Database ID listed in the SQL Accounts dialog box.
47
Using SQL
Connection is Retries the connection at the interval specified by the /LD parameter and
lost continues processing SQL blocks to other data sources. Commands are backed
up to the backup file specified in the SCU until the SQL task can re-establish a
connection to the database.
Connection is Searches through the backup file for entries. Entries to databases that are not
re-established connected are ignored until the connection can be re-established.
1. Click the Start button and point to Programs, Administrative Tools, and then Data Sources
(ODBC). You can also access the Administrative Tools folder from the Control Panel.
The ODBC Data Source Administrator program opens.
2. Select the System DSN tab.
3. Select the Add button. The Add Data Sources dialog box appears.
4. Select the type of relational database you want to use and click OK. A dialog box appears.
5. In the Data Source Name field, enter the data source name. For example, enter ORA_USER1.
Make sure the data source name matches the name defined in your project.
6. In the Server field, enter the name of your relational database server.
7. Click OK or continue through the rest of the configuration.
8. Repeat steps 3-7 to add another DSN. For example, ORA_USER2. Make sure that the
information you enter matches the first DSN (since they are for the same database), except for
the name.
9. In the SCU, configure two SQL login accounts (one for each data source) and give each
account a different user name and password.
10. In the SQT blocks, in the Database ID field, create the iFIX database chains, defining the
correct account, ORA_USER1 or ORA_USER2.
The SQL Task Configuration does not include a reference to a database identifier. Instead, you must
define the Oracle account in each SQT block using the Database ID field.
When an SQT block triggers to execute a command using ORA_USER1, the SQL task logs into the
relational database with the this user name and password. When an SQT block triggers to execute a
command using ORA_USER2, the SQL task logs into the same database but with a different user
name/password combination.
48
Using SQL
1. In the Control Panel, select Administrative Tools, and then Data Sources (ODBC). Select the
System DSN tab, and click add to create an ODBC data source for each relational database.
For example, the data sources can be called ACC_DB and ORA_DB.
2. In the SCU, configure two SQL accounts (one for each data source). The Database ID field
should be the data source names defined in the previous step: ACC_DB and ORA_DB.
3. In the SQL Task Configuration dialog box, leave the Database ID field blank.
4. In each SQT block, in the Database ID field, type the appropriate database ID to access the
relational database.
The SQL Task Configuration does not include a reference to a database identifier. Instead, define the
relational database in the Database ID field of each SQT block.
When SQT1 triggers, the configured command executes in the database, ACC_DB, defined in the
block configuration. In this example, the chain triggers a recipe download. The blocks defined in the
SQD block accept the downloaded recipe values. The iFIX database chain for SQT2 logs plant values
to the Oracle database using ORA_DB as the Database ID.
1. In the Control Panel, select Administrative Tools, and then Data Sources (ODBC). Select the
System DSN tab, and click add to create an ODBC data source for each relational database.
For example, the data sources can be called CMD_DB, ACC_DB, and ORA_DB.
2. In the SCU, configure three SQL login accounts (one for each data source). The Database ID
field should be the data source names defined in the previous step: CMD_DB, ACC_DB, and
ORA_DB.
3. In the SQL Task Configuration dialog box, define CMD_DB as the Database ID field. The list
of configured Database IDs in the Accounts dialog box is presented when the browse (...)
button is selected.
4. In each SQT block, in the Database ID field, type the appropriate database ID to access the
relational database. For example, if the command is executed in the Access database, then for
the SQT block, in the Database ID field, type ACC_DB.
49
Using SQL
Refer to the Configuration for Multiple Databases figure to view the information you need to define in
the SCU to use two different relational databases. The Database ID in the SQL Task Configuration
refers to the relational database table that is used to store all the SQL commands that are used with all
of the relational databases. The SQT block Database ID field defines where the command is executed.
The following figure illustrates the information you need to define in the SCU to use a relational
database to store all the SQL commands.
When executing a SQL command, the command is retrieved from the CMD_DB database and
executed in the relational database specified in the SQT block.
50
Monitoring and Controlling Database
Communication
There are a few ways you can monitor and control iFIX ODBC during runtime operation. Since you
can observe your process from an operator display, the procedures described in this chapter relate to
what you can do through display links:
• Changing Block Settings Through Links
• Transaction Tracking
51
Using SQL
52
Using SQL
Transaction Tracking
The following field parameters in the SQT block display information that can help you in debugging
your setup or help monitor real-time transactions:
• A_SEQ displays a transaction number indicating that the block has recognized an event.
Transaction numbers increment from 1 to 255.
• A_XTIME displays the time of the last transaction.
• A_XDATE displays the date of the last transaction.
• A_STATE displays the current operating state of each SQT block.
• A_DBERR displays the native database error number of the last SQL command executed.
• A_SQLST displays the SQL state of the last SQL command executed.
53
Displaying Alarm and Application
Messages
iFIX is capable of sending system-wide error, debug, and system messages relating to iFIX ODBC.
These alarm and trace messages can appear in the SQL task's window and in alarm destinations. Refer
to the following sections for more information:
• Displaying Alarms
• Displaying Process Messages
• Generating Status Reports
Displaying Alarms
The SQL blocks and the SQL task can be set up for independent alarm and security areas. System
messages that are displayed through Alarm Summary Display links provide you with real-time iFIX
ODBC information. The SQL blocks can generate unique alarms that you can monitor through an
Alarm Summary link or in other alarm destinations.
When building a display to monitor your SQL application, consider adding a Data link that connects to
the SQL Trigger block. This block has two alarm link parameters: current alarm (A_CUALM) and
latched alarm (A_LAALM). These link parameters display the alarms and block errors listed (by
priority) in the following table.
Alarm or Description
Block Error
SQL LOG An error occurred and the SQL application could not connect to the relational
database or you lost a connection.
SQL CMD An error occurred because the application could not find the SQL command
or the command was too long.
55
Using SQL
Alarm or Description
Block Error
DAT MATC An error occurred because the number of values in the SQL command does
not match the number of items in the SQL Data block.
Refer to the Implementing Alarms and Messages manual for more information on alarming.
Messages If...
appear in...
The SQL task The Error msg to screen check box or the Debug msg to screen check box is
window selected.
Alarm One or more alarm areas are enabled in either the Configure Alarm Areas - SQL
destinations Error Messages or SQL Debug Messages dialog box. You also need to enable the
required Alarm Services for these selected alarm areas.
Displaying Alarms
You can display SQL block alarms using the Alarm Summary Link. SQL alarms appear in this link if
the SQT block generates an alarm.
56
Using SQL
Status Description
Code
Alarm Indicates whether alarm messages are sent to the SQL task.
screen Yes = send messages; No = send no messages.
Debug Indicates whether debug messages are sent to the SQL task.
screen Yes = send messages; No = send no messages.
Sql cmd Name of the Database Identifier specified in the SCU's SQL Task Configuration.
dbid
Login delay Number of seconds to wait before attempting to login once a connection is lost.
The default is 300 seconds.
Current Identifies the status of the SQL task. This field can display whether the SQL task
status is logged onto one or several relational databases.
57
Using SQL
Status Description
Code
58
Backing Up and Restoring Data
During normal operation of iFIX ODBC, data communication takes place successfully across the
network as required by your application. Refer to the following sections for more details:
• Backing Up Data
• Restoring Back-up Data
Backing Up Data
If the SCADA node running iFIX ODBC loses a connection to the relational database, every INSERT,
UPDATE, and DELETE command that is enabled for backup is automatically sent to either a primary
or secondary back-up file.
In situations where the server connection is lost for long periods of time, iFIX ODBC backs up data
until the:
• Primary and secondary back-up paths (disks) are full.
• Connection to the server is re-established.
• SQL task is stopped by an operator.
IMPORTANT: iFIX ODBC does not back up a SELECT command's request because there is no
means of accurately determining when the connection to the server can be re-established. Since the
SELECT command writes values to the process database, the process of selecting must be performed
on a controlled and predictable basis (not whenever the connection is re-established).
59
Index
A accessing with VBA .................................... 10
alarming ............................................................ 55 configuring for iFIX ODBC ........................ 21
API, ODBC ........................................................ 7 configuring for VBA ................................... 10
architecture system .......................................................... 19
single tier ODBC ............................................ 6 user .............................................................. 19
typical ODBC ................................................. 5 verifying and editing .................................... 22
B database layer .................................................... 4
backing up SQL commands.............................. 59 DELETE command ......................................... 44
blocks displaying ODBC alarms ................................. 55
SQD block .................................................... 17 displaying ODBC messages ............................ 56
SQT block..................................................... 17 E
C editing ODBC data sources ............................. 22
caching ............................................................. 35 error handling for Microsoft Access ................ 25
client support ...................................................... 4 G
column data types generating status reports .................................. 57
supported by Microsoft Access .................... 24 I
supported by Oracle...................................... 31 iFIX ODBC
supported by SQL Server ............................. 27 communication process ............................... 17
command caching ............................................. 35 configuring for Access data sources ............ 22
configuring configuring for Oracle data sources ............. 29
ODBC data sources ...................................... 21 configuring for SQL Server data sources .... 25
SCU for ODBC data sources ........................ 22 displaying alarm messages .......................... 55
SQL Server client ......................................... 26 displaying application messages .................. 55
D displaying status .......................................... 57
DAO multiple relational database support ............ 18
definition of .................................................... 7 running as a service ..................................... 20
referencing DAO object library ...................... 7 setting up ..................................................... 18
using Jet .......................................................... 8 SQD block ................................................... 17
using ODBCDirect ......................................... 8 SQL task ...................................................... 17
Data Access Objects, See DAO .......................... 7 SQT block .................................................... 17
data sources INSERT command .......................................... 37
accessing with DAO ..................................... 10 J
accessing with RDO ..................................... 12 Jet....................................................................... 8
61
Using SQL
62
Index
what it does................................................... 17 T
WSQLODC.EXE.......................................... 33 transactions, tracking through SQT block ....... 53
SQT block U
alarms ........................................................... 55 UPDATE command ......................................... 38
field parameters ............................................ 53 user data sources .............................................. 19
triggering ...................................................... 51 V
status, viewing .................................................. 57 verifying ODBC data sources .......................... 22
stored procedures .............................................. 45 W
system data sources .......................................... 19 WSQLODC.EXE............................................. 33
63