[SQL-Access]Zahlen zwischen Start-Endwert ermitteln

ope

Grünschnabel
Hi,

Wir haben ein Problem, wir muessen eine Datenbank erstellen, um Sever in Serverschraenken zu katalogisieren. Das laeuft auch soweit schon sehr gut, wir haben nur noch ein Problem, und zwar sollen unteranderem dort auch die verschiedenen Server in den entsprechenden Schraenken eine Positionsangabe verpasst werden. Der Umkehrschluss ist, dass man die Slots sehen kann, die noch frei sind(nicht nur einfach die Anzahl). Als entsprechende Daten haben wir: Die Schrankgroesse(Units), Startunit eines Servers und wieviele Units er beansprucht.

Dies waeren z.B.:
Schrankgroesse: 42 Units
Startslot der Servers: 4. Unit
Benoetigt: 5 Units

Endet also bei 8, somit waere 9 der naechste freie Slot.

In dem Beispiel waeren also Slot 1-3 und 9-42 frei.

Dies muesste dann auch so ausgegeben werden.

Natuerlich sind normalerweise mehr Server in einem Schrank. Also im Durchschnitt ca. 8, also muesste man auch dementsprechend freien Platz berechnen koennen.

Ich weiss dies ist ein komplexes Problem, aber ich hoffe mal ihr koennt mir etwas helfen ;)

Wenn weitere Infos benoetigt werden, einfach fragen, wir zerbrechen uns hier derweil auch den Kopf :p


MFG ope
 
Also ich hätte folgenden Ansatz:
1. (als Subselect von 2.) alle belegten Plätze eines Schrankes zurückgeben
2. alle möglichen Plätze des Schrankes ohne Plätze aus 1. zurückgeben

Ich wüsste jetzt nicht, wie man es ohne löst, daher würde ich dafür eine zusätzliche Tabelle bauen, die nur die Zahlen von 1 bis zur höchsten Nummer eines Slots durchgehend beinhaltet.

Das ganze ist aber SEHR rechenintensiv !
 
hmm... an sowas ähnliches hab ich auch schon gedacht bin aber kein profi in access bzw. vb.

haste vielleicht ne art syntax bzw. vorgehensweise für die rechnung? oder noch nen paar weitere tipps ;)

Mfg
ope
 
Hallo,
ich bin auch kein "profi in access". Mein lösungsansatz wäre z.B. eine Hilfstabelle mit einer Spalte "Platznummer" in der alle möglichen Zahlen für die Serverplätze stehen. ALso z.B. 1,2,3, ... 50.
Dann könntest du ungefähr so selektieren:

select Platznummer
from Hilfstabelle
where platznummer
not in (select slotnummer from Schranktabelle)

Da ich von Access sozusagen "keine Ahnung" habe, müsstest Du die richtige Syntax für not in(...) selbst herausfinden.

mfg mschuetzda
 
Hatte ich übrigens erwähnt, dass ich auch kein "Doktor Allmächtig" in Access bin? :)

mschuetzda, unser Ansatz ist da gleich. das Problem ist ja, dass die Slotnummern nicht durchgehend in irgendeiner Tabelle stehen.
Das mit einem einzigen Selectstatement abzufrühstücken, ist m.E. ziemlich Haarsträubend.

ope, am einfachsten machst du dir ein Array in vb, in das du alle Servernummern des Schrankes schreibst (1.Select).
Dann machst du ein 2. Array, in das du durch alle hintereinanderfolgenden Selects alle Nummern einträgst, die belegt sind. also für jedes Element des 1. Arrays einmal "SELECT Nummer FROM Hilfstabelle WHERE Nummer BETWEEN (SELECT Startslot FROM Server WHERE ServerNr="+server[i ]+") AND (SELECT (Startslot + Benoetigt) AS Endslot FROM Server WHERE ServerNr="+server[i ]+")
Durch Negation der belegten Plätze im 2.Array bekommst du alle verfügbaren. :)
 
Hertzlichen dank, das werde ich ehuet abend gleich mal probieren ...

muss jetzt erstmal wieder in den serverraum server inventarisieren, damit ich auch daten fuer die db hab :)

MFG ope
 

Neue Beiträge

Zurück