vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 10.04.13 13:01

Grüße Euch,

möchte fragen wie viele Case-Abfragen man in einer Select-Case Konstruktion zw. Select und Case Else
legen kann?
Bis zur ersten Case Select habe ich 183 versch. Case Positionen zur Entscheidungsauswahl. Erst danach gehe ich zur Case Else für eine Meldungsausgabe und beende ich mit End Select.

Zur Verdeutlichung:
Select Case UCase(Replace(NobodyStr, " ", ""))
Case "XY": c = Array(0.633, 0.612, 0.548, 0.521, 0.494, 0.402, 0.333, 0.245, 0.303, 0.366, 0.519, 0.595, 13.05833, 52.519167, 38)
.
und noch 181x ähnliche Case
.
Case "XYZ": c = Array(0.261, 0.254, 0.262, 0.249, 0.215, 0.314, 0.373, 0.382, 0.291, 0.165, 0.16, 0.217, 8.24333, 50.0630555, 149)
Case Else: MsgBox "Object Not Found!": End: Exit Sub 'stop:
End Select

Mehr als 183 Case kann ich nicht hineinlegen, denn beim kompilieren bricht das Programm mit "procedure too large" ab.

Hat wer Idee?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Zardoz
Datum: 10.04.13 13:33

Hallo Michael,
das liegt wahrscheinlich nicht an Select Case,
sondern an der Codelänge im Modul (max. 64Kb).

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 10.04.13 14:05

Hallo Zardoz,

habe mir fast gedacht. Die Inhalte bei den Case's in den Array() müssen immer aus 14 ähnlich gearteten Datenteilen sein.
Die ersten 2-3 gehen, aber die nächsten nicht.
Nun, wie kann ich in dieser Select-Case Anweisung das folgende Skelett aufbauen?
1. Bereich hat 155 Case's
2. Bereich hat 16 Case's
3. Bereich hat 9 Case's
4. Bereich hat 6 Case's
5. Bereich hat 3 Case's.

und wenn ich beim Suchvorgang nichts in diesen Bereichen finde, dann gehe ich zur MsgBox-Meldung, wie oben bereits gezeigt habe?

Gruß
michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Blackbox
Datum: 10.04.13 17:34

Hi,

VB ist eine ooP - Sprache. Warum nimmst Du keine Collections?

Eine Case wäre ein Key einer Collection und einer collection ist es egal, wieviele Arrays Du unter einen Key schreibst.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 10.04.13 20:05

Hallo Zardoz,

Ja, nach durchlesen der Möglichkeiten, muss ich sagen, dass für mein Vorhaben die Collections Class geeigneter sei.
Habe mitunter hier auf vbarchiv eine Schritt für Schritt Beschreibung gefunden:
http://www.vbarchiv.net/workshop/workshop_39-oop-objektorientierte-programmierung.html
OOP - Objektorientierte Programmierung

Beim Zugriff auf die Daten schreibt man hier:
Mit der Add-Funktion lassen sich jetzt zwar beliebig viele Datensätze speichern, aber irgendwie müssen wir ja auch wieder an die Daten kommen. Dafür legen wir uns jetzt eine Property (Eigenschaft) an, die uns die Daten eines bestimmten Datensatzes zurückgibt. Von welchem Typ muss die Eigenschaft jetzt sein? Let oder Get oder Set ??? Korrekt: GETItem:

Public Property Get Item(ByVal Index As Long) As Personen
' Bestimmten Datensatz der Collection zurückgeben.
' Der Datensatz wird über die Position (Index) "angesprochen".
Set Item = mCol(Index)
End Property

Verstehe ich es richtig? D.h. wenn ich aus einer cbo-Auswahlliste einen XY-Element auswähle, so habe ich ja dessen Index. Und mit diesem Index kann ich dann auf die zug. Daten in der Collection verweisen um die Details hiezu zu holen?
Darauf kommt es an.
Klar, dass die Reihenfolge beider Listen identisch sein müssen.

Beim hinzufügen von neuen Datensätze habe ich noch eine Frage.
Wo es heißt:
' Weiteren Datensatz hinzufügen
Personen.Add "Vampire", "666", Date

Dass es über die öffentliche Funktion Add geht ist mir klar, aber was bedeutet am Ende "Date" ohne etwas?

