Managing Connections with SQL Pass-Through
When you create a remote view, you choose an ODBC data source name or a connection name that is then used as a pipeline to the remote server upon activation of the view. To access remote data directly with SQL pass-through, you must have the handle for an active connection. A handle is a value that refers to an object; in this case, the handle refers to a data source connection. To obtain a handle, you request a connection to the data source using the SQLCONNECT( ) or SQLSTRINGCONNECT( ) function. If the connection is successful, your application receives a connection handle for use in subsequent Visual FoxPro calls.
Your application can request multiple connections for one data source. You can also work with multiple ODBC data sources by requesting a connection to each data source you want to access. If you want to reduce the number of connections used, you can configure remote views to share the same connection. You disconnect from a data source with the SQLDISCONNECT( ) function.
Tip
Visual FoxPro relies on the definition of the ODBC data source that is stored in Windows to connect to a data source. If you change the name or the logon information for a data source, keep in mind that these changes might affect whether an application using that data source can connect to the desired remote server.
Controlling Environment and Connection Properties
The client/server environment is established each time you open Visual FoxPro. The environment exists for that session of Visual FoxPro and disappears when you close Visual FoxPro. The client/server environment contains:
Global properties that act as the prototypes for new connections.
Error values for errors that occur outside a specific connection.
You can use a handle of 0, the environment handle, to refer to global property settings. You use the SQLSETPROP( ) function to control default property settings in the connection environment and properties within individual connections. The methods you use for entering SQLSETPROP( ) values are consistent for both the environment and individual connections:
Properties specified with one of two values can use a logical value (.F. or .T.) for eExpression.
A property name can be abbreviated to its shortest unambiguous truncation. For example, you can use "Asynchronous", "Asynch", or "A" to specify the Asynchronous property. Property names aren't case-sensitive.
When you initiate a connection, the connection inherits default connection property values. You can use SQLSETPROP( ) to change these values.
Setting Connection Properties
To view the current settings for a connection, use the SQLGETPROP( ) function with the respective connection handle. The following table lists the connection settings you can access with SQLGETPROP( ).
Visual FoxPro Connection Properties
To |
Use this setting |
Purpose |
---|---|---|
Display the information used to create the active connection |
ConnectString |
The login connection string. |
|
DataSource |
The name of the data source as defined by ODBC. |
|
Password |
The connection password. |
|
UserID |
The user identification. |
Work with shared connections |
ConnectBusy |
True (.T.) if a shared connection is busy; false (.F.) otherwise. |
Control interface display |
DispLogin |
Controls when the ODBC Login dialog box is displayed. |
|
DispWarnings |
Controls whether non-fatal warning messages are displayed or not. |
Control time intervals |
ConnectTimeout |
Specifies the time (in seconds) to wait before returning a connection time-out error. |
|
IdleTimeout |
Specifies the idle time-out interval (in seconds). Qualifying active connections are deactivated after the specified time interval.1 |
|
WaitTime |
Controls the amount of time in milliseconds that elapses before Visual FoxPro checks whether the SQL statement has completed executing. |
|
QueryTimeout |
Controls the time (in seconds) to wait before returning a general time-out error. |
Manage transactions |
Transactions |
Determines how the connection manages transactions on the remote table. |
Control fetching of result sets into view cursors |
Asynchronous |
Specifies if result sets are returned synchronously (the default) or asynchronously. |
|
BatchMode |
Specifies if SQLEXEC( ) returns result sets all at once (the default), or individually with SQLMORERESULTS( ). |
|
PacketSize |
Specifies the size of the network packet used by the connection. |
Display internal ODBC handles |
ODBChdbc2 |
The internal ODBC connection handle that can be used by external library files (.fll files) to call the ODBC API functions. |
|
ODBChstmt2 |
The internal ODBC statement handle that can be used by external library files (.fll files) to call the ODBC API functions. |
1. If in manual transaction mode, the connection is not deactivated.
2. If a connection is deactivated, the ODBChdbc and ODBChstmt values are no longer valid. Do not free or drop these values in a user library.
For more information on connection properties and their default settings, see SQLSETPROP( ).
Controlling Environment Property Settings
The values you set in the Visual FoxPro environment using handle 0 are used as prototypes or default values for each subsequent connection or attachment.
To view the current environment property settings, use SQLGETPROP( ) with 0 as the value for the handle.
The following example displays the current environment's WaitTime property setting:
? SQLGETPROP(0, "WaitTime")
If you set the DispWarnings property to true (.T.), Visual FoxPro displays any environment errors from that point on, and also sets DispWarnings to true (.T.) for newly created connections.
Although the values you set for handle 0 are used as prototype values for each connection, you can also set custom properties for an individual connection by issuing SQLSETPROP( ) for that connection handle. The exceptions are the ConnectTimeout, PacketSize, and DispLogin properties, whose settings the connection inherits at connect time. If you change the setting of the ConnectTimeout, PacketSize, or DispLogin property, the new setting isn't used until you reconnect.
Controlling Connection and View Objects
You can control connections and views by setting properties on the connection or view object. Properties that control databases, tables, table fields, view definitions, view fields, named connections, active connections, or active view cursors are called engine properties. You can display or set engine properties with one of the following Visual FoxPro functions:
To display engine properties use |
To set engine properties use |
---|---|
The function you use depends on whether you want to set properties on object 0 (connection 0 and cursor 0), the object definition in a database (named connection or view definition), or the active object (active connection or active view cursor). The following table lists objects and the functions you use to set properties on each object:
To set properties for |
Connection |
View |
---|---|---|
Object 0 |
||
Object definition in a database |
||
Active object |
Engine Properties
The following diagram lists engine properties alphabetically along with the objects that use each property.
The following table lists engine properties alphabetically along with the functions you can use to set those properties.
Engine property |
Applies to |
---|---|
Asynchronous |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
BatchMode |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
BatchUpdateCount1 |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
Buffering |
Active view cursors: see CURSORSETPROP( ). |
Caption |
Fields in tables, fields in view definitions: see DBSETPROP( ). |
Comment |
Databases, tables, fields in tables, view definitions, fields in view definitions, connection definitions: see DBSETPROP( ). |
CompareMemo |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
ConnectBusy |
Active connections: see SQLGETPROP( ). |
ConnectHandle |
Active view cursors: see CURSORGETPROP( ). |
ConnectName1 |
View definitions: see DBSETPROP( ). Active connections: see SQLGETPROP( ). Active view cursors: see CURSORGETPROP( ). |
ConnectString |
Connection definitions: see DBSETPROP( ). Active connections: see SQLGETPROP( ). |
ConnectTimeout |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
Database |
Active view cursors: see CURSORGETPROP( ). |
DataSource |
Connection definitions: see DBSETPROP( ). Active connections: see SQLGETPROP( ). |
DataType |
Fields in view definitions: see DBSETPROP( ). |
DefaultValue |
Fields in tables, fields in view definitions: see DBSETPROP( ). |
DeleteTrigger |
Tables: see DBGETPROP( ). |
DispLogin |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
DispWarnings |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
FetchAsNeeded |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORGETPROP( ). |
FetchMemo1 |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORGETPROP( ). |
FetchSize1 |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
IdleTimeout |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
InsertTrigger |
Tables: see DBGETPROP( ). |
KeyField |
Fields in view definitions: see DBSETPROP( ). |
KeyFieldList2 |
Active view cursors: see CURSORSETPROP( ). |
MaxRecords1 |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
ODBCHdbc |
Active connections: see SQLGETPROP( ). |
ODBCHstmt |
Active connections: see SQLGETPROP( ). |
Offline |
View definitions: see DBGETPROP( ). |
PacketSize |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
ParameterList |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
Password |
Connection definitions: see DBSETPROP( ). Active connections: see SQLGETPROP( ). |
Path |
Tables: see DBGETPROP( ). |
Prepared |
View definitions: see DBSETPROP( ). |
PrimaryKey |
Tables: see DBGETPROP( ). |
QueryTimeout |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
RuleExpression |
Tables, fields in tables, view definitions, fields in view definitions: see DBSETPROP( ). |
RuleText |
Tables, fields in tables, view definitions, fields in view definitions: see DBSETPROP( ). |
SendUpdates2 |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
ShareConnection |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORGETPROP( ). |
SourceName |
Active view cursors: see CURSORGETPROP( ). |
SourceType |
View definitions: see DBGETPROP( ). Active view cursors: see CURSORGETPROP( ). |
SQL |
View definitions: see DBGETPROP( ). Active view cursors: see CURSORGETPROP( ). |
Tables2 |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
Transactions |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
Updatable |
Fields in view definitions: see DBSETPROP( ). |
UpdatableFieldList2 |
Active view cursors: see CURSORSETPROP( ). |
UpdateName |
Fields in view definitions: see DBSETPROP( ). |
UpdateNameList2 |
Active view cursors: see CURSORSETPROP( ). |
UpdateTrigger |
Tables: see DBGETPROP( ). |
UpdateType |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
UseMemoSize1 |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORGETPROP( ). |
UserID |
Connection definitions: see DBSETPROP( ). Active connections: see SQLGETPROP( ). |
Version |
Databases: see DBGETPROP( ). |
WaitTime |
Connection definitions: see DBSETPROP( ). Active connections: see SQLSETPROP( ). |
WhereType |
View definitions: see DBSETPROP( ). Active view cursors: see CURSORSETPROP( ). |
1. Property primarily useful for remote views; setting has no effect on performance of local views. You can set this property on local views if you want to pre-set the property on the local view and then upsize later to create a remote view.
2. Property must be set for updates to be sent to remote data source.
Using Transactions with Remote Data
You can wrap transactions around updates, deletes, and inserts to remote data using one of two methods:
Automatic transaction mode
Manual transaction mode
The transaction mode you select determines how Visual FoxPro handles transactions on your local machine.
Nested Transactions
Visual FoxPro supports transactions nested up to five levels for local data. A single level of transaction support is built into SQL pass-through.
If your server supports multiple levels of transactions, you can use SQL pass-through to manage transaction levels explicitly. Explicit transaction management is complex, however, because it can be difficult to control the interaction between the built-in transaction and the timing of remote server transactions. For more information on explicit transaction management, see your ODBC documentation.
See Also
Tasks
How to: Use Automatic Transaction Mode
Reference
Execution of ODBC Extensions to SQL
Other Resources
Using SQL Pass-Through Technology
Enhancing Applications Using SQL Pass-Through Technology
Planning Client/Server Applications