Solved

TQuery en Quickreport

Posted on 2004-08-14
23
719 Views
Last Modified: 2013-11-22
Hi
I Have a problem I would likte to have solved ASAP.

I Have 4 databases

A.DB connected to B.DB by Factuurnummer
B.DB connected to C.DB by ArtikelID
D.DB connected to A.DB by factuurnummer
Quickreport: rbPageheader, rbColumnheader, QRGroup  groupexpression: ArtikelID , rbDetail, rbSummary, rbPagefooter.

I can get the data from A, B and C in QRGroup and rbDetail, but I cannot get the data from D , this by using a query.

Can this be done, and which bands do I have to use, Datasource - dataset properties of the QR, and the structure of the query

thx
marioway
0
Comment
Question by:marioway
  • 16
  • 7
23 Comments
 
LVL 12

Expert Comment

by:esoftbg
ID: 11801985
I could try to help, but above explanation is not enough for me. If I try to create the tables in my opinion it would be very wrong and slow. So if you can share your tables and/or some Delphi code, i will try to help, otherwise this makes no sense at all ....
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11801990
I could help on Paradox, InterBase / FireBird or MS Access database ....
0
 

Author Comment

by:marioway
ID: 11803562
Hello ,
I'll give you the relevant fields and names of the databases, for an Invoice program I'm writing

A : Factuur.db: factuurnummer1 (string), factuurklant (string), factuurstraat(string),....
B: Factuurartikel.db: factnr (string), omschrijving (string), ArtikelID (integer),...
C: Artikelgebruik.db: ArtikelID (integer), gebruiksaanwijzing (string),...
D: BTWS.db: factuurnummer1 (string), bedragexclbtw (Float), bedraginclusiefbtw (Float), bedragbtw (Float)

What's happening: when I print an invoice, I get the data from these 4 databases

First I want the articles out of the Factuurartikel.db, and for each article the description of it out of the artikelgebruik.db, and then the totals of each TVA % at the bottom of the quickreport (these are in the BTWS.db, which is emptyed bij close the form = temporary database).

Query.text:=  SELECT Factuur.Factuurnummer1, Factuur.Factuurnummer2, Factuur.Factuurklant, Factuur.Factuurstraat, Factuur.Factuurhuisnummer, Factuur.Factuurgemeente, Factuur.Factuurpostcode, Factuur.Factuurdatum, Factuur.Bedragbtw6, Factuur.Bedragtotaal, Factuur.Bedragexclbtw6, Factuur.Factuurbtwnummer, Factuur.Bedragbtw21, Factuur.Bedragexclbtw21, Factuur.Btw6, Factuur.Btw21, Factuur.Bedragtotaal6, Factuur.Bedragtotaal21, Factuur.Voldaan, Factuur.Btw0, Factuur.Btw1, Factuur.Btw12, Factuur.Bedragtotaal0, Factuur.Bedragtotaal1, Factuur.Bedragtotaal12, Factuur.Bedragbtw0, Factuur.Bedragbtw1, Factuur.Bedragbtw12, Factuur.Bedragexclbtw0, Factuur.Bedragexclbtw1, Factuur.Bedragexclbtw12, Factuur.Bedragtotaalexclbtw, Factuur.Jaar, Factuur.Kortingpercent, Factuur.KlantID, Factuur.Btwtotaal, Factuurartikel.Nummer, Factuurartikel.Nummer1, Factuurartikel.Omschrijving, Factuurartikel.Aantal, Factuurartikel.Code, Factuurartikel.Stukprijs, Factuurartikel.Btw, Factuurartikel.Prijsexclbtw, Factuurartikel.Prijsinclusiefbtw, Factuurartikel.Factnr, Factuurartikel.Datumverkoop, Factuurartikel.KlantID, Factuurartikel.ArtikelID, Factuurartikel.ArtikelgroepID, Factuurartikel.Eenheidsmaat, Artikelgebruik.Nummer, Artikelgebruik.ArtikelID, Artikelgebruik.Gebruiksaanwijzing, Artikelgebruik.Ikoon, Artikelgebruik.ArtikelgroepID, Btws.Btw, Btws.Bedragexclbtw, Btws.Bedragbtw, Btws.Bedraginclusiefbtw, Btws.Factuurnummer1
FROM "Factuur.DB" Factuur
   INNER JOIN "factuurartikel.DB" Factuurartikel
   ON  (Factuur.Factuurnummer1 = Factuurartikel.Factnr)  
   INNER JOIN "BTWS.DB" Btws
   ON  (Factuur.Factuurnummer1 = Btws.Factuurnummer1)  
   INNER JOIN "Artikelgebruik.DB" Artikelgebruik
   ON  (Factuurartikel.ArtikelID = Artikelgebruik.ArtikelID)
