Auszählen von temporären Abfragen in Access

Hallo Leute
In meiner Datenbank wird für jeden neuen Aufrag eine Tabelle erzeugt in der anschließend die bestellten Artikelnummen eingegeben werden.Der Name der Tabelle ist die Bestellnummer. Die Detaildaten der Artikel liegen in der Tabelle „Allgemein“.
Ich möchte in einem Formular nun für jeden Auftrag einen Gesamtwert ermitten. Hierzu muß ich die Stückzahlen betimmter Artikeltypen filtern und zählen.
Hat jemand ne Idee? Währe toll!

Hallo,

In meiner Datenbank wird für jeden neuen Aufrag eine Tabelle
erzeugt in der anschließend die bestellten Artikelnummen
eingegeben werden.

Das ist der (schon eingetretene) GAU der DB…

Der Name der Tabelle ist die Bestellnummer.

schön, aber nicht zielfühend.

Die Detaildaten der Artikel liegen in der Tabelle „Allgemein“.

Nur Fassade: Warum sind Artikel „Allgemein“ und keine „Artikel“ ?

Ich möchte in einem Formular nun für jeden Auftrag einen
Gesamtwert ermitten. Hierzu muß ich die Stückzahlen betimmter
Artikeltypen filtern und zählen.

Tja, wie fit bist Du in VBA?

Hat jemand ne Idee?

Ja, bau die Tabellenstruktur gemäß den Normalisierungsregeln um/auf.
http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/

Benutze Formulare für Ein-/Ausgabe/Änderung von Daten (bzw. Berichte für den Ausdruck).

dann sind solche Auswertungen (Abfragen) ein Klacks.

Währe toll!
Ja, :wink:)))))))

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz
Die Anfrage habe ich bewußt vereinfacht.
Die Aufträge werden zunächst in ein Formular eingegeben. Mit VBA wird nun eine neue Tabelle erzeugt. Diese trägt als Namen die Auftragsnummer. Die Tabellen werden nach Abschluss des Auftrags wieder gelöscht Ich nehme an darauf bezog sich der „GAU“.

Bei den Artikeln handelt es sich um Meßstellen eine Industrieanlage mit all ihren Komponenten. Ich hielt „Artikel“ für verständlicher.

Und selbstverständlich benutze ich Fomulare für die Ein/Ausgabe.

Meim VBA Ansatz war folgender:

Dim Stk, A as Integer

Stk = DCount(„Typ“,"Select Allgemein.Typ From " & A & "LEFT JOIN Allgemein ON " & A & „.MSR_ID = Allgemein.MSR_ID WHERE (((Allgemein.Typ) = ‚YS‘))“

oder

Stk = DCount(„Typ“,"Select Allgemein.Typ From " & A & "LEFT JOIN Allgemein ON " & A & „.MSR_ID = Allgemein.MSR_ID“, [Typ] = ‚YS‘)

Bin VBA Autodidakt.

Deine Antwort hat micht zwar nicht weitergebracht trotzdem danke ich für dein Interesse.

Gruß aus dem hohen Norden
Werner

Hallo Werner

Die Anfrage habe ich bewußt vereinfacht.

ist aber dadurch nicht klarer…

Die Aufträge werden zunächst in ein Formular eingegeben. Mit
VBA wird nun eine neue Tabelle erzeugt.Diese trägt als Namen
die Auftragsnummer. Die Tabellen werden nach Abschluss des
Auftrags wieder gelöscht Ich nehme an darauf bezog sich der
„GAU“.

Nicht allein, der GAU ist:

Mit VBA wird nun eine neue Tabelle (für jede Auftragsnummer) erzeugt.

Bei den Artikeln handelt es sich um Meßstellen eine
Industrieanlage mit all ihren Komponenten. Ich hielt „Artikel“
für verständlicher.

„Meßstellen“ sind für mich auch verständlich, ich komme aus diesem Bereich :wink:

Und selbstverständlich benutze ich Fomulare für die
Ein/Ausgabe.

ok, war aber nicht ersichtlich.

Meim VBA Ansatz war folgender:

Dim Stk as Long , A as String :
Stk = DCount("*",„abf_EineAbfrage“,"[Typ]= ‚YS‘")

oder „dynamisch“ und etwas modifizierte Abfrage (wobei ich den Left Join auf dieselbe Tabelle nicht verstehe…:

Dim strSQL as String, lngStk as long, ANr as String
ANr =„AuftragNr4711“
strSQL „=Select Count(*) as Anz From " & ANr & " Where [Typ]= ‚YS‘“
Currentdb.Querydefs(strAbfName).SQL = strSQL
lngStk = nz(DLookup(„Anz“,strAbfName ),0)

Bin VBA Autodidakt.#

Ok, weiter lernen…

hier noch eine andere VBA-Möglichkeit

’ Verweis auf DAO3.6 setzen
Dim tblName as String, strSQL as String, lngStk as long, ANr as String
tblName=„AuftragNr4711“

strSQL „=Select Count(*) as Anz From " & tblName & " Where [Typ] = ‚YS‘“
lngStk = nz(Currentdb.Openrecordset (strSQL, dbOpenSnapshot)(0),0)

Deine Antwort hat mich zwar nicht weitergebracht

naja, sie soll Dich ja auch nicht auf diesem Weg weiterbringen, sondern Dich zum Umdrehen animieren, soll heißen, die Tabelle(n) gemäß Normalisierungsregeln aufzubauen, was einen anderen (richtigen)Weg und eine Änderung des gesamten Konzeptes bedeutet.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Danke für deine Mühe

Ich werde die Datenbank umbauen.
Das Auszählen einer Abrage ist auch für mich nicht das Problem gewesen.

Dim Stk as Long, A as String:
Stk = DCount("*",„abf_EineAbfrage“,"[Typ]= ‚YS‘")

Die Abfrage soll aber zur Laufzeit erstellt werden und besteht aus der Tabelle Auftragsnummer und der Tabelle Allgemein. Wobei der Name der Tabelle Auftragnummer sich ständig ändert, für jeden Auftrag. Die Tabelle enthält neben den beauftragten Meßstellen (Tag-Nummern) auch Infos zum Auftrag (z.b. Meßstelle Geprüft Ja/Nein).

Danke Franz

Gruß
Werner

Hallo,

dann nimm doch mein Beispiel mit dem OpenRecordset. Dort kannst Du gleich einen SQl-String benutzen und brauchst keine gespeicherte Abfrage(n) und das Dcount-Getönse…

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz
Mit der SQL Abfrage hat es geklapt.

A = Auftragsnummer
strSQL = „Select Count(*) as Anz _
From „A“ " LEFT JOIN Allgemein ON [“ & A & „.MSR_ID = Allgemein.MSR_ID WEHRE [Typ] = ‚YS‘“
Stk = NzCurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)(0),0)

Danke
Wieder was dazugelernt!!!