Problems pulling Decimals from SQL to Progress

Earlt

New Member
I have been using the ADO connection and am having trouble pulling fields that as defined as DECIMAL into Progress. All I seem to receive is a ? for the value. Listed below is my sample code. I have tried formating the "price" field and not formating it. Nothing seems to work.

DEFINE VARIABLE ObjRecordset AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE ObjConnection AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE ObjCommand AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE ODBC-Dsn AS CHARACTER NO-UNDO.
DEFINE VARIABLE ODBC-Server AS CHARACTER NO-UNDO.
DEFINE VARIABLE ODBC-Userid AS CHARACTER NO-UNDO.
DEFINE VARIABLE ODBC-Passwd AS CHARACTER NO-UNDO.
DEFINE VARIABLE ODBC-Query AS CHARACTER NO-UNDO.
DEFINE VARIABLE ODBC-Status AS CHARACTER NO-UNDO.
DEFINE VARIABLE ODBC-Reccount AS INTEGER NO-UNDO.
DEFINE VARIABLE ODBC-Null AS CHARACTER NO-UNDO.
DEFINE VARIABLE ODBC-Cursor AS INTEGER NO-UNDO.
DEFINE TEMP-TABLE tt
FIELD order-num AS INTEGER FORMAT ">>>>>"
FIELD part-num AS character FORMAT "X(12)"
FIELD price AS DECIMAL
FIELD ware-no AS character FORMAT "X(2)".

DEFINE QUERY q1 FOR tt SCROLLING.
DEFINE BROWSE b1 QUERY q1 NO-LOCK
DISPLAY order-num price part-num
WITH NO-ROW-MARKERS SEPARATORS SIZE 70 BY 12.62 EXPANDABLE.
DEFINE FRAME f1 b1 WITH NO-BOX.
Create "ADODB.Connection" ObjConnection.
Create "ADODB.RecordSet" ObjRecordSet.
Create "ADODB.Command" ObjCommand.
{R:\WEB\WARE.I}
ASSIGN ODBC-QUERY = "SELECT order_num,part_num,price,ware_no FROM linord".
/* Open up the connection to the ODBC Layer */
ObjConnection:Open ( "data source=" + ODBC-DSN + ";server=" + ODBC-SERVER, ODBC-USERID, ODBC-PASSWD, 0 ) no-error.
/* Check for connection errors */
If ( error-status:num-messages > 0 ) then
ODBC-STATUS = "Error: Could not establish connection.".
Else
DO:
Assign ObjCommand:ActiveConnection = ObjConnection
ObjCommand:CommandText = ODBC-QUERY
ObjCommand:CommandType = 1 /* adCmdText */
ObjConnection:CursorLocation = 3 /* adUseClient */
ObjRecordSet:CursorType = 3 /* adOpenStatic */
ObjRecordSet = ObjCommand:Execute ( OUTPUT ODBC-NULL, "", 32 )
ODBC-RECCOUNT = ObjRecordSet:RecordCount.
/* Have we returned any rows ? */
If ( ODBC-RECCOUNT > 0 ) and not ( ODBC-RECCOUNT = ? ) then
Do:
ObjRecordSet:MoveFirst no-error.
Do while ODBC-CURSOR < ODBC-RECCOUNT:
/* Display the data from the query (or create a Progress temp-table for future use) */
/* Display ObjRecordSet:Fields ("name"):Value format "x(20)". */
CREATE tt.
ASSIGN tt.order-num = ObjRecordSet:Fields ("order_num"):Value
tt.part-num = ObjRecordSet:Fields ("part_num"):Value
tt.price = ObjRecordSet:FIELDS ("price"):VALUE.
tt.ware-no = ObjRecordSet:Fields ("ware_no"):VALUE.

Assign ODBC-CURSOR = ODBC-CURSOR + 1.
ObjRecordSet:MoveNext no-error.
End. /* retrieved a single data row */
End. /* retrieved all data rows */
Else
Assign ODBC-STATUS = "No records found.".
/* Close the ADO connection */
ObjConnection:Close no-error.
End. /* The connection opened correctly */

/* Don't forget to release the memory!! */
Release object ObjConnection no-error.
Release object ObjCommand no-error.
Release object ObjRecordSet no-error.
Assign ObjConnection = ? ObjCommand = ? ObjRecordSet = ?.
OPEN QUERY q1 FOR EACH tt.
ENABLE ALL WITH FRAME f1.
WAIT-FOR WINDOW-CLOSE OF CURRENT-WINDOW.


 

Stefan

Well-Known Member
Using the above code but adapted to our g/l transaction table grabs decimals just fine.

Using 10.2B05 and SQL Server 2005.

Possibly something regional settings related?
 
Top