[VB.NET] Crystal Reports + Access + Parameters

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Sven_Vdb
  • Registratie: Januari 2006
  • Laatst online: 18-02 22:40
Ik heb dus een access database met daarin verschillende tabellen. Programma bevat telefoonnummers, adressen,... maar ook nog andere dingen.

Tabellen zijn tblFamilie,tblKlanten,tblLeveranciers,....

Hier wil ik dus een rapport uit halen via mijn programma uit vb.net ( Visual studio 2008)
Dit aan de hand van crystal reports. Maar zoals je kan zien heb ik verschillende tabellen. Ik heb ook verschillende tabbladen waar de letters van het alfabet opstaan. Alle | A | B | C | ....... | Z

Dus in mijn query zitten nog enkele parameters. Zoals hieronder aangegeven door de @ tekens. Hoe kan ik dit in access? Of kan ik dit in het rapport zelf in vb.net? Ik gebruik de crystal reports die gebakken is in
visual studio 2008.

Ik heb al geprobeerd een query in access te maken met parameters. Maar dit lukt maar niet om de tabel als parameter te maken. Lukt dit niet ? Moet ik voor elke tabel hetzelfde rapport maken maar gewoon met andere tabel?

Hopelijk kan iemand me op weg helpen?


Visual Basic:
1
select * from @tabel where naam = @naam 

Acties:
  • 0 Henk 'm!

  • Sven_Vdb
  • Registratie: Januari 2006
  • Laatst online: 18-02 22:40
Niemand die enig idee heeft?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik zie even niet waarom je dynamisch een tabel zou willen opgeven; hoe zou je rapport dan moeten weten welke velden te verwachten? Lijkt me dus onzin.

Een parameter aan CR meegeven is geen rocket science en met 3 seconden googlen te vinden. Dan heb je het dus over parameters in (bijv.) een where-clause. Je zult die parameter dus wel in je report moeten definiëren.

[ Voor 7% gewijzigd door RobIII op 02-02-2010 23:49 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Allereerst, de naam van een tabel kan niet als een parameter worden doorgegeven. Aangezien je vrij weinig informatie geeft over hoe je tabellen eruit zien of hoe je code eruit ziet welke de tabbladen vullen is het erg lastig om je een duw in de goede richting te geven.

Ik begrijp niet niet helemaal waarom je familie, klanten en leveranciers in aparte tabellen plaatst. Ik raad je aan om een goed over normalisatie te lezen.

Er vanuit gaande dat deze drie tabellen overeenkomstige velden hebben zou je een union select kunnen gebruiken.

Onderstaande query is geschreven voor Microsoft Sql Server dus je zal hem zelf moeten omzetten naar access als hij niet direct werkt.
SQL:
1
2
3
4
5
6
declare @letter varchar(1)
set @letter = 'A'

SELECT Lastname, Middlename, Firstname, Street, Housenumber, HousenumberExtension, Zipcode, City FROM tblFamilie WHERE (LEFT(Lastname,1) = @Letter)
UNION
SELECT Lastname, Middlename, Firstname, Street, Housenumber, HousenumberExtension, Zipcode, City FROM tblKlanten WHERE (LEFT(Lastname,1) = @Letter)

Door extra unions te plaatsen kun je nog meer tabellen in de query opnemen. Een vereiste is wel dat alle queries hetzelfde aantal velden teruggeeft en van hetzelfde type is.

Je kunt eventueel ook overwegen om een view te maken waarin je de drie tabellen opneemt zonder where restrictie. Als de naam van die view 'Contacts' zou zijn, kun je de view in je query gebruiken:
SQL:
1
SELECT * FROM Contacts WHERE (LEFT(Lastname, 1) = @Letter)


Een goed boek over SQL is 'Het SQL leerboek'. Dit boek heeft mij 13 jaar geleden de beginselen van SQL bijgebracht. De website van de uitgever is hier te vinden: http://www.r20.nl/boek_SQL_leerboek.htm. Je kunt eventueel ook op zoek naar een tweedehands exemplaar want de basis van SQL is niet veranderd.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Niemand_Anders schreef op dinsdag 02 februari 2010 @ 23:48:
Je kunt eventueel ook overwegen om een view te maken waarin je de drie tabellen opneemt zonder where restrictie. Als de naam van die view 'Contacts' zou zijn, kun je de view in je query gebruiken:
SQL:
1
SELECT * FROM Contacts WHERE (LEFT(Lastname, 1) = @Letter)
Ik zou idd een view maken, maar met de volgende toevoeging:
SQL:
1
2
3
4
5
6
7
Create View BladieBla

SELECT 'familie' as [type], Lastname, Middlename, Firstname, Street, ... FROM tblFamilie
UNION
SELECT 'klant' as [type], Lastname, Middlename, Firstname, Street, ... FROM tblKlanten
UNION
...

Dan heb je achteraf nog altijd de mogelijkheid te herleiden waar je record nou vandaan kwam :)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Probleem is dat in sinds 1995 of niet meer met access heb gewerkt en dus ook niet weet of access support heeft voor views. Persoonlijk zou ik een vierde tabel 'Contacts' aanmaken en vanuit de drie tabellen een foreign key aanmaken naar de contacts tabel. Maar dat valt meer onder normalisatie.

Ik zou sven_vdb dan ook aanraden om eens naar Sql Server Compact edition te kijken. Net als access is dat een embedded database, maar heeft wel vrijwel alle features van sql server. Via SqlMetal ligt linq to sql om de hoek en ook de overstap naar sql server express is dan niet meer lastig.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Sven_Vdb
  • Registratie: Januari 2006
  • Laatst online: 18-02 22:40
Ja ik ben misschien op de verkeerde manier bezig.
Want elke tabel heeft dezelfde velden. Dus ik 1 tabel kunnen maken met een extra veldje waar ik dan een uniek nummer in plaats voor familie,klanten,leveranciers.

En die sql compact hoe gaat dit juist in zijn werk? Access db staat nu op een schijfje op het netwerk.
Sql compact hoef je ook niet te installeren?
Pagina: 1