WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Bericht: Listfeld zuweisen (http://www.wcm.at/forum/showthread.php?t=90175)

BigNfan 05.03.2003 10:07

Bericht: Listfeld zuweisen
 
hi, ich möchte das listfeld definieren, leider meint er immer, dass ich das nicht setzen kann

weiss wer wie ich das machen kann ?

Private Sub Report_Activate()

Set con = CurrentProject.Connection
Set rstds = New ADODB.Recordset
Set rstVerleih = New ADODB.Recordset
Set rstAdresse = New ADODB.Recordset
Set rstTableOpen = New ADODB.Recordset
Dim str_suchkriterium As String

int_g_mitarbeiterid = 1

ds = "select Filiale_ID from tbl_mitarbeiter where ID = " & int_g_mitarbeiterid & ";"
'Listet FilialID des Mitarbeiters auf
rstds.Open ds, con, adOpenDynamic, adLockOptimistic
rstAdresse.Open "tbl_filiale", con, adOpenDynamic, adLockOptimistic
If (rstAdresse!ID <> rstds!filiale_id) Then
str_suchkriterium = "[ID] = " + "'" + rstds!filiale_id + "'"
rstAdresse.Find str_suchkriterium, adSearchForward
End If
rstds.Close
txt_filiale = rstAdresse!Adresse
rstAdresse.Close
txt_datum = Date
rstVerleih.Open "tbl_verleih", con, adOpenDynamic, adLockOptimistic
rstVerleih.MoveLast
txt_rnummer = rstVerleih!ID
txt_betrag = rstVerleih!Gesamtbetrag
'ds = "SELECT tbl_cdarchiv.ID, tbl_cdarchiv.CDName FROM tbl_verleihzeile, tbl_cdarchiv WHERE " _
& " (((tbl_verleihzeile.Lagerbestandcd_ID)=[tbl_cdarchiv].[id]) AND ((tbl_verleihzeile.Verleih_ID)=rstVerleih!id));"
lst_artikel.RowSource = "SELECT tbl_cdarchiv.ID, tbl_cdarchiv.CDName FROM tbl_verleihzeile, tbl_cdarchiv WHERE " _
& " (((tbl_verleihzeile.Lagerbestandcd_ID)=[tbl_cdarchiv].[id]) AND ((tbl_verleihzeile.Verleih_ID)=rstVerleih!id));"
End Sub

wbendl 07.03.2003 10:24

dein posting ist für mich nicht sehr aufschlussreich

wenn ich's richtig kapiere willst du zur laufzeit ein DBList füllen.
die rowsource-eigenschaft kann aber zur laufzeit nicht geändert werden. ist bei diesem steuerelement nicht vorgesehen.

du kannst aber ein recordset erstellen, und dann ein listenfeld mit den daten füllen. wenn es viele zeilen sind, kann das aber dauern. dann würde ich ein grid verwenden.

falls ich es falsch verstanden habe, bitte eine möglichst genaue beschreibung vom gewünschten effekt. bitte mit folgenden angaben:

welche VB-Version
welche controls stehen dir zur verfügung
in welchem container soll das control sein
was soll mit den angezeigten daten weiter geschehen

WB

BigNfan 07.03.2003 12:10

hi
access xp

ich hab ne abfrage gemacht "ds"

die soll nun im listfeld des berichtes stehen

i weiss ned was controls, container etc sind

nur dass ich die abfrage ds hab, dass im listfeld des berichtes angezeigt werden soll und das ich ADO verwende

wbendl 07.03.2003 16:35

hi!

sorry, auf access war ich nicht vorbereitet
mit access habe ich bei office 97 aufgehört, weil alle 2 jahre eine neue version kommt, die mit der vorigen nicht kompatibel ist.

vergiss was ich geschrieben habe

in dunkler erinnerung habe ich aber noch, daß man bei access die rowsource-eigenschaft mit vb einstellen kann. auch eine sql-anweisung ist zulässig. soweit sollte alles in ordnung sein.

vorher muß die rowsourcetype-eigenschaft eingestellt sein. in deinem fall ist wahrscheinlich "table/query" die richtige einstellung.

vielleicht funktioniert es auch bei xp noch so. ein versuch kann nicht schaden.

WB

BigNfan 07.03.2003 16:45

ja bei formularen funkts ja auch

nur bei berichten ned.. aba irgendwie muss ja gehen sonst wärs ja unsinnig listfelder in berichte einfügen zu können

wbendl 08.03.2003 13:17

eingeschränkte funktionen der steuerelemente sind mir nicht neu.
in vb6 gibt's das auch in ähnlicher weise.

aber warum brauchst du in einem bericht ein listenfeld?

wenn der bericht gedruckt wird, was eigentlich der sinn ist, kann man ja nichts mehr auswählen oder beeinflussen.

wenn du nur eine ausgabe am bildschirm willst, muss es kein bericht sein.

in deiner sql-anweisung sehe ich nur eine variable. wenn du die datensätze für den bericht filtern willst, sollte das schon früher geschehen.

also wenn es kein geheimnis ist, dann sag mir, was du wirklich erreichen willst. ich bin ziemlich sicher, daß man das gewünschte ergebnis erreichen kann. mit access ist ja fast alles machbar. aber um den weg zu finden, sollte man das ziel kennen.

WB

BigNfan 08.03.2003 13:25

also .. es isn schulprojekt

der kunde wählt aus welche filme oder musikcds er ausborgen will und bekommt ne rechnung (bericht)

hier soll dann eben filiale etc drinstehen und dann alle ausgeliehenen artikel
und in das listfeld wollte ich die artikel schreiben

wbendl 08.03.2003 15:11

na prima, dann brauchts kein listenfeld im bericht.

sowas habe ich vor jahren für einen freund gemacht, nur das es keine cd's waren. damals habe ich noch mit access gearbeitet.

ich versuche einmal aus deinem code auf die grundlage zu kommen.

geht ungefähr so:

tbl_filiale
tbl_mitarbeiter
tbl_verleih - enthält den geschäftsfall
tbl_cdarchiv - entält den lagerbestand
tbl_verleihzeile - ein datensatz pro verliehener cd


frm_verleih ein formular mit unterformular
- combo zum auswählen des mitarbeiters
die filiale wird wird festgelegt, und di id in tbl_verleih
gespeichert. anzeige im form nicht notwendig, aber möglich
- felder für datum, kunde, ... was auch immer gespeichert wird
falls zb. eine kundenkartei (tbl_kunden) existiert, combo verwenden.
- verleihid anzeige im form nicht notwendig, aber speichern

frm_verleihunterf

wbendl 08.03.2003 15:33

sorry, ich hab einen absturz gebaut. ich schreib das ganze nochmal

na prima, dann brauchts kein listenfeld im bericht.

sowas habe ich vor jahren für einen freund gemacht, nur das es keine cd's waren. damals habe ich noch mit access gearbeitet.

ich versuche einmal aus deinem code auf die grundlage zu kommen.

geht ungefähr so:

tbl_filiale
tbl_mitarbeiter
tbl_verleih - enthält den geschäftsfall
tbl_cdarchiv - entält den lagerbestand
tbl_verleihzeile - ein datensatz pro verliehener cd


frm_verleih ein formular mit unterformular
- combo zum auswählen des mitarbeiters
die filiale wird wird festgelegt, und di id in tbl_verleih
gespeichert. anzeige im form nicht notwendig, aber möglich

- felder für datum, kunde, preis, ... was auch immer gespeichert wird
falls zb. eine kundenkartei (tbl_kunden) existiert, combo verwenden.

- verleihid anzeige im form nicht notwendig, aber speichern

- ok schaltfläche

frm_verleihunterf
- darsrellung tabellenansicht

- mit nachschlageassistent cd auswählen. die ganze zeile wird angezeigt (titel, preis, ..), aber nur die id gespeichert. ich glaube damals habe ich eine hilfstabelle verwenden müssen. vielleicht find ich es noch. die cd wird als verliehen markiert, damit sie nicht ein 2. mal ausgegeben werden kann. auch in der auswahlliste darf sie nicht mehr erscheinen. geamtpreis aktualisieren.

auf ok klicken
- der bericht wird gedruckt. als einziges argument muß die verleihid übergeben werden, alles andere kann er aus den tabellen holen.

ich glaube das ist so ziemlich die minimalversion. praktischer wird's, wenn man im formular nicht nur neue vorgänge anlegen kann, sondern auch die früheren anzeigen kann. eine suchfunktion ist auch noch ein goodie. kommt auf deine lehrer an.

die cd-verwaltung auch nicht vergessen!

ich schau jetzt noch ob ich das alte projekt noch finde. falls ja, melde ich mich nochmal.

WB

wbendl 08.03.2003 16:10

ich hab die beschreibung von dem damaligen project gefunden

im prinzip habe ich alles so gemacht wie vorher gepostet, nur halt aufwendiger und mit zusätlichen funktionen z.b. für eingehende lieferungen, usw.

tbl_artikel - alle angaben bis hin zu mwst-satz, handelsspanne,....

tbl_bestelldetails - verbindet artikelid und bestellid.
zusätzlich verwende ich noch eine lfd.nr., um die zeilen in der bestellung zu mummerieren, und die anzahl der artikel.
anzahl wirst du aber nicht brauchen.

tbl_bestellungen - angaben über kunden, datum, versandadresse, frachtkosten,....

und wie gesagt, für den Bericht genügt die bestellid als parameter.

viel spaß

WB

BigNfan 08.03.2003 20:22

ich kann nicht mehr neue tabellen etc machen, das steht schon alles .. -> ERD

ich muss es mit denen machen die da sind, einige formulare sind ja schon fertig

wbendl 09.03.2003 10:21

ist die verwendung der tabellen eine vorgabe?

in deinem code kommen 5 tabellen vor:

tbl_filiale
tbl_mitarbeiter
tbl_verleih
tbl_cdarchiv
tbl_verleihzeile

das genügt.

entscheidend ist nur, den verleih-vorgang (das eintragen der cd's, die bei einem vorgang verliehen werden) in einem formular durchzuführen, und die notwendigen daten in die tabellen zu schreiben.

combos zur auswahl sind zwar komfortabel und stellen sicher, daß nur vorhandene einträge augewählt werden können, aber nicht unbedingt notwendig.
wenn du die zu verleihende cd händisch einträgst, mußt du darauf achten, daß sie sie auch wirklich existiert. oder zumindest ein datensatz mit dieser id in tbl_cdarchiv existiert.

in tbl_verleihzeile muß für jede verliehene cd ein datensatz entstehen, der die id aus tbl_verleih und die id aus tbl_cd archiv enthält.

in tbl_verleih muß die id des mitarbeiters gespeichert werden.

ich gehe der einfachheit halber davon aus, daß der bericht nur aus 1 seite bestehen wird.
andernfalls wird es kompliziert. notfalls kann ich dir aber auch diese möglichkeit beschreiben.

der bericht muß aus 3 bereichen bestehen. eventuell sind die von mir verwendeten bezeichnungen nicht ganz korrekt, aber sie sollten erkennbar sein.

- berichtskopf oder seitenkopf (bei dieser lösung wahrscheinlich gleichwertig)
enthält bei bedarf den briefkopf und das firmenlogo
textfelder für die daten aus tbl_verleih, tbl_mitarbeiter, tbl_verleih. (z. b. datum, filiale, mitarbeiter, ...)

- detailbereich
textfelder für die daten aus tbl_cdarchiv

- berichtsfuß oder seitenfuß
textfeld für die rechnungssumme
berichtsfuß ist besser. dann kommt die summe nach dem detailbereich
bei seitenfuß steht die summe ganz unten, auch wenn nur wenige zeilen vorhanden sind.

eventuelle firmendaten (firmenbuchnr, kontonr, ...) kommen in den seitenfuß.

wie geagt muß dem bericht die id aus tbl_verleih übergeben werden.
das geht am einfachsten, wenn du den bericht gleich aus dem formular öffnest. wenn du den bericht bei geschlossenem formular öffnest, wirst du zur eingabe der id aufgefordert.

damit kann eine sql-anweisung erstellt werden, die alle daten enthält. mit access geht das sehr leicht. im berichtsentwurf kann die abfrage mit dem assistenten erstellt werden. in dieser abfrage wird als parameter formular!verleihid verwendet.

ich glaube noch kleiner oder einfacher ist das gewünschte ergebnis nicht zu erreichen.

WB

BigNfan 09.03.2003 12:48

gut

ich mach die verleihID als globale variable

oben steht eh mei abfrage

die schreib i in ne abfrage statt in den code und dem listfeld weise ich die abfrage zu

nur wie schreib i die globale variable in die sql-abfrage damit er sie annimmt ?

wbendl 09.03.2003 14:20

ich glaube wir reden aneinander vorbei.
es gibt kein listenfeld im bericht.

und auch im formular macht es wenig sinn. ein unterformular ist viel besser.

im detailbereich des berichts ist ein textfeld für jedes feld das angezeigt werden soll. das ergibt 1 zeile.

bei öffnen des berichts wird diese zeile entsprechend der Anzahl der daensätze wiederholt und mit daten gefüllt.

die abfrage wird im entwurf des berichts definiert.
im feld verleihid gibst du als parameter dein formular!verleihid an.

für die minimalversion mußt du keinen code schreiben

im formular brauchst du eine schaltfläche zum öffnen des berichts.
die kannst du auch mit dem assistenten erstellen.

oder ist deine aufgabe die lösung in vba zu programmieren statt die möglichkeiten von access zu verwenden?

WB

BigNfan 09.03.2003 14:38

^hi
das formular gibts ja schon
öffnet den bericht

aber wie mach ich das?
die abfrage wird im entwurf des berichts definiert.
im feld verleihid gibst du als parameter dein formular!verleihid an.

ich versteh leider nicht wie du das meinst

wbendl 09.03.2003 15:32

1. bericht in der entwurfsansicht öffnen

2. sicherstellen daß bericht ausgewählt ist

3. eigenschaftsfenster öffnen und register daten auswählen

4. datenherkunft löschen und cursor in die zeile datenherkunft setzen

5. auf die schaltfläche mit ... klicken --> der assistent erscheint

6. alle benötigten tabellen hinzufügen

7. falls keine beziehungen definiert sind, mußt du es jetzt machen

8. die gewünschten felder in die abfrage ziehen

9. im feld verleihid folgende bedingung eintragen:
Wie [forms]![formularname]![feldname], formularname und feldname anpassen

10. ab und zu den assistenten schließen um die sql-anweisung zu speichern

11. auf die schaltfläche ansicht (links oben) klicken --> das ergebnis der abfrage wird angezeigt. wenn das formular nicht geöffnet ist, wirst zur eingabe der bestellid aufgefordert.

12. wenn du die abfrage erstellt hast, den assistenten beenden

13. feldliste öffnen und die gewünschten felder im entwurf platzieren

14. bei einer tabellenartigen darstellung der verleihzeilen die bezeichnungsfelder im kopf platzieren

alternativ kannst du die abfrage auch als abfrage erstellen, und im bericht die datenherkunft auf diese abfrage einstellen

du hast wohl noch nicht sehr viel mit access gemacht.
falls du probleme hast ruf mich heute unter 0590591/62320 an.

dann machen wir es gemeinsam.

WB

wbendl 13.03.2003 21:11

laß mal hören ob es schon funktioniert.

wenn nicht, bin ich freitag ab 18:00 wieder tel. erreichbar

WB

BigNfan 14.03.2003 08:30

ja funkt danke

hab zwar ned die globale variable übergeben können aber ein textfeld

hab im formular ein unsichtbares textfeld wo ich die variable reinschreib und dann mach im bericht [forms]![formularname]![feldname]

wbendl 14.03.2003 11:22

super!

übrigens war das auch so gedacht, das die verleihid in einem textfeld steht, das aus der tabelle gefüllt wird.

WB

BigNfan 15.03.2003 15:02

aso :D

hab mir gedacht ich hab nur gepfuscht *fg*
irgendwie blöd dass das mit ner globalen variable ned geht..

wbendl 15.03.2003 23:55

wenn es unbedingt sein muß, kann man schon eine variable verwenden, die dem bericht übergeben wird.
macht aber mehr arbeit, und ich sehe keinen vorteil.

nach meiner version steht die id im formular.
das textfeld wird automatisch aktualisiert.
damit hast du immer automatisch immer die richtige id zur hand.
der bericht liest sie automatisch.
du brauchst keinen code zu schreiben.
wenn der bericht bei geschlossenem formular geöffnet wird, was aber dem normalen user nicht möglich gemacht werden sollte, wird nach der id gefragt.

wenn du eine variable verwenden möchtest, mußt du das alles programmieren.

hast du einen guten grund dafür?
welchen vorteil versprichst du dir davon?

WB


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag