Subject Re: Data module with a complex index
From Akshat Kapoor <akshat.kapoor@kapoorsons.in>
Date Sat, 7 Dec 2019 13:21:51 +0530
Newsgroups dbase.getting-started
Attachment(s) datamodule.txt

On 07-12-2019 02:00, Robbie Nott wrote:
> Hi Akshat
> Many thanks for your help
>
> Show
> Cat
> Ring
>
> It's the query on the Ring table that has me confused...
> I'm hoping to use the cool "params" that you so kindly taught me in the
> data module.
>
> Just not sure how to get these into the query because they come from the
> other 2 tables
>
> FormRef.qRing.Sql = "Select * from Ring where ShowNo = :nShowNo and
> CatNo = :nCatNo order by RingNo"
>
> FormRef.qRing.Params["nShowNo"] = FormRef.qShow.Fields["ShowNo"].Value
> FormRef.qRing.Params["nCatNo"] = FormRef.qCat.Fields["CatNo"].Value
>
> Thanks for your assistance

Good Afternoon Robbie,
Please find attached herewith datamodule.txt in which I have copied and
pasted 1 of the queries of my datamodule.

I am using ADO hence the syntax for declaring params is slightly different.
I have to use params[].value
In local tables you will be using
params[] = ""
Another difference would be the use of dtos() for dates.

But if you ignore the differences the way of coding will remain the same.

Now coming to main explanation

I have assigned some value to the params. The main concern here is that
value is of the correct type. Hence used date() for date.

In the form I have Refresh data button. User just has to change the
concerned entryfields/combobox and press the refresh data button.
The code for refresh data button is also attached.

In the form the param values are changed and requery is issued. The data
in rowset / grid is refreshed.


I hope this helps.

Regards
Akshat

In the data



class dlsalesDATAMODULE of DATAMODULE
   this.SALES = new ADOQUERY(this)
   with (this.SALES)
      left = 2.0
      top = 2.0
                database = mcompany.adodb
                sql = 'Select sales.* , sales.qty* sales.rate - sales.misc as amount, if(sales.mast<0,100,10) as order_col from sales19 sales WHERE ddate = :dldate AND locat = :locat AND mast <>0 ORDER BY invoice_no ,order_col'
                params["dldate"].value=dtos(date())
                params["locat"].value="0"
                requestlive = false
      active = true
   endwith


The above portion is code from Datamodule.
And below is the code from the form where the datamodule is being used.
If is part of Refresh Data button onClick event


         form.dlsalesdatamodule1.sales.params["dldate"].value         = dtos(form.dl_date.value)
         form.mdl_date = form.dl_date.value
         do case
            case lower(form.location.value) = "head office"
               form.dlsalesdatamodule1.sales.params["locat"].value= "0"
               form.mdl_locat = "0"
            case form.location.value = alltrim(mcompany.go1)
               form.dlsalesdatamodule1.sales.params["locat"].value= "1"
               form.mdl_locat = "1"
            case form.location.value = alltrim(mcompany.go2)
               form.dlsalesdatamodule1.sales.params["locat"].value= "2"                
               form.mdl_locat = "2"
         endcase
         form.dlsalesdatamodule1.sales.requery()