Neuigkeiten:

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

Mobiles Hauptmenü

Berechnung über SQL & While-Schleife und Ausgabe auf Formular???

Begonnen von Barry001, Juli 07, 2010, 11:19:49

⏪ vorheriges - nächstes ⏩

Barry001

Hallo,
ich steck gerade ziemlich fest. Ich kenn mich mit Access nicht wirklich aus, soll aber ein kleine Program schreiben. Ich hab es davor in PHP geschrieben und es funktioniert, bringt uns aber nichts da es in Access sein muss.

Das ganze sieht so aus, ich habe eine Tabelle in denen die Berufe und die Anzahl der freien Stellen gespeichert sind.

In einer weiter Tabelle sind die Personen und der gewählte Beruf gespeichert.

Es soll dann berechnet werden wieviele Stellen noch verfügbar sind.

In PHP sieht das ganze so aus.


<?php
  mysql_connect
("","root");
  
mysql_select_db("agentur"); 
  
  
// Anzahl aller Berufe ermitteln und ausgeben
  
$res1 mysql_query("select * from beruf order by beruf asc");
  
$num1 mysql_num_rows($res1);
  
  echo 
"<h2>Es gibt $num1 verschiedene Berufe.</h2>";
  
  echo 
"<table>";
  echo 
"<tr><td><b>Beruf</b></td><td><b>Pl&auml;tze</b></td></tr>";
  
   while (
$dsatz mysql_fetch_assoc($res1))
  {     
      
// Anzahl der belegten Stellen zu einem Beruf
      
$sqlab2 "select beruf from person where beruf like '" .$dsatz["beruf"] . "'";
      
$res2 mysql_query($sqlab2);
      
$num2 mysql_num_rows($res2);
      
      
$erg $dsatz["anzahl"] - $num2;
      
      
// Ausgabe des Berufs und der freien Stellen
      
      
echo "<tr>";
      echo 
"<td>".$dsatz["beruf"]. "</td><td align='right'>$erg</td>";
      echo 
"</tr>";
  }
  echo 
"</table>";
  
?>



Doch in Access hab ich keine Ahnung wie ich das anstellen muss. Meine bisherigen Codschnippsel sehen so aus:


Dim erg As Integer
Dim anzPer As Integer
Dim anzBeruf As Integer
Dim be As String

all = "SELECT Count(*) AS AlleBerufe FROM Berufe"
Me.RecordSource = all
Me!txt_Anzahl.ControlSource = "AlleBerufe"

be = "SELECT Beruf From Berufe"
anzBeruf = "SELECT Anzahl From Berufe"

While (be)
anzPer = "SELECT Count(*) AS anzBeruf FROM Personen WHERE Beruf LIKE = be"
erg = anzBeruf - anzPer
Wend
End Sub


Mir ist klar das dass so noch nicht funktionieren kann, ich weis aber auch noch nicht wie ich das hinbekkomme.

Am Ende sollen dann die ganzen Daten auf dem Formular ausgegeben werden.
Untereinander, etwa so.

Beruf | freie Stellen
Feuerwehr | 7
Polizei | 8
TV-Studio | 5
Müllabfuhr | 16
...

Auch hier weis ich nicht wie ich das anstellen soll, am liebsten würde ich alles in Label ausgeben, aber ich bin mir nicht sicher ob das geht, ansonsten muss ich wohl nen Textfeld verwenden, was aber nicht sehr schick ausssieht.

Wenn mir jemand helfen kann, bin ich drüber sehr dankbar !!!

Barry001

So ich hab jetzt diese SQL-Anweisung:

Select berufe.beruf, berufe.anzahl - count(personen.beruf) as Frei from berufe left join personen on berufe.beruf = personen.beruf group by berufe.beruf

Doch weis ich nicht wo ich diese Eintragen muss um den Beruf und die freien Stellen anzeigen zu lassen. Ich hab sie in Datenherkunft eingetragen doch kommt dann immer die Meldung:

"Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck "berufe.anzahl-count(personen.beruf)' nicht als Teil der Aggregatfunktion einschließt."

Was mach ich falsch? Muss ich noch eine Abfrage erstellen?
Aber was für eine und wie?

Bitte helft mir, bin über jede Hilfe dankbar.

oma

Hallo,

frage doch im Forum, aus dem du den Code bekommen hast!

Crossposting sind überall unbeliebt!!

Gruß Oma
nichts ist fertig!

Barry001

SELECT Berufe.Beruf, Berufe.Stellen-P.BesetzteStellen AS FreieStellen FROM Berufe, (SELECT Personen.Beruf, Count(Personen.name) as BesetzteStellen FROM Personen GROUP BY Personen.Beruf) AS P WHERE Berufe.Beruf=P.Beruf;

So damit gehts schon fast, doch jetzt will ich das auch die Berufe angezeigt werden, die noch keine Person gewählt hat.

Was muss ich den da ändern?