Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

In einem Feld Werte mehrer Listen-Felder addieren

Begonnen von neni, Oktober 12, 2011, 15:34:25

⏪ vorheriges - nächstes ⏩

neni

Hallo!

Es wurde zwar kürzlich eine ähnliches Thema diskutiert, ich kam aber mit den Antworten leider nicht weiter und nach studenlangem try-and-error geb ich auf und stell mein Problem auch hier rein...

Ich habe ein Formlar, auf welchem ich diverse Auswertungen mache. Hierfür habe ich Listenfelder eingefügt, in welchen jeweils unter Datensatzherkunft mit einem Select Count(*) as Ausdr1etc den jeweiligen Wert aus den Tabellen ermittle. In der "Liste" ist also jeweils nur ein nummerischer Wert.

z.B:
Listenfeldname    Wert nach Select Count(*)
CF_MDD:             54
CF_ONKP:           4
Pending:             1

So weit, so gut.
Nun würde ich gerne mehrere dieser Ergebnisse in ein neues Feld addieren (ich könnte dieses neue Feld auch mit einem Listenfeld und Select Count(*) erstellen, jedoch wird dieser select irgendwann sehr komplex...)

Ich habe versucht, hierfür ein Textfeld einzufügen, in welchem  =[CF_MDD]+[CF_ONKP]+[Pending] addiert werden. Das führt zu einem Leeren Textfeld.  Werden CF_MDD etc. nicht als nummerischer Werte erkannt? Was muss ich ändern?

PS: Ich möchte die jeweiligen Select Count(*) nicht als einzelne Abfragen speichern, da es duzende sind, welche ich einzig in diesem Formular benötige, daher hatte ich Listenfelder verwendet, damit die Abfrage direkt im Feld hinterlegt werden kann. Vielleicht mache ich alles viel zu kompliziert oder einfältig, bin um jeden Tip zur Verbesserung dankbar!  ;D

MzKlMu

Hallo,
wozu eine Listenfeld und wozu eine Abfrage?
Du kannst in einem Feld direkt zählen.

=DomAnzahl("*";"Tabellenname_A")
Als Steuerelementinhalt eine Textfeldes.
Die Felder kannst Du dann in einem neuen Feld addieren.

=Textfeld_A + Textfeld_B + Textfeld_C

Gruß Klaus

neni

weil das Zählen z.B. so aussieht:
SELECT Count(*) AS Ausdr1
FROM Attribute INNER JOIN Candidate ON Attribute.AttID = Candidate.[Tox-Recorded]
WHERE (((Candidate.[Sample-State])=71) AND ((Candidate.Analysis)<>14) AND ((Candidate.study)<>99) AND ((Exists (select * from Sample where candidate.patstudID = sample.patstudFI and sample.aliquot > 171))<>False) AND ((Exists (select * from PathwaySNP where candidate.patstudID = PathwaySNP.patstudFI ))=False))

und weil ich mit SQL umgehen kann, mit dem Ausdruchs-Generator aber nicht  ;)  ::)  hab mir nicht anders zu helfen gewusst...

wäre es theoretisch möglich, die listenfelder-ergebnisse zusammenzuzählen...?

database

Hallo,

Zitatwäre es theoretisch möglich, die listenfelder-ergebnisse zusammenzuzählen
JA...wenn die Listenfelder ALLE gleich formatiert sind - 1 Spalte, 1. Spalte gebunden, Listenfelder benannt

Dim Ergebnis as Double

Ergebnis = NZ(Listenfeld1,0) + NZ(Listenfeld2,0) + NZ(Listenfeld3,0)
Me!Ergebnisfeld = Ergebnis

....

oder das Ergebnis ohne Umweg über die Variable dem Feld zuweisen

Me!Ergebnisfeld = NZ(Listenfeld1,0) + NZ(Listenfeld2,0) + NZ(Listenfeld3,0)


Eine Andere Möglichkeit wäre es beim Laden oder Öffnen des Formulars in der entsprechenden Ereignisprozedur
die Abfrageergebnisse zu ermitteln und Variablen zuzuordnen, die Werte werden anschließend in die vorgesehehn Textfelder des Formulars übertragen.
Die Listenfelder im Formular werden hierbei jedoch nicht benötigt


Private Sub DeinFormular_Open()

Dim db As Database
Dim rst As DAO.Recordset
Dim lngCount As Integer
Dim strSQL As String

Dim Ergebnis1 as Long, Ergebnis2 As Long, Ergebnis3 As Long  'Soviele du eben benötigst

Set db = CurrentDb

strSQL = "SELECT Count(*) AS Erg1 " & _
              "FROM Attribute INNER JOIN Candidate ON Attribute.AttID = Candidate.[Tox-Recorded] " & _
              "WHERE (((Candidate.[Sample-State])=71) AND ((Candidate.Analysis)<>14) AND ((Candidate.study)<>99) " & _
              "AND ((Exists (select * from Sample where candidate.patstudID = sample.patstudFI and sample.aliquot > 171))<>False) " & _
              "AND ((Exists (select * from PathwaySNP where candidate.patstudID = PathwaySNP.patstudFI ))=False));"

Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
'Ergebnis der Abfrage der Variablen zuordnen
Ergebnis1 = NZ(rst!Erg1,0)
'Recordset vernichten
Set Rst = Nothing

strSQL = "SELECT Count(*) AS Erg2 " & _
              "FROM IrgendeinerTabelle INNER JOIN eineAndere ON ID= eineAndere.ID " & _
              "WHERE ..-.. ;"

'neue Abfrage auswerten
Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
Ergebnis2 = NZ(rst!Erg2,0)
'Recordset vernichten
Set Rst = Nothing

...
..
.

Me!FeldFuerErgebnis = Ergebnis1 + Ergebnis2 + Ergebnis3



Macht natürlich auch nur dann Sinn, wenn sich die Abfragen bzw. deren SQL nie ändert!

neni

vielen herzlichen dank für die detailierte auskunft! da werd ich mich mal austoben...  8)