WHERE (Factuur.Factuurnummer1 = :koppel)
 // params[0].AsString:= Factuur.Factuurnummer1.Value

So, I need to print out: Articles out of het factuurartikel.db, and for each article, the description out of the Artikelgebruik.db
using QRGroup and rbdetail band. Groupexpression: ArtikelID. What I want now is the data for the different TVA% out of the BTWS.db and print this at the bottom of the report once and not for each article.

Hope You have enough information

thx
marioway



0
 

Author Comment

by:marioway
ID: 11803628
Hi, I discovered another problem when I use that query: if in BTWS.db more then one record, I get in the quickreport 2 times the articles out of the factuurartikel.db and the Artikelgebruik.db. So I could use 2 query's

Query1: SELECT Factuur.Factuurnummer1, Factuur.Factuurnummer2, Factuur.Factuurklant, Factuur.Factuurstraat, Factuur.Factuurhuisnummer, Factuur.Factuurgemeente, Factuur.Factuurpostcode, Factuur.Factuurdatum, Factuur.Bedragbtw6, Factuur.Bedragtotaal, Factuur.Bedragexclbtw6, Factuur.Factuurbtwnummer, Factuur.Bedragbtw21, Factuur.Bedragexclbtw21, Factuur.Btw6, Factuur.Btw21, Factuur.Bedragtotaal6, Factuur.Bedragtotaal21, Factuur.Voldaan, Factuur.Btw0, Factuur.Btw1, Factuur.Btw12, Factuur.Bedragtotaal0, Factuur.Bedragtotaal1, Factuur.Bedragtotaal12, Factuur.Bedragbtw0, Factuur.Bedragbtw1, Factuur.Bedragbtw12, Factuur.Bedragexclbtw0, Factuur.Bedragexclbtw1, Factuur.Bedragexclbtw12, Factuur.Bedragtotaalexclbtw, Factuur.Jaar, Factuur.Kortingpercent, Factuur.KlantID, Factuur.Btwtotaal, Factuurartikel.Nummer, Factuurartikel.Nummer1, Factuurartikel.Omschrijving, Factuurartikel.Aantal, Factuurartikel.Code, Factuurartikel.Stukprijs, Factuurartikel.Btw, Factuurartikel.Prijsexclbtw, Factuurartikel.Prijsinclusiefbtw, Factuurartikel.Factnr, Factuurartikel.Datumverkoop, Factuurartikel.KlantID, Factuurartikel.ArtikelID, Factuurartikel.ArtikelgroepID, Factuurartikel.Eenheidsmaat, Artikelgebruik.Nummer, Artikelgebruik.ArtikelID, Artikelgebruik.Gebruiksaanwijzing, Artikelgebruik.Ikoon, Artikelgebruik.ArtikelgroepID
FROM "Factuur.DB" Factuur
   INNER JOIN "factuurartikel.DB" Factuurartikel
   ON  (Factuur.Factuurnummer1 = Factuurartikel.Factnr)  
   INNER JOIN "Artikelgebruik.DB" Artikelgebruik
   ON  (Factuurartikel.ArtikelID = Artikelgebruik.ArtikelID)
WHERE (Factuur.Factuurnummer1 = :koppel)

and Query2: SELECT Factuur.Factuurnummer1, Btws.Factuurnummer1, Btws.Btw, Btws.Bedragexclbtw, Btws.Bedragbtw, Btws.Bedraginclusiefbtw
FROM "Factuur.DB" Factuur, "BTWS.DB" Btws
WHERE (Factuur.Factuurnummer1 = :koppel1)

But I do not know how to get the data from Query2 in the quickreport.

Marioway

0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11803686
Could you copy the database files into a directory, then compress that directory with winzip and send the .zip file at
esoftbg_e_e@yahoo.com
This way I will spend less time to create the tables and to fill them with data, if they are not a secret ofcourse ....
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11803733
Thanks
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11803872
Please send the password for the tables by e-mail
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11803921
Or remove the passwords from the tables and send unprotected tables again ....
0
 

Author Comment

by:marioway
ID: 11804970
Excuse me, I forgot

the password is "correct"

thx

marioway
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11805087
Ok, thanks
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11805210
I have an exception:
Table does not exist Artikelgebruik.DB
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 12

Expert Comment

by:esoftbg
ID: 11805445
I am very tired .... I'll be back tomorrow ....
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11806936
Could you send me the table Artikelgebruik.DB in zip format because :
  ....
  INNER JOIN "Artikelgebruik.DB" Artikelgebruik
  ON  (Factuurartikel.ArtikelID = Artikelgebruik.ArtikelID)
   ....
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11812167
Dear marioway,
please tell me which field into the table factuurartikel.DB contains info about the quantity of the article ?
And which price to be shown by the Invoice Prijsexclbtw or Prijsinclusiefbtw ?
0
 