Gruß
Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Blackbox
Datum: 10.04.13 20:10

Hi,

das meint: VB (VBA) ist eine ooP Programmiersprache. Verstehe Du, was Objekte sind und wie man sie oop-Like verwaltet. Select Case ist eine uralte Bedingungsabfrage (Als Fall ...) die nur noch in rudimentären Fällen angewendet werden sollte.
Tatsächlich willst Du aber komplexe Daten bei einem Bestimmte Fall = Key zuweisen, das ist in ooP anderst zu lösen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 10.04.13 20:35

Hallo Blackbox,

ja ich arbeite mit Visual Studio 6.0. ProEd. Bisher bin ich mit der Select Case-Anweisung auch hier ausgekommen (siehe oben meine erste Anfrage von hier).
Doch jetzt mache ich etwas Größeres als Erweiterung, in dem ich einem aus einer Liste gewähltem Element gleich 14 Daten für weiteren Berechnungen übergeben möchte (dies geschah bisher mit Array-Zuweisung. Doch jetzt durch die Erweiterung sind die Elemente in der Liste auf mehr als 200 gewachsen (und es könnten evtl. noch mehr werden) und kam mit der Select Case nicht mehr weiter. Deshalb suche ich hier nach Lösungen und frage bei Euch nach.

Bei mir gibt es zuerst eine Vorauswahl in einer CboBox und anhand dieser ersten Auswahl lade ich in eine Listbox die zugehörigen Elemente X, Y...Z, diese sind derzeit über 183. Und diese 183 Elemente haben dann jew. 14 Daten, die ich zur weiteren Berechnung auslesen muss.

ich hoffe, habe mich verständlich ausgedrückt.

Gruß
Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: benne
Datum: 08.05.13 16:17

Hallo Michael,

du versuchst, mit harter Programmierung ein eventuell dynamisches Problem zu lösen.
Das kann auf Dauer nicht gut gehen.

Ich versuche mal, dein Problem, wie ich es verstanden habe, mit anderen Worten nochmals zu zeigen.

Du hast bestimmte Kriterien, die gegeneinander abgefragt werden müssen.

Kriterium 1: Geschlecht
Männlich, weiblich, unbestimmt

Kriterium 2: Altersstufe
bis 10, 10-20,21-30 ....

Kriterium 3: Haarfarbe
Schwarz, blond, braun, rot, brünett, Glatze ...

uns so weiter.

Nun willst du eine Kombination aus allen Kriterien abfragen.

Also :
Männlich, 21-30 Jahre, blond
weiblich, 41-50 Jahre, Glatze

Wie ist festgelegt, welche Einzelkriterien verglichen werden sollen ?

Zu den Collections:

mach ein Klassenmodul: cls_Kriterium
Public ID_Kriterium as long ' als eindeutige Nummer
Public strKriterium as string ' hier steht dann z.B. "Brünett"
public bolMerkmal1 as boolean
public bolMerkmal2 as boolean
public lngEntscheidungslevel as long
mach eine Collection:
dim colHaarfarben as collection
.
.
set colHaarfarben = new collection
Dann kannst du aus einer Tabelle alle Kriterien in die Collection laden.
set cls_Kriterium = new collection
with clsKriterium
   .ID_Kriterium = 4711
   .strKriterium = "blond"
   .bolMerkmal1 = True
   .lngEntscheidungslevel = 5
end with
Dann die Klasse an die Collection anfügen:
colHaarfarben.add cls_Kriterium, "ID:4711"
Wenn du nicht gezielt auf ein item zugreifen willst, dann kannst du auf die Angabe des "key" verzichten.

Nachher kannst du die Collection wieder durchgehen:
for each cls_Kriterium in colHaarfarbe
   Debug.print cls_Kriterium.strKriterium
next
Durch die Schachtelung der verschiedenen Klassen kannst dann für jede Kombination eine Abfrage machen, und irgendwie entscheiden, was passieren soll.
Die weiteren Felder in der Klasse können dabei vielleicht helfen.

Bitte nicht vergessen:
Alles was mit "Set" zugewiesen wurde, nachher auch wieder mit "set xxx=nothing" korrekt terminieren.

Vielleicht hilft dir das weiter.

Gruß
Bernd


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 08.05.13 17:35

Hallo Bernd,

zuerst hast vielen Dank von mir, dass Du dich meiner Sache angenommen hast.
Dass ich mittlerweile an die Grenze der Möglichkeit mit der Select-Case gestoßen bin, habe ich leider gemerkt.
Als Kriterien sind nur zwei wonach ich die dahinterliegenden Daten holen muss.
Meine Sätze bauen sich wie folgt auf:

Staat und Ort:-> Die Auswahl erfolgt durch Listboxen

Stadt:12 meteorologische Werte (Cloud Factoren)/3 geografische Werte des Ortes in array wie unten:

Case "BUDAPEST": c = Array(0.397, 0.377, 0.395, 0.345, 0.273, 0.205, 0.219, 0.206, 0.178, 0.164, 0.244, 0.36, 19.6825, 47.498333, 113)

Der User wird erstens das Land auswählen und dann laden sich dementsprechend die zugehörigen Städte bzw. Ortschaften zur weiteren Auswahl in die Auswahlliste ein.
In der Datenbank habe ich für Ungarn z.B. bereits 155 Städte mit ähnlichen Werten vorgegeben. Für Österreich habe 9, für Rumänien 4 und für Serbien 3 ähnliche Sätze; mehr konnte ich wg. der begrenzten Fähigkeit von Select-Case nicht erstellen.
Jetzt kämen also noch die angrenzenden Länder um Ungarn herum und Deutschland dazu. Und Select-Case steht auf dem Kopf.
Ich möchte dem User die Möglichkeit geben auch selber neue Städte/Orte mit diesem Typ Datensatzaufbau die Datenbank zu erweitern.
Also wenn er zwar Ungarn ausgewählt hat, aber der gewünschte Ort noch nicht in der Datenbank ist, so kann er einen neuen Ort und die gleiche Menge Werte eingeben und abspeichern und dann damit weiterarbeiten. Somit erweitert sich die jew. Datenbank. Aber mit Select-Case würde das schon mal wg. der Datenmenge nicht gehen.

Klassenmodul mit Collection habe ich noch nie erstellt, daher ist für mich diese Ausarbeitung Neuland.
Wenn ich eine Collection erstellen will, soll das heißen, dass ich dafür eine extra (Excel bzw. Access) Tabelle erstellen und mitschleppen muss?

Was denkst Du, wie könnte ich diese bewerkstelligen?
Gruß
Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Franki
Datum: 09.05.13 02:27

Hallo Michael,

du sprichst von Datenbank, welche Datenbank verwendest du denn? Bzw. woher kommen die entsprechenden Daten beim Programmstart jetzt?

Select Case, Collection usw. sind da erst mal gar nicht nötig.

Solche Sachen macht man mit SQL Abfragen auf die Datenbank. Simples Beispiel stark verkürzt: Du hast in der DB eine Tabelle Länder. Diese liest du beim Programmstart aus und füllst z.B. ein DropDown wo der User das Land auswählen kann. Wenn er da "Ungarn" auswählt kommt eine SQL Abfrage auf die Orte in Ungarn.

SQL = "Select Ort, ... Where Land = 'Ungarn'"
Damit hast du alle Orte in Ungarn in z.B. einem zweiten DropDown. Wenn der User dort einen auswählt, ziehst du dir mit einer weiteren SQL Abfrage die dazugehörigen Daten zu diesem Ort.

Usw., usw. du hast alle Möglichkeiten von SQL zur Verfügung um durch die User Datensäzte hinzufügen zu lassen, zu ändern oder auch zu löschen.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 09.05.13 05:59

Hallo Frank,

es ist keine wirkliche Datenbank.
Die Datenreihen habe ich nach meinem Bedürfnis aus 12 CF-Werten für 12 die Monaten bzw. Längen- und Breitengrade sowie Seehöhe des Ortes selbst zugeschnitzt. Die CF-Werte habe ich mittels METEONORM geholt und diese dann aufbereitet.
Wäre auf eine Begrenzung gar nicht erst darauf gekommen, wenn ich die Sätze nicht selber erweitert hätte. Denn anfangs habe ich gedacht, das ich die Eingabe dem User überlasse, jedoch fand ich eine kleine sog. Datenbank als Vorgabe komfortabler.

Also deiner Aussage nach müsste ich mit einer wirklichen Datenbank, sprich mit SQL arbeiten womit ich erweiterbar und flexibel sein kann.
Wäre es zuviel verlangt, wenn Du mir diese Lösung mit einem kleinen Beispiel beschreibst?
Wäre dir dafür dankbar.

Gruß
Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Franki
Datum: 10.05.13 02:33

Hallo Michael,

Zitat:


es ist keine wirkliche Datenbank.
Die Datenreihen habe ich [...] selbst zugeschnitzt. [...] Denn anfangs habe
ich gedacht, das ich die Eingabe dem User überlasse, jedoch
fand ich eine kleine sog. Datenbank als Vorgabe komfortabler.


Soweit so gut, aber wo genau hast du denn jetzt die Daten stehen die du in deinem Select Case verwendest? Werden die aus einer Textdatei, Ini-Datei, XML-Datei oder was auch immer ausgelesen oder hast du das fest im Programmcode stehen irgendwo?

Zitat:


Also deiner Aussage nach müsste ich mit einer wirklichen
Datenbank, sprich mit SQL arbeiten womit ich erweiterbar und
flexibel sein kann.
Wäre es zuviel verlangt, wenn Du mir diese Lösung mit einem
kleinen Beispiel beschreibst?


SQL bietet sich da an. Da du mit VB6 arbeitest würde sich eine Access DB (*mdb) Datei anbieten bzw. völlig ausreichend sein in Verbindung mit ADO. Du kannst aber auch ganz ohne DB-Datei mit ADO bzw. SQL arbeiten. ADO Recordsets funktionieren auch ohne DB-Datei. Deswegen meine Frage woher die Daten jetzt kommen.

Ein passendes Beispiel ist schwierig, das Grundprinzip habe ich dir ja schon genannt. Da bräuchte man mehr Informationen über deine Datenherkunft und deinen Kenntnisstand in Sachen Programmierung / DB.

Wenn du möchtest, kannst du mir mal das was du jetzt hast per PM schichken, an dem fachlichen Thema habe ich Interesse weil ich das evtl. demnächst brauchen kann. (Bitte komplett zippen)

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 10.05.13 05:13

Hallo Frank,

diese Daten habe ich fest im Programmcode drinnen, nachdem ich diese extra zusammangebastellt habe. Die Erstellung ist nicht schwierig nur zeitraubend, da man aus mehreren Quellen arbeiten muss. Jedoch stellt sich nun heraus, dass man diese so nicht erweitern kann und auch problematisch ist.
Irgendwann mal habe ich Instandhaltungprogramm für Klimageräte und raumlufttechnische Anlagen mit vorbeugender Wartung in Access programmiert. Dort habe ich DB verwendet. Aber das war vor gut 12 Jahren. Seitdem habe ich Access nicht mehr gebraucht. Aber etwas Kenntnis ist noch geblieben.

Würde Dir das funktionierende Programmteil auch in Quellcode gerne zusenden. Habe mit dem Verpackungsassistent auch die zum laufen benötigten Dateien dazu erstellt, sodass es auch auf anderen Windowsrechnern ohne weiteres läuft.
Da ich bisher aber keinerlei Dateien hier verschickt hatte, kenne ich mich leider nicht aus, wie ich es machen soll.

Eine kurze Einweisung Vielleicht?

Gruß
Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Franki
Datum: 11.05.13 03:54

Hallo Michael,

hier über das Forum funktioniert das nicht mit dem Verschicken von großen Dateien. Dafür ist ein Forum auch nicht gedacht. Das kannst du an meine E-Mail Adresse schicken ganz unabhängig hier vom Forum.

Wenn du Dateien für alle User des Forums bereitstellen möchtest kannst du die irgendwo auf einen Webserver laden und den Link dazu hier nennen.

Gruß
Frank

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 11.05.13 04:46

Hallo Frank,

E-Mail an die Kontaktadresse im Benutzerprofil angegebenen Link ergangen.

Gruß
Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Franki
Datum: 12.05.13 03:21

Hallo Michael,

E-Mail ist angekommen, ich habe soeben geantwortet.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Michael_HU
Datum: 12.05.13 06:19

Hallo Frank,

Source-Code gepackt zugesendet.

Gruß
Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Max. Anzahl der Case in einer Select-Case-Abfrage? 
Autor: Franki
Datum: 13.05.13 02:09

Hallo Michael,

ist angekommen, Rest siehe E-Mail.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel