PDA

Vollständige Version anzeigen : Acc97: Tabelle auswerten


Panzeri
27.06.2001, 15:35
Ich verwalte in einer Tabelle 10 verschiedene Publikationen (PubliID). Jeder Kunde (KundenNr) hat unterschiedliche Publikationen mit unterschiedlichen Stückzahlen (PubliMenge) abonniert.

Wenn ich die Publikation 3, 5 und 7 versende benötige ich Couvertetiketten mit folgender Gruppierung:
Kunden mit nur Publikation 3
Kunden mit nur Publikation 5
Kunden mit nur Publikation 7
Kunden mit Publikationen 3 und 5
Kunden mit Publikationen 3 und 7
Kunden mit Publikationen 5 und 7
Kunden mit Publikationen 3, 5 und 7

Wer kann mir einen Tipp geben wie ich über VBA die Kundengruppierung vornehmen kann und diese in einen Etikettenbericht übernehmen kann.
Dank im voraus bestens.

A.S.
27.06.2001, 15:47
Hallo Panzeri,

darf ich Deine Ausführung dahingehend interpretieren, das Du alle Daten in einer Tabelle (á la Excel) verwaltest?

Wenn ja, mache ich Dir zunächst einmal den Vorschlag Deine DB komplett zu überarbeiten und die Daten auf mehrere Tabellen zu verteilen, die über Indizes miteinander verknüpft sind.

Das löst mit Sicherheit einige der Gordischen Knoten, welche Du in Deiner App hast. Suche einmal im Forum (Suchfunktion oben rechts) nach dem Stichwort Normalisierung. Es existieren einige Beiträge mit entsprechenden Links, in denen Du mehr zum Thema Datenaufteilung erfahren kannst.

------------------
HTH

Arno

Panzeri
27.06.2001, 17:52
Hallo Arno

Ich weiss nicht wie Du auf Deine Annahme von wegen alles in einer Tabelle (Excel) kommst. Auf jeden Fall ist Sie nicht korrekt.

Die Datenbank enthält
tbl_Kunden mit den Kundenstammangaben
mit KundenNr als Primärschlüssel
tbl_Adressen mit den Adressangaben
und ca. 40 weiteren Tabellen
unter anderem tbl_Zeitschriften mit
KundenNr / PubliID und PubliMenge
deren Angaben ich mit einem Unterformular erfasse.
Hauptformular: KundNr / KundenName
Unterformular ist vorerwähnte Tabelle in dem
PubliID ein Auswahlfeld ist PubliText/PubliID
PubliText ist wieder in einer Tabelle gespeichert. Nix mit Excel.

Was ich benötige ist ein spezifischer Select mit Gruppierung für den Versand so wie ich es
erwähnt habe. Der tbl hat ja folgenden Inhalt
Kd P-ID P-Menge
40 1 5
40 2 7
47 5 1
48 1 1
48 2 5
48 3 6

Also nochmals: Etikettenreport
Titel Kunden mit Publi 3+5 (ohne 7)= Eti.
Titel Kunden mit Publi 5+7 (ohne 3) = Eti.
Bei einer solchen Sortierung kannst Du das
Einpacken rationell gestalten, da ich mit
für jede Publi-Kombination einen Umbruch mache.

Danke für weiteren Input.

René

Mad
27.06.2001, 19:25
Hallo Panzeri,
ich glaube, du müsstest bei der Abfrage mit der Funktion "Gruppierung" im Feld Kunden-ID arbeiten, beim Feld Publikation-ID mit "Bedingung" und der Eingabe "=3 oder 5 oder 7".
Gruß, Dietmar

A.S.
27.06.2001, 19:34
Hallo Panzeri,

Ich weiss nicht wie Du auf Deine Annahme von wegen alles in einer Tabelle (Excel) kommst. Auf jeden Fall ist Sie nicht korrekt.

auf diese Annahme komme ich wegen Deiner Angabe...

Ich verwalte in einer Tabelle 10 verschiedene Publikationen (PubliID)....
Da ich in der Folge keine weiterführende Aussage die auf gesonderte Tabellen schließen lies fand, halt meine irrige Annahme.

Um das von Dir gewünschte zu erhalten, benötigst Du eine Gruppierungs-Abfrage, wie Mad sie beschrieben hat. Das Problem ist die selektive Auswahl, da wirst Du eine entsprechende Where-Klausel einfügen müssen, wenn Du hier flexibel bleiben willst, die Du immer neu bilden mußt oder immer Deine Query-Definitionen anpassen.

Welche Alternative schwebt Dir vor?

------------------
HTH

Arno

