- SQLCol and SQLGetCol functions: different types of browse
- Current line in the query
- Query without result
- Using tabulations in the items
- Retrieving Float items on Oracle (via ODBC)
- Managing spaces at the end of text items
In french: SQLCol
Retrieves the content of the specified column from the query result, for the current line.
: This function must be used during a SQLFirst/SQLCol
browse of the query result. See Types of SQL browse
for more details.
ResExec = SQLExec("SELECT CUSTNAME FROM INVOICE", "QRY1")
IF ResExec = True THEN
// Transfer the name into LIST_NAME
WHILE NOT SQL.Out
ListAdd(LIST_NAME, SQLCol("QRY1", 1))
<Result> = SQLCol(<Query name> , <Column number>)
<Result>: Character string
Value of the column.
<Query name>: Character string (with or without quotes)
- created and run by SQLExec (with quotes),
- run by SQLExecWDR (with or without quotes).
<Column number>: Integer
Number of the column to retrieve. This column corresponds to a query column (and not to a table column). The order of the numbers for the columns to retrieve is not important.
SQLCol and SQLGetCol functions: different types of browse
are equivalent during an OLE DB or HFSQL access. However, you must respect the type of browse associated with each one of these functions:
- SQLCol: "SQLFirst/SQLCol" browse.
- SQLGetCol: "SQLFetch/SQLGetCol" browse.
Remark: From version 19, HFSQL is the new name of HyperFileSQL.
Current line in the query
SQLCol must not be called if the query returned no result: the test of the SQL.Out variable must be run when you are positioned in the query result and before you call SQLCol.
// Retrieve the value of the 1st column for the 1st record
Value is string
QueryText is string
QueryText = "SELECT CUSTNAME, ADDR1, ADDR2, CITY, ZIP FROM INV"
Value = SQLCol("QRY1", 1)
Using tabulations in the items
The SQL functions are used to insert tabulations into the file items. The management of tabulations depends on the access mode used.
1st case: Running a query in ODBC:
- When running a query in ODBC, the tabulations are not retrieved by SQLCol. To retrieve the value of items (with TAB characters), we recommend that you use a SQLFetch/SQLGetCol browse.
- When running a query in ODBC, the space characters found at the end of the value of items are removed. To keep all the space characters, we recommend that you use a SQLFetch/SQLGetCol browse.
Example: SQLAssociate and the tabulations in the items
The items of the records to retrieve are as follows:
|Item 1||Item 2|
|Record 2||John + tab + Mac||Doughnut|
For the first record:
- SQLCol(Qry1, 1): retrieves John
- SQLCol(Qry1, 2): retrieves Smith
For the second record:
- SQLCol(QRY,1 ): retrieves John
- SQLCol(QRY, 2): retrieves Mac, but Mac does not correspond to the value of the second item
- SQLCol(QRY, 3): retrieves Doughnut, value of the second item
2nd case: Running a query via OLEDB, HFSQL or Native Connector
The tabulations found in the result items are automatically retrieved by SQLCol.
Retrieving Float items on Oracle (via ODBC)
By default, the decimal separator used for the Float items on Oracle is the dot. However, the ODBC driver returns the value by using the comma as decimal separator. The decimal places are lost when the value is assigned to a numeric control.
To avoid this problem, you must configure the decimal separator for the current connection:
// Connection to the Oracle database
SQLConnect("MyOracleDatabase", "User", "Pass", "", "ODBC")
// Request for changing the decimal separator
SQLExec("ALTER SESSION SET NLS_NUMERIC_CHARACTERS ='. '", "TempQry")
Managing spaces at the end of text items
The management of spaces at the end of the retrieved items depends on the access mode used:
- Native Connectors for SQLServer, ORACLE, AS400, SyBase; and access to HFSQL Client/Server or HFSQL Classic data: spaces at the end of the item are automatically removed.
- Native Connectors for Access, MySQl, MariaDB, Informix, DB2, Progress, PostgreSQL, SQLite, ODBC or OleDB: the spaces at the end of the item are kept.
: In order not to keep the spaces on the right in all cases, it is possible to override the function by declaring a global procedure:
PROCEDURE SQLCol(source, index)
RESULT NoSpace(WL.SQLCol(source, index), sscRight)
This page is also available for…