Wie Eingabe realisieren?

bernd00

Mitglied
Guten Abend,

bin noch Neu und hoffe hier das eine oder andere beizutragen. Natürlich hab ich zuerst eine Frage. Bin leider noch sehr Neu in JAVA und weiß nicht genau wie ich an das Thema rangehen soll. Meine Kentnisse in Java sind nicht gleich Null, konnte schon ein paar dingen lernen und umsetzen (z. B. Desktopanwendungen mit DBVerbindung).

Kurz erkärt worum es geht. Das Unternehmen, indem ich arbeite, hat bis vor 4 Jahren alles über Access DBs gemacht, und die Daten dann auf jeden Arbeitsplatz immer importiert und exportiert. Die Arbeitsplätze sind nicht nur lokal, sondern extern und per VPN mit uns verbunden. Leider wird nicht sehr oft auf micht gehört, aber konnte mittlerweile immerhin einen MSSQL Server integrieren und alle Neuen Anwendungen in einem Intranet realisieren. Nun will ich ein altes Access Programm umstellen, und damit die Mitarbeiter es besonders leicht haben soll es möglichst ähnlich werden. Ich will alle alten Programme auf einen zentralen DB Zugriff umstellen, damit das ewige Importieren/Exportieren aufhört. Immer nachsehen ob alle übertragen wurden, wenn nicht dann manuell noch 13 von 200 Dateien nachladen usw... Alle Mitarbeiter sind ständig über VPN verbunden, da die über die Leitung auch unseren Exchange Server und andere Dienste nutzen.

In diesem alten Programm wird von mir einmal im Monat eine Artikelliste erstellt und an die Arbeitsplätze exportiert. Wenn die mdb dort geöffnet wird, werden die Artikel automatisch importiert. Durch den SQL Server ist das schon gelöst, alle arbeiten mit denselben Artikel. Dabei sind es Monat für Monat x-Anzahl Artikel. Der Mitarbeiter muss einmal im Monat pro Artikel eine Menge angeben. Dies habe ich nun versucht im Intranet, als Website, umzusetzen und es würde funktionieren, aber ein komplett anderer Aufbau wie in Access. Meine Idee war es nun mit JAVA entweder eine Desktop Anwendung, oder ein Applet zu erstellen. Dies sollte entsprechend wie das Access Formular bedient werden können.
Das Access Formular ist ein Endlosformular mit Formularkopf und Fuß. Im Fuß ist eine Summenzeile für Menge, EK, VK usw. Das Formular zeigt direkt auf die Datensätze, gebe ich eine Menge ein und verlasse das Feld, so ist der DS gespeichert. Im Endlosformular ist neben dem Text direkt in derselben Zeile. Kann man sowas mit Java umsetzen?

Habe mir darüber natürlich schon einige gedanken gemacht und an eine JTable mit einem Textfeld in einer Spalte gedacht. Dabei würde ich beim verlassen eines Textfeldes, für diese Zeile ein Update an die DB schicken und alle verfügbaren Zeilen für die gesamtsumme addieren und unten drunter ausgeben. Oder macht es mehr Sinn für jeden Artikel ein Label und ein Textfield zu generieren, die dann unterander angeordnet sind?
In meinem Versuch das ganze mit HTML/PHP/AJAX als Typo3 Extension umzusetzen hat das zwar alles funktioniert, aber bei über 400 Artikel brauch der Browser eine Menge Zeit die Gesamtsumme zu berechnen, d.h. man springt aus einem Feld und will direkt weiter machen beim nächsten Artikel, jedoch benötigt der Browser noch eine Zeit die Gesamtsumme zu aktualisieren, und es kommt wartezeit auf. Und dann hat man eine ewiglange Bildlaufleiste usw.

Daher meine Frage an euch Spezialisten, was kann ich machen? Macht es Sinn das ganze in JAVA zu versuchen? Was schlag ihr zur Eingabe vor? Eventuell denke ich nur zu kompliziert, aber mir fällt da leider nichts ein :(

Vielen Dank für Antworten :)
 
Hallo und Herzlich Willkommen hier bei tutorials.de :)

Grundsätzlich kannst du in Java so ziemlich alles machen, die Frage ist eher ob du es kannst und ob es sich lohnt. ;) Denke somit, dass du auch dein Projekt in Java realisieren kannst, jedoch fällt mir schon mal ein Problem ein, welches du vielleicht noch gar nicht bedacht hast:
Was machst du, wenn 2 Benutzer gleichzeitig einen Datensatz bearbeiten / speichern? Das Standardverhalten ist, dass der zuerst gespeicherte Datensatz einfach vom zweiten überschrieben wird. Somit hättest du auf den Bildschirmen der Benutzer zwei verschiedene Datensätze stehen, die beiden meinen dass ihr Datensatz erfolgreich gespeichert wurde.

Deine Idee mit der JTable finde ich grundsätzlich mal okay, das mit den JLabels und JTextFields macht das ganze nur unnötig kompliziert.

Das Access Formular ist ein Endlosformular mit Formularkopf und Fuß. Im Fuß ist eine Summenzeile für Menge, EK, VK usw. Das Formular zeigt direkt auf die Datensätze, gebe ich eine Menge ein und verlasse das Feld, so ist der DS gespeichert. Im Endlosformular ist neben dem Text direkt in derselben Zeile. Kann man sowas mit Java umsetzen?
Ja, das kannst du. Für dich dürfte da das BorderLayout, das JScrollPane und eine JTable interessant sein.

In meinem Versuch das ganze mit HTML/PHP/AJAX als Typo3 Extension umzusetzen hat das zwar alles funktioniert, aber bei über 400 Artikel brauch der Browser eine Menge Zeit die Gesamtsumme zu berechnen
Das glaub ich gern, vorallem wenn der Browser dann auch noch eine Menge mit JavaScript zu kämpfen hat ;)


Gruß
BK
 
Hi, vielen Dank für deine Antwort. Die bringt mich schonmal ein Stück weiter und ich kann eine Richtung verfolgen :)

Was machst du, wenn 2 Benutzer gleichzeitig einen Datensatz bearbeiten / speichern?
In diesem Projekt würde das nicht auftauchen, da jeder MA eine eigene ID hat und die beim speichern dem DS hinzugefügt wird, damit ich genau sehen kann wer was eingegeben hat.

In diesem Fall kein Problem, aber bei zentralen Anwendungen durchaus möglich. Beim SQL Server kann ich die Tabelle einstellen, dass ein DS gesperrt wird, wenn ein andere darauf steht. Wenn ich die Datensätze nun in eine JTable lade, dann wird mir nur die Tabelle ausgelesen. Aber die Daten sind nicht an die Tabelle gebunden. So könnte der Fall eintreten, dass sich 2 gleichzeitig die Tabelle aufrufen und erst User 1 speichert und dann User 2.
Können die Datensätze an die Datenbank gebunden werden?

Mit der JTable müsste ich also dann die Tabelle mit allen Artikel auslesen und in die Spalten der eingabe ein Textfield erzeugen. Nun kann ich mir ja selbst überlegen ob die Eingaben direkt in die DB geschrieben werden, oder erst zum Abschluss wenn man einen Speichern Button klickt. Die Gesamtsumme müsste aber trotzdem nach jeder Eingabe neu berechnet werden. Denke, das sehe ich so richtig oder?
Ein Problem ist, dass die Mitarbeiter es gewohnt sind, die Eingabe mittendrin abzubrechen und später an der gleichen Stelle weiterzumachen, und die bisherigen Daten sind noch drin. Von daher sollte nach jedem Artikel in der DB gespeichert werden.

Für dich dürfte da das BorderLayout, das JScrollPane und eine JTable interessant sein.
Sehr gut, mit JTable habe ich schonmal beschäftigt, aber bisher nur mal ne checkbox in eine Spalte. Vom Prinzip her wahrscheinlich ähnlich. Aber, dann halte ich mich an die JTable. Hab mir schon fast gedacht, dass die am besten dafür geeignet ist, aber man weiß ja nie.
 
Also ich geb dazu jetzt auch meinen Senf ab.

Bisher würde ich sagen ist alles Tutti. Java kann man dazu verwenden und Swing ist auch größtenteils dienlich.

Bei der Sache mit 2 Nutzern gleichzeitig auf ein datensatz hast du aber etwas missverstanden. Die Frage ist, was passiert wenn er SQL Server gerade ein Datensatz speichert, aber ein anderer Nutzer den Wert selbst noch einmal überschreiben will. Dann sind die Daten inkonsistent.

Deswegen solltest du auf Transaktionalität zurückgreifen. In Java kann dieses elegant mithilfe von EJB gelöst werden d.h. du kannst einem Application Server eine Klammer um deine Datenbanktransaktion ziehen. Dadurch wird gewährleistet, dass die Daten in einem mehrnutzer-Umfeld sicher gespeichert werden und es keine Kolledierungen gibt. Im Bankenumfeld ist das ein sehr beliebtes Mittel und dort geht es um wirklich sensible Daten ;)

Zu deinen Aktualisierungen würd ich sagen haste 2 Chancen.

1. Du benutzt eine Art Roboter bzw. einen Thread, der alle 5 Sekunden über deine Eingaben geht und diese mit der Datenbank abgleicht.

2. Ja du machst eine aktualisierung nach jeder Zeile.

Hat beides Vor- und Nachteile:

2. ist sehr sehr ressourcenlastig..also da feuerst du ja wirklich wie ein Verrückter auf die DB..
1. ist dann deutlich eleganter, weil du nicht alles häppchenweise an die db gibst, sondern in einem festen zeitrahmen ein haufen änderungen in einem wisch durchführst.

die letzte möglichkeit die mir noch einfehlt ist es eine Art Queue mit Batch-verarbeitung durchzuführen. Sämtliche Änderungen die ein Nutzer durchführt werden erstmal iwo gesammelt. Am Ende des Tages geht ein Programm los und führt alle Änderungen auch auf der Datenbank durch. Das hat allerdings zufolge, dass das Programm nicht mehr Live Änderungen durchführt und anzeigt.

Ja vllt war ich dir ja schon eine große Hilfe.

Gruß
MasterOP22
 
Hi,

vielen Dank für deine Antwort. Bin über jeden Tipp dankbar.
Ich schätze, dass ich mit einer aktualisierung nach jeder Zeile nicht weit komme. Darum werde ich ein Speichern Button hinzufügen. Damit kann dann der Mitarbeiter seinen aktuellen Stand speichern. Sonst die Anwendung bei einer zentralen Datenbank einfach zu langsam.
EJB klingt interessant. Das muss ich mir näher anschauen.

vielen Dank für den Tipp :)
 
Zurück