Panzeri
27.06.2001, 20:42
Hoi Arno, hoi Mad
Dank für Euren Input sowie die "Klärungen".
Ich benötige für die Anwender ein automatisiertes Prozedere. Der User kann über ein Formular mit 2 Listenfeldern die Zeitschriften auswählen.
Linkes Feld: Alle auswählbaren Zeitschriften
Doppelklick auf eine Zeitschrift kopiert die
Zeitschrift in das rechte Listenfeld "ausgewählte Zeitschriften". Der User sieht keine Codewerte, nur die Namen der verfügbaren bzw. ausgewählten Zeitschriften. Anschliessend sollen die Klebeetiketten "auf Knopfdruck" produziert werden. Für die Einpackerei benötige ich jeweils eine Startetikette, woraus hervorgeht wieviele und welche Zeitschriften nun eingepackt werden müssen.

Mein gedanklicher Weg:
Neue Felder in tbl_Zeitschriften "Packzahl", "Einpackung"
VBA-Prozedur:
rst = tbl_Zeitschriften
Lies jede Kundennr und berechne pro Kundennummer
1. Packzahl d.h. Anzahl PubliID pro Kundennr
2. Einpackung d.h. welche Zeitungen müssen eingepackt werden (Darstellung 3;5;7)
Aktualisierungabfrage und Eintrag der beiden Werte in die entsprechenden Datenfelder der Tabelle. Hat ein Kunde z.B. 3 Zeitschriften im tbl_Zeitschriften, erhalten alle 3 Datensätze den identischen Eintrag mit Packzahl und Einpackung.

Über die "Einpackung" kann ich nun die Etiketten gruppieren.

Dies ist so meine Idee. Bin offen für andere Vorschläge und Ideen.

Beste Grüsse
René

A.S.
28.06.2001, 05:52
Guten Morgen Rene,

da Du auf der einen Seite die Information für den Ausdruck benötigst, welche Zeitung in welcher Ausprägung zu packen ist und wer jeweils x davon bekommt und auf der anderen Seite für den Personenkreis der Empfänger jeweils nur einen Aufkleber haben willst, egal wieviele und welche Zeitschriften er bekommt, würde ich sagen ist es das beste wenn Du zwei Berichte benutzt.

Beide basierend auf je einer dynamisch - sprich per CreateQueryDef erstellten - Abfrage mit der dann selektiv die Zeitschriften herausgesucht werden, welche selektiert worden sind.

In der einen Query machst Du eine Gruppierung (Sigma-Button in der Symbolleiste) auf die ZeitungensID mit Summierung der Mengenausprägung. In der anderen Query machst Du nur die Gruppierung auf die KundenID.

Die so schon einmal gewonnenen Informationen mußt Du noch mit den zusätzlich benötigten Infos aus Deinen sonstigen Tabellen anreichern (Adressen, Zeitschriftenbezeichnungen etc.) um das gewünschte Druckergebnis hinzubekommen.

Gruß

Arno

Panzeri
28.06.2001, 13:32
Hoi Arno

Danke für Dein Feedback. In habe einen Ansatz für die Lösung:

Private Function Verpackung(tabelle As String, Stamm As String, Zeitung As String, valStamm)
On Error GoTo Level_Error

Dim pdbs As DATABASE
Dim prst As Recordset

Set pdbs = CurrentDb
Set prst = pdbs.OpenRecordset("select distinct " & Zeitung & " from " & tabelle & " where " _
& Stamm & "=" & valStamm & " order by " & Zeitung)

Do

If prst.AbsolutePosition = prst.BOF Then
Verpackung = prst(Zeitung)
Else
Verpackung = Verpackung & ", " & prst(Zeitung)
End If

prst.MoveNext

Loop Until prst.EOF

DoCmd.RunSQL ("UPDATE tbl_Mtgl_Zeitungen " & _
"SET PackInhalt = Verpackung " & _
"WHERE StammNr = Stamm ;")

prst.Close
pdbs.Close
Set prst = Nothing
Set pdbs = Nothing

Wenn ich diese Prozedur in einem Bericht laufenlasse erhalte ich pro Stammnummer die Angabe der zu verpackenden Zeitungen). Wenn ich diese Angabe in die Tabelle zurückschreiben will, erhalte ich die Fehlermeldung: "Sie können diese Aktion momentan nicht durchführen."

Meine Fragen:
- Hast Du / habt Ihr im Forum eine bessere Lösung?
- Was muss ich beim UPDATE ändern?

Danke für die Rückmeldungen.

Liebe Grüsse
René

Panzeri
28.06.2001, 15:18
NACHTRAG

Mein weiteres Pröbeln hat ergeben, dass das Ganze in einem querydef wohl schneller ablaufen würde. Kann mir da auch noch jemand Tipps für die VBA-Prozedur geben.

Danke
René