dBASE-Programm aus DOS nach Windows ?

Hallo Leute,
ich habe vor fast 20 Jahren für einen kleinen Kundenkreis eine maßgeschneiderte Hausverwaltung geschrieben. dBASE für DOS war damals für mich das ideale Entwicklungswerkzeug. Diese Hausverwaltung ist heute noch im Einsatz und die Leute wollen auch nichts anderes.
Mehrere Versuche, das Programm für Windows umzuschreiben, habe ich gemacht und verworfen. Z.B. mit dBASE für Windows, das inzwischen ja auch tot ist.
Jetzt habe ich mir Visual dBASE und dBASE SE von dBASE-Systems angesehen. Das sieht ja recht passend für mich aus, scheint aber auch so ein Mauerblümchen zu sein (?)

Eine Alternative scheint Visual Basic zu sein. Damit müsste ich allerdings alles neu schreiben, um die gleich Funktionalität wie in der dBASE-Hausverwaltung zu haben (schluck).
Habe auch schon ein bisschen mit Visual Basic 6 herumprobiert und bin auch prompt auf die ersten Schwierigkeiten gestoßen. Hier meine konkrete Frage:

Mein Startfenster enthält ein Zeilen-Menü mit den Kalenderjahren. Links das aktuelle Jahr 2004 und rechts davon mehr oder weniger zurückliegende Jahre. Unter jedem Menüpunkt öffnet sich ein Popup-Menü mit den einzelnen Häusern bzw. Mietobjekten.
Ich könnte in Visual Basic dieses Menü ohne weiteres mit dem Menüeditor erstellen, das ist aber nicht die Lösung. Stattdessen muss das Hausverwaltungsprogramm bei jedem Start dieses kundenspezifische Menü erstellen.
In der DOS-Version habe ich die Menüstruktur in einer dBASE-Tabelle abgelegt. Beim Programmstart habe ich daraus das Menü zusammengestellt und dann aufgerufen.
Kann ich sowas in Visual Basic auch machen? wie?

Meine allgemeine Frage: Soll ich doch lieber in dBASE Welt bleiben, um den Migrationsaufwand klein zu halten? siehe http://www.dbase-systems.de/index.html

Vielen Dank vorab
Dieter

Hi!

Ich könnte in Visual Basic dieses Menü ohne weiteres mit dem
Menüeditor erstellen, das ist aber nicht die Lösung.
Stattdessen muss das Hausverwaltungsprogramm bei jedem Start
dieses kundenspezifische Menü erstellen.
In der DOS-Version habe ich die Menüstruktur in einer
dBASE-Tabelle abgelegt. Beim Programmstart habe ich daraus das
Menü zusammengestellt und dann aufgerufen.
Kann ich sowas in Visual Basic auch machen? wie?

Kurz vorweg: Ich habe vor drei Jahren ein ähnliches Problem gehabt. Da ging es um Kassensysteme (Point-Of-Sale), die von dBase unter DOS auf Windows umgestellt wurden. Ergebnis: Es geht. Und keiner der 400 Kunden wollte nach einer kurzen Eingewöhnungszeit zurück zum DOS-System (vielleicht auch, weil eine Touch-Screen-Anwendung komfortabler ist als mit Tastatur zu arbeiten - wer weiß :wink: )

Zu deinem Problem:
Selbstverständlich ist es möglich, die Menüstruktur kundenspezifisch über Tabellen darzustellen. Dazu gibt es zwei Möglichkeiten:

Möglichkeit 1 (die unschöne, aber leichtere):
Du legst zwei Menü-Einträge in der Action Bar an (laufendes Jahr, nächstes Jahr). Im Pulldown legst du Dummy-Einträge an (10, 20 oder wie viele auch immer). Die haben einen Namen (zb. PD1_01 … PD1_20) und einen Text (jetzt erstmal nur „Dummy01“ … „Dummy20“). Alle Pulldowns werden auf „unsichtbar“ gestellt. Beim Programmstart liest du den Tabelleninhalt (so wie ich es verstanden habe, sind das die einzelnen Häuser) und weist den gelesenen Wert der Reihe nach den Pulldowns zu. Mit der Wertzuweisung wird der Pulldown-Eintrag dann auf sichtbar gesetzt.

Das Ergebnis: jeder Kunde hat eine andere Anzahl von Pulldown-Menüs in seiner Anwendung, und zwar genau mit den Namen, die aus der Datenbank kommen.

Möglichkeit 2 (die schönere, aber schwierigere):
Du erzeugst zur Laufzeit die Pulldowns dynamisch (in VB kannst du so ziemlich alles an Oberflächen-Elementen dynamisch auf den Dialog legen bzw. erzeugen). Die Kenntnisse dazu über Objekterzeugung sind dann aber gefordert. Das ist programmtechnisch schöner als die erste Lösung, aber auch komplexer und zeitaufwendiger - sowohl in der Laufzeit als auch beim Programmieren.

Es kommt aber noch ein anderes Problem hinzu. VB kann zwar problemlos dBase-Tabellen einlesen, ist dabei aber relativ langsam (die DB-Engine ist eben nicht primär auf dBase ausgerichtet). Das sind Erfahrungen auf meinem damaligen Projekt. Wenn du die Daten z.B. nach Access bringst, läuft die Anwendung spürbar schneller. Und keine Angst: deine Kunden brauchen dafür keine Access-Lizenz zu erwerben. Access-Datenbanken sind im Grunde nichts weiter als Dateien mit der Erweiterung *.MDB. Die Access-Lizenz ist nur für die Access-Anwendung erforderlich. Mit VB darfst du so viele MDB-Dateien erzeugen und ausliefern, wie du möchtest. Die Zugriffe werden nicht von Access, sondern von der DB-Engine des VB gesteuert, und die ist Bestandteil des Auslieferungspaketes an die Kunden.

Für dich musst du nur entscheiden, wie fit du in VB bist. Wenn deine Kunden sonst auch mit Windows-Systemen arbeiten (z.B. Textverarbeitung, Tabellenkalkulation usw.), dann solltest du den Schritt wagen.

Grüße
Heinrich

Hallo Heinrich,
Super-Antwort, und so schnell !! Danke schön.
Das mit dem Dummy-Menü habe ich gerade mal ausprobiert: Klappt gut und ist ok für mich.

Vor dem Datenbankproblem dBASE -> Access stand ich schon einmal und bin nicht sehr weit gekommen.
In der Hausverwaltung arbeite ich mit mehreren Tabellen, jede mit mehreren Indices. Einige Dateien sind über einen gemeinsamen Index miteinander synchronisiert.
Ich bin sicher, dass man das in Access auch hinbekommt (bisher habe ich es noch nicht geschafft).

Gerade war ich in der Buchhandlung und wollte mir das VB 6 Buch von Michael Kofler holen. Ich bekomme es morgen zugeschickt. Ich hoffe, ich komme damit zurecht.

Vielen Dank noch mal für Deine Tipps und Deine Einschätzung.
Gruß
Dieter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]