Author Comment

by:marioway
ID: 11814223
Hi, I 'll try to explain to You what I am doing through the program. It's easier to speak Dutch, then writing in English.
First: selecting an article from an article database --> appending a record to a temp.db ---> aantal = quantity , stukprijs =
price per piece, BTW% = VAT%, Prijsexclusiefbtw = price excl VAT, Prijsinclbtw = Price incl VAT.
After all records are added to the temp.db I run some query's on it, this to select the sum of prices excl VAT, prices incl VAT,
VAT (= incl - excl), and this per percent VAT. The result of each query I add to the BTWS.db. If a query.recordcount > 0 a record is added to BTWS, otherwhise not. So I could have for instance 2 records in BTWS: one for 6 % VAT, one for 12 % VAT. (In Belgium we have 5 different VAT % : 0 - 1 - 6 - 12 - and 21 %). So the results in the BTWS.db should be at the bottom of the Quickreport. After this I use a batchmove to move the data from the temp.db into the factuurartikel.db. The QR looks as follows:

- a pageheader --> data from the factuur.db (factuurnummer1, klantnaam,...)
- a columnheader ( to display what data can be found in the groupheader band)
- a groupheader --> articles sold
- detailband --> data from the artikelgebruik.db (explanation on how to use the article)
- a summary band --> at this moment I use the data out of the factuur.db to put into the QRDBText's --> so for each % VAT
 I have a fixed line, printed out, even if no produkt has been sold with that % VAT. So each time 5 lines.
- a pagefooterband (general info )

What I would like is that only the data in the BTWS.db are printed out, instead of always 5 fixed lines (1 per % VAT and the datasource of each QRDBText in the summary band is now coming out of the factuur.db)

Well, I Hope You understand what I mean. It's not easy, I know.

thx alot
Marioway


0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11814597
I just sent to you a Beta.0 version of the project
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11814946
It must to be replaced method in the Beta.0 version :

procedure TFormFactuur.FormCreate(Sender: TObject);
var
  S:      string;
begin
  DB.Connected := False;
  S := ExtractFilePath(Application.ExeName);
  DB.Params.Values['PATH'] := S;
  DB.Connected := True;
  qryFactuur.Active := True;
end;
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11835958
I sent to you a Beta.1 version of the project .... No responce from you ....
0
 

Author Comment

by:marioway
ID: 11838329
Hi, I've taken a look at the Beta1 you sent me. Still the same problem. I can get ALL the lines at the bottom of the report (in the summary band), but what I really want is that when for instance 2 products are sold , 1 with 6 % VAT, the other 12 % VAT, only these lines should appear in the summary, instead of 0 %, 1 %, 6 %, 12 % and 21 %. These results I get from the BTWS.db (there I put the results from several query's (5 in total) --> select ...sum()  from temp.db where btw = 0, then 1, ..., If the query is not empty--> appending result to BTWS.db (which is emptyed at the end, after printing the report). If a query is empty, the result is not appended to BTWS. So most of the time only one or two records are in the BTWS.db, instead of 5.  But how can I print out in the summary band only the results out of the BTWS.db instead of printing out every time the 5 VAT % .

Sorry for the delay

Marioway
0
 
LVL 12

Accepted Solution

by:
esoftbg earned 500 total points
ID: 11838638
The table BTWS.db is absolutelly empty, so I link all the TQRDBText (in the summary band) to the fields from Factuur.db ....
You didn't sent me the Temp.db ....
You may do something like that:

