null returned by decode is treated as empty string?

Discussion of open issues, suggestions and bugs regarding ODAC (Oracle Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
easyblue
Posts: 64
Joined: Wed 02 Feb 2005 13:02
Location: Shanghai

null returned by decode is treated as empty string?

Post by easyblue » Wed 09 Dec 2009 03:25

Hello

I am now extend my previous software which uses MyDAC into ODAC to have support for both MySQL and Oracle.

This software is running a query, and draw a line based on query result using TeeChart components.

Due to the different handling of divided by 0, I modified the query sent to TOraQuery as

decode(nvl(value1,0),0,null,value2/value1) as result

Its corresponding query in TMyQuery is simply as:

round(value2/value1, 8 ) as result

So in both cases, I expect a null value instead of a divide by 0 alarm.

I verified by a DBGrid, in both case, I can get null value from MySQL and Oracle, since the grid cell is empty.

Then when I using following code to draw a line by passing parameters
//--------------------------------------------
void __fastcall TMainForm::MakeLineSeries(TLineSeries* &Series,TCustomChart* ParentChart,
TCustomDADataSet* pQuery, AnsiString ValueName)
{
Series=new TLineSeries(ParentChart);
Series->ParentChart =ParentChart;
Series->DataSource =pQuery;
Series->TreatNulls =tnSkip;
switch (ServerMode) {
case 1:// mysql
Series->XLabelsSource="datetime";
break;
case 2: // oracle
Series->XLabelsSource="PERIOD_START_TIME";
break;
default:
;
}
Series->Marks->Style =smsValue;
Series->Marks->Visible =false;
Series->Pointer->Visible =true;
Series->Pointer->Style =psCircle;
Series->VertAxis =aRightAxis;
Series->YValues->ValueSource = ValueName;
Series->Title =ValueName;
Series->LinePen->Width =4;

}

//--------------------------------------------

Then I found that if I am using TMyQuery, there will be no problem that null value is not displayed.
But when I switch to TOraQuery, I got alarm of
""" is not a valid float point value".

It seems that

1. instead of a null value, TOraQuery returns an empty string?
2. Or I have something wrong in my decode function?

Plash
Devart Team
Posts: 2844
Joined: Wed 10 May 2006 07:09

Post by Plash » Thu 10 Dec 2009 09:22

Check DataType of the created field. Maybe you need to cast the value. For example:

Code: Select all

CAST(decode(nvl(value1,0),0,null,value2/value1) AS NUMBER) as result

Post Reply