SQL open Query error when no data available

Hi all,

I have database that content prices during a year. Im using SQL to find the max and min value in a defined range of date from my database.

my problem is :

for example the file for year 2003 is not completed yet (only until november). When I run the program to find the max and min value for December, the program will be error when the SQL is opened because the prices data is empty.

How to indicate that the SQL doesn't find the value for tha max and min value before I openned the SQL, so that the error wont happened ?

I tried to used : if Query1.IsEmpty = true then ShowMessage(bla bla ..);

 but it doesn't work. The program will also show me the message if I choose another date range... even if the data is available (for example : if I choose March, it will show me the message also)

ps: I dont want to put zero as my defalut value in my database, because later the result for my min. value is always zero where else the price never goes to zero

ok that's all I want to ask... thank youuu ^^
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

what database?
how shows your select?
Hi, allie109!

Try to use (query1.recordCount = 0) instead of use query1.IsEmpty...
for example:

procedure Tform1.findExtremePrices;
  with Query1 do
    Sql.text := 'SELECT max(price) AS MAXPRICE FROM priceTable WHERE......
    if (RecordCount = 0) then ShowMessage('bla bla bla')...


allie109Author Commented:
hi hederglan...
I tried taht way also... but it will give me another error.... because the recordcount cannot be done before the dataset is open..

Kretzschmar.. this is how I open the dataset :

QueryMaxMin.SQL.Add('Select MIN(' + Curr[k] + ') AS ' + Curr[k]+'min, MAX(' + Curr[k]
            + ') AS ' + Curr[k]+'max FROM ' + TableGraph.TableName + ' WHERE DateRec
            BETWEEN "' + DateToStr(FDay[i]) + '" AND "' + DateToStr(LDay[i]) + '"');


the error happened when I oppened the query

It tried to put :
    if QueryMaxMin.IsEmpty = true then showmessage('bla bla...');
but the message will also shown when the database is available

I tried to put :
    if (RecordCount = 0) then ShowMessage('bla bla bla');

it wont work cos' the recordcount cannot be done in a closed dataset

hummm... anyone got the solution...? =s

thank you ^^

JavaScript Best Practices

Save hours in development time and avoid common mistakes by learning the best practices to use for JavaScript.

Hi again, allie109!

What I'm saying is to use QueryMaxMin.RecordCount = 0 after open the query...
Your code would look like:
if QueryMaxMin.RecordCount = 0 then ShowMessage(bla bla)...

With the dataset opened it will work without problems...


a select with only aggregate-functions is never empty,
but the fieldvalues may be NULL,
which may cause your problem

meikl ;-)

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
allie109Author Commented:
Hi Hederglan,

I tried that way too...
if QueryMaxMin.RecordCount = 0 then ShowMessage(bla bla)...

but It give me error just BEFORE the Query open....

humm... how any solution..?? =s

thankssss ^^
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.