procedure TFormFactuur.BitBtn2Click(Sender: TObject);
begin
  if qryFactuur.Active then
  try
    FormQRFactuur.qryFactuur.Active := False;
    FormQRFactuur.qryFactuurArtikel.Active := False;
    FormQRFactuur.qryFactuur.ParamByName('FactuurNummer1').AsString
    := qryFactuur.FieldByName('FactuurNummer1').AsString;
    FormQRFactuur.qryFactuur.Active := True;
    FormQRFactuur.qryFactuurArtikel.Active := True;
  finally
    with FormQRFactuur do
    begin
      QRDBText10.AutoSize := False;
      QRDBText11.AutoSize := False;
      QRDBText12.AutoSize := False;
      QRDBText13.AutoSize := False;
      QRDBText14.AutoSize := False;
      QRDBText15.AutoSize := False;
      QRDBText16.AutoSize := False;
      QRDBText17.AutoSize := False;
      QRDBText18.AutoSize := False;
      QRDBText19.AutoSize := False;
      QRDBText20.AutoSize := False;
      QRDBText21.AutoSize := False;
      QRDBText22.AutoSize := False;
      QRDBText23.AutoSize := False;
      QRDBText24.AutoSize := False;
      if (qryFactuur.FieldByName('Bedragexclbtw0').AsFloat = 0) then
        QRDBText10.Width := 0
      else
      begin
        QRDBText10.Width := 80;
        QRDBText10.Left := 16;
      end;
      if (qryFactuur.FieldByName('Bedragexclbtw1').AsFloat = 0) then
        QRDBText11.Width := 0
      else
      begin
        QRDBText11.Width := 80;
        QRDBText11.Left := 16;
      end;
      if (qryFactuur.FieldByName('Bedragexclbtw6').AsFloat = 0) then
        QRDBText12.Width := 0
      else
      begin
        QRDBText12.Width := 80;
        QRDBText12.Left := 16;
      end;
      if (qryFactuur.FieldByName('Bedragexclbtw12').AsFloat = 0) then
        QRDBText13.Width := 0
      else
      begin
        QRDBText13.Width := 80;
        QRDBText13.Left := 16;
      end;
      if (qryFactuur.FieldByName('Bedragexclbtw21').AsFloat = 0) then
        QRDBText14.Width := 0
      else
      begin
        QRDBText14.Width := 80;
        QRDBText14.Left := 16;
      end;
      if (qryFactuur.FieldByName('Bedragbtw0').AsFloat = 0) then
        QRDBText15.Width := 0
      else
      begin
        QRDBText15.Width := 80;
        QRDBText15.Left := 216;
      end;
      if (qryFactuur.FieldByName('Bedragbtw1').AsFloat = 0) then
        QRDBText16.Width := 0
      else
      begin
        QRDBText16.Width := 80;
        QRDBText16.Left := 216;
      end;
      if (qryFactuur.FieldByName('Bedragbtw6').AsFloat = 0) then
        QRDBText17.Width := 0
      else
      begin
        QRDBText17.Width := 80;
        QRDBText17.Left := 216;
      end;
      if (qryFactuur.FieldByName('Bedragbtw12').AsFloat = 0) then
        QRDBText18.Width := 0
      else
      begin
        QRDBText18.Width := 80;
        QRDBText18.Left := 216;
      end;
      if (qryFactuur.FieldByName('Bedragbtw21').AsFloat = 0) then
        QRDBText19.Width := 0
      else
      begin
        QRDBText19.Width := 80;
        QRDBText19.Left := 216;
      end;
      if (qryFactuur.FieldByName('Bedragtotaal0').AsFloat = 0) then
        QRDBText20.Width := 0
      else
      begin
        QRDBText20.Width := 80;
        QRDBText20.Left := 416;
      end;
      if (qryFactuur.FieldByName('Bedragtotaal1').AsFloat = 0) then
        QRDBText21.Width := 0
      else
      begin
        QRDBText21.Width := 80;
        QRDBText21.Left := 416;
      end;
      if (qryFactuur.FieldByName('Bedragtotaal6').AsFloat = 0) then
        QRDBText22.Width := 0
      else
      begin
        QRDBText22.Width := 80;
        QRDBText22.Left := 416;
      end;
      if (qryFactuur.FieldByName('Bedragtotaal12').AsFloat = 0) then
        QRDBText23.Width := 0
      else
      begin
        QRDBText23.Width := 80;
        QRDBText23.Left := 416;
      end;
      if (qryFactuur.FieldByName('Bedragtotaal21').AsFloat = 0) then
        QRDBText24.Width := 0
      else
      begin
        QRDBText24.Width := 80;
        QRDBText24.Left := 416;
      end;
    end;
    FormQRFactuur.QR_Factuur.PreviewModal;
  end;
end;
0
 

Author Comment

by:marioway
ID: 11838902
Hello, This is a possiblity I already had in mind. BWTS.db is filled at runtime with the results of the query's I run on the temp.db (same structure as the factuurarticle.db). After the Question 'Do you want to save the invoice ?' a Batchmove is performed to load the records from the temp.db into the factuurarticle.db. At the end the temp.db is emptyed. I thought there might be a way to load the results from the BTWS.db into the summary. So for instance: QRDBTEXT1, QRDBTEXT2, QRDBTEXT3, QRDBTEXT4 connectd to the BTWS.db (which is not empty at runtime !).

thx
Marioway
0
 

Author Comment

by:marioway
ID: 11906659
Hi , I did it the way you last showed me. It looks better now. Thank You very much for your time !

thx
Marioway
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11907858
Hi marioway,
You are welcome !
thx Emil
0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now