Avatar billede volstrup Nybegynder
04. december 1999 - 22:48 Der er 6 kommentarer og
1 løsning

Omfattende databaseudskrivning vha. Quickreport

Hej,
jeg har et problem med en quickreport i delphi 4.0 std.:

jeg har en database med nogle varer, som er sorteret efter varegruppe. Der
er derfor gemt et varenummer til hver enkelt vare. Ligeledes har jeg en
database med varegrupperne, hvor de har varegruppenr og navn.

Jeg skal ha' udskrevet mine varer, opdelt efter varegruppe. Derfor skulle
jeg gerne, inden hver varegruppe's varer, have en overskrift med
varegruppenavn, hvorefter de varer som tilhørte denne varegruppe så ville
blive listet op. Dette skulle gerne ske med alle varegrupperne.

Derfor prøvede jeg at lavede en kombineret sql forespørgsel (hedder det
det?), dvs. at jeg hentede nogle oplysninger fra begge databaser, ordnet
efter varegruppenavn. Derfor havde jeg først alle varerne til varegruppe1,
derefter til varegruppe2, etc...
Desværre vil quickreport kun lave en overskrift til den første varegruppe,
når jeg gør det på denne måde.

AHA tænkte jeg så, og lavede i stedet en sql forespørgsel, som hentede
oplysninger om varegrupperne, så de var ordnet alfabetisk. Derefter
placerede jeg en table komponent, som jeg satte til at have mastersource til
den datasource som jeg nu havde knyttet til min sql.
Jeg regnede så med at den ville tage den første poster i min sql
forespørgsel, derefter bladre alle posterne i min varedatabase igennem, tage
næste varegruppe, etc...
Men nej... Nu tager den og laver overskrift til varegrupper1, varegruppe2,
etc.. Men desværre bliver mine produkter ikke listet op!

Min quickreport har følgende:
        en qrband, som er sat til detail. Denne har en QRDBText-label på,
som er knyttet til sql'en, altså varegruppenavnet.
        en qrchildband, som har en QRDBText som er knyttet til min table,
altså varens informationer

Jeg havde regnet med at der først ville blive vist en overskrift
(varegruppenavn), derefter de varer som var knyttet til denne varegruppe.
Dette skulle så gentages for alle varegrupperne.

Er dette muligt?
Og hvis, så hvordan?
Avatar billede lrj Nybegynder
05. december 1999 - 15:49 #1
Hvis du går ind på hjemmesiden for dem som har lavet QuickReport, kan du hente dokumentationen til komponenterne. Heri er et eksempel på netop sådant et master/detail relationship som du beskriver ovenfor. Jeg kan ikke huske de specifikke detaljer, så derfor henviser jeg dig til deres side..

http://www.qusoft.com/

http://www.qusoft.com/scripts/download.dll/getfile?Filename=QR3TUTORIAL.ZIP

/enjoy
Avatar billede delphi Nybegynder
06. december 1999 - 14:52 #2
Jeg har med DataBase desktop lige lavet to tabeller der indeholder det mest nødvendige:

Alle nøglefelter er af typen Long Integer.

VareGruppe tabel (Master tabel i relationen)
Tabellen indeholder et nøglefelt "VareGrp" og et textfelt "GruppeNavn"
For senere at kunne sortere på Gruppenavn, er der på dette felt oprettet et
secondary index, kaldet "GruppeNavnIndex"

Vare Tabel (Detail tabel).
Nøglefeltet "VAreNr", Textfelt "VareText" og fremmed nøgle "VareGrp"
For senere at kunne styre Master-Detail relationen er der oprettet et secondary index kaldet "VareGrpIndex"

I Delphi startes en ny application.
Lav et Datamodule
Indsæt en TTable:
- Name=taVareGruppe
- IndexName=GruppeNavnIndex

Indsæt en DataSource
- Name=dsVareGruppe
- DataSet=taVareGruppe

Indsæt en TTable:
- Name=taVare
- IndexName=VareGrpIndex
- MasterSource=dsVareGruppe
- MasterFields=VareGrp

Indsæt en DataSource
- Name=dsVare
- DataSet=taVare

Sæt begge tabellers Alias og sæt Active=True
Gem Datamodulet, fx. som "dmVare"

Via File-New oprettes en Report
Via File-Use Unit vælges "dmVare"
- Bands.HasDetail=True
- DataSet=taVareGruppe

Gør detail båndet lidt højere, så der er plads til to rækker text.

Indsæt en QRLabel
- Caption='Vare Gruppe: '

Indsæt en QRDBText (Ved siden af QRLabel1)
- Dataset=taVareGruppe
- DataField=VareGrp

Indsæt en QRLabel (Ved siden af QRDBText1)
- Caption='Gruppe Navn: '

Indsæt en QRDBText (Ved siden af QRLabel2)
- Dataset=taVareGruppe
- DataField=GruppeNavn

Under disse felter indsættes to QRLabel's
QRLabel2
- Caption='VareNr'

QRLabel3
- Caption='Vare Text'

Indsæt et TQRSubDetail band (2. icon på QReport fane) og ændrer dets properties:
- Dataset=taVare

Indsæt på QRSubDetail 2 TQRDEText's under QRLabel2 og 3
QRDBText3
- DataSet=taVare
- DataField=VareNr

QRDBText4
- DataSet=taVare
- DataField=VareNavn

Prøv med Preview. - Jeg har sikkert glemt et eller andet undervejs.

Kosmetik:  Indsæt et Title band, en QRShape (HorLine) under QRDBText 2&3, meget tynd ChildBand under DetailBand, font størrelser osv.

Nu vil jeg Hjem

NiP/Delphi
Avatar billede volstrup Nybegynder
07. december 1999 - 00:34 #3
Jeg ser på det...

...på forhånd tak
Avatar billede delphi Nybegynder
07. december 1999 - 08:15 #4
Ok - Jeg sad lige og læste hvad jeg har skrevet.  Jeg kan så'en med det blotte øje se, at jeg i starten har et felt i Vare-tabellen der hedder VareText.  Senere, i forbindelse med QRDBText4 kalder jeg feltet VareNavn - Det skal se'følig være det samme begge steder. 
Jeg har skrevet det mere eller mindre ud af hovedet, så der er muligvis flere af samme slags bøffer...

NiP
Avatar billede delphi Nybegynder
07. december 1999 - 08:18 #5
Fx. skal tabellers (eller TDataBase's) alias parametre sættes rigtigt op før man kan vælge tabel navn....

NiP
Avatar billede delphi Nybegynder
13. december 1999 - 09:05 #6
..og har du kigget på det?

NiP
Avatar billede volstrup Nybegynder
13. december 1999 - 21:56 #7
Jeg har ikke haft tid endnu...
..jeg går i skole og så'n

men det lyder rigtigt, så du får dine point!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester