Problem changing SQL in TOracleDataSet

dananiev

Member²
I am trying to change SQL in TOracleDataSet in runtime and it does not work with QBE. For example I have SQL
Select * from all_tables

I do QBE and TOracleDataSet changes SQL to

select * from all_tables
where (OWNER = 'SYS')

/* Modified for QBE */


Now in code I add new line,something like

Code:
q->SQL->Add( "Order by 3");
q->Refresh();
SQL:
select * from all_tables
where (OWNER = 'SYS')

/* Modified for QBE */
Order by 3


If now I do QBE searching for owner=
 
I found work around but may be there is easier way. Instead of what I showed above:

Code:
DataSet->SQL->Text = ReplaceSortOrder( DataSet->SQL->Text, OrderBy);
     DataSet->Refresh();
i used

Code:
if( DataSet->QBEModified)
    {
        //Saving QBE values in array of Variants
        Variant * v = new Variant[ DataSet->QBEDefinition->FieldCount];
        for( int i=0; i< DataSet->QBEDefinition->FieldCount; i++)
            v[i]=DataSet->QBEDefinition->Fields[i]->LastValue;
        // Remove QBE variabes from SQL
        DataSet->ClearQBE();
        DataSet->SQL->Text = ReplaceSortOrder( DataSet->SQL->Text, OrderBy);
        DataSet->QBEMode=true;
        //Restoring QBE Values
        for( int i=0; i<DataSet->Fields->Count; i++)
            if( !v[i].IsNull())
                DataSet->Fields->Fields[i]->Value = v[i];
        DataSet->ExecuteQBE();
        delete []v;
    } else
    {
        DataSet->QBEMode=true;
        DataSet->SQL->Text = ReplaceSortOrder( DataSet->SQL->Text, OrderBy);
        DataSet->ExecuteQBE();
    }
 
Back
Top