German Welche Tabellen-Lösung nehmen?

JOTHA

Well-Known Member
Licensed User
Willst Du versuchen das selbst einzubauen, auf dem gleichen Prinzip wie die oberen Zeilen?
Oder möchtest Du dass ich es mache?
Du hast jetzt schon so viel daran gearbeitet, das wäre zu viel verlangt. Es wäre "nice to have", aber es muss nicht unbedingt sein.
Ich habe auch schon selber etwas damit gespielt ... hat aber noch nicht geklappt.
B4X:
scvPresence.Left = pnlHeader.Left + pnlHeader.Height  '-- funzt nicht --
Vielleicht muss ich noch eine extra scvPresence2 generieren?
 

klaus

Expert
Licensed User
scvPresence.Left = pnlHeader.Left + pnlHeader.Height '-- funzt nicht
Das ist für mich 'normal'.
1. pnlHeader.Left + pnlHeader.Height kann nicht funktionieren!
Left ist waagrecht und Height ist senkrecht, das geht nicht zusammen.
2. pnlHeader.Left wird an die scvPresence.HorizontalPosition angepasst!
Vielleicht muss ich noch eine extra scvPresence2 generieren?
Nein, sowas hatte ich eben schon versucht, aber die Synchronisierung funktioniert nicht.
Du müsstest ein neues Panel erstellen pnlPersons, das sich links von scvPresence befindet.
Ähnlich wie das pnlHeader Panel sich über scvPresence befindet.
Und pnlPersons.Top müsste dann in scvPresence_ScrollChanged angepasst werden:
B4X:
Private Sub scvPresence_ScrollChanged(PosX As Int, PosY As Int)
    pnlHeader.Left = -PosX
    pnlPersons.Top = -PosY
End Sub
Du hast jetzt schon so viel daran gearbeitet, das wäre zu viel verlangt.
Ich habe es doch vorgeschlagen, wenn es für mich zu viel wäre, hätte ich es nicht vorgeschlagen:).
 

JOTHA

Well-Known Member
Licensed User
Sag mal klaus ...
ist mit deiner App irgendwas "spezielles" ... ich kann nicht auf SQL zugreifen.

In anderen Apps von mir funktioniert das tadellos, nur hier nicht.
 

Attachments

klaus

Expert
Licensed User
Wenn man die Darenbank richti initialisiert funktioniert es.
Ich nehme an dass Du in den anderen Prjekten, im ManifestEditor, das stehen hast:
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="19"/>
Für neuere Projekte soll man das eingeben:
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="26"/>
Leider hat das den grossen Nachteil dass man Runtime Permissons braucht, ausser man benutzt:
rp.GetSafeDirDefaultExternal("")
Was Du versucht hast, aber nicht richtig angewendet hast.
Dim Anwesend As String = rp.GetSafeDirDefaultExternal("")
Gibt einen speziellen Ordnernamen zurück, dieser entspricht nicht File.DirDefaultExternal.

In der Datenbankerstellung:
SQL2.ExecNonQuery("CREATE TABLE IF NOT EXISTS AnWesenheitsStatus(AWS_001, AWS_002, AWS_003, AWS_004, AWS_005)")
Gibst Du da keine Datenarten an?
SQL2.ExecNonQuery("CREATE TABLE IF NOT EXISTS AnWesenheitsStatus(AWS_001 TEXT, AWS_002 TEXT, AWS_003 TEXT, AWS_004 TEXT, AWS_005 TEXT)")
Was soll den in der Datenbank rein kommen?
Wo sind die Personen?

Beiliegend Anwesenheitlist1 mit SQL1 und Anwesenheitlist2.
Beide mit SQL und Anwesenheitlist2 mit der ersten fixen Spalte.
 

Attachments

JOTHA

Well-Known Member
Licensed User
... bist Du auch noch wach?

Ich sitze schon den ganzen Abend an der Tabelle und versuche die Teilnehmer-Spalte zu fixieren. Fast hätte ich es geschafft, ich glaube ich bin auf der richtigen Spur ... allerdings mit viel "Try and Error"!

Für neuere Projekte soll man das eingeben:
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="26"/>
Leider hat das den grossen Nachteil dass man Runtime Permissons braucht, ausser man benutzt:
rp.GetSafeDirDefaultExternal("")
In einer anderen App habe ich das genau so genutzt und es funktioniert ohne Fehlermeldung.

In allen Datenbanken gebe ich keine Datenarten an ... und trotzdem funktioniert es.

Beispielsweise rechne ich auch oft mit "Text" (String), obwohl man das nicht machen soll, aber in B4A funktioniert das trotzdem.

Wo sind die Personen?
Das war nur ein Beispiel, die Personen hätte ich später eingefügt.

Eigentlich wollte ich für heute "aufgeben", aber jetzt muss ich doch unbedingt erst einmal deine Anwesenheitsliste2 ausprobieren!
Vielen Dank für deine Unterstützung!

P.S:
Soll ich Dir mal meinen produzierten "Schrott" schicken? ... aber das wäre vielleicht nur Zeitvergeudung ...
 

klaus

Expert
Licensed User
Deinen letzten Post habe ich erst heute Morgen gesehen.
Soll ich Dir mal meinen produzierten "Schrott" schicken?
Kannst Du schon mal schicken, ich schaue dann mal kurz rein.

Bevor Du viel weiter machst kannst Du noch ein wenig warten.
Ich hab noch gesehen dass die Dim Funktion nicht so funktioniert wie ich es mir dachte.
Wenn die Amzahl der Personen grösser als 10, der Anfangswert, gibt es eine Fehler.
Das bedeutet dass die Datenstruktur etwas geändert werden muss.

Habe jetzt diesen Punkt nachvollzogen und ein Paar Kleinigkeiten geändert.
Beiliegend die letzte Version.
 

Attachments

Last edited:

JOTHA

Well-Known Member
Licensed User
klaus, du bist echt der Knaller! :)

... das mit der geänderten Anzahl der Teilnehmer ist mir gestern abend um 00:45 Uhr auch aufgefallen ...

Jetzt passe ich ein paar Kleinigkeiten an und melde mich dann wieder ...
 

klaus

Expert
Licensed User
Ich bin gerade vom Fitness zurück.
Ja B4X für das Gehirn und Fitness für den Körper.

Ich hätte noch ein paar Fragen und Vorschläge.

Wie ist die Datenbank aufgebaut, oder anders gefragt was wird da Alles drin sein und wie?

Wirst Du mehrere Activities verwenden?
Wenn ja, dann solltest Du die SQL Initialisierung in das Starter Service verschieben.
Das ist der sicherste Eingangspunkt für ein B4A Projekt.

Für SQL Abfragen solltest Du RecordSet verwenden anstatt Cursor, dann wäre dein Projekt B4i und B4J kompatibel.

Ist Dein Projekt eine Anwesentheitsliste oder Abwesentheitsliste?
Das Programm, das ich vor etlichen Jahren geschrieben hatte, war eine Abwesentheitsliste.
Zur Verwaltung von Personal, Krankheit, Unfall, Ferien usw.
Am Anfang hatte ich es für mich geschrieben, 10 Mitarbeiter, und ein paar Jahre später hatten es einige hundert Angestellte benutzt.
 

JOTHA

Well-Known Member
Licensed User
Ich bin gerade vom Fitness zurück.
... das sollte ich auch mal seit Langem wieder machen :).

In welchem Kanton in der Schweiz lebst Du? Soweit ich weiß, ist heute nicht überall in der Schweiz ein gesetzlicher Feiertag.
Bei uns in D aber schon. Da wird gegrillt und einen auf "Familie" gemacht. Wenn ich heute den ganzen Tag am PC sitze gibts "Ärger". ;) Hahaha ...

Der Grill glüht schon ... ich melde mich später auf jeden Fall ... sobald ich wieder an den PC "darf"!

Ich bin z.Zt. Dozent in einer Weiterbildungsfirma.
Dort brauche ich eine Anwesenheitsliste für die Teilnehmer in verschiedenen Kursen.
Es gibt schon eine umfangreiche Software dafür, aber nur auf dem PC.
Zunächst würde ich mir nur mal eine einfache Anwesenheitsliste für das Smartphone bauen ...
Wirst Du mehrere Activities verwenden?
Ja
... wie gesagt: Ich melde mich nachher wieder!
Bis dahin wünsche ich Dir einen schönen Tag!
 

klaus

Expert
Licensed User
In welchem Kanton in der Schweiz lebst Du?
Ich wohne in Fully, im Wallis, im Rhônetal, fast am Fuss vom Grossen Sankt Bernhard Pass.
Der 1. Mai ist in meiner Gegend kein Feiertag. Hier sind die meiseten Feiertage eher katholisch-religiöse Feiertage.
Ich bin seit 12 Jahren in Rente, also Arbeitstag oder Feiertag ist für mich kein grosser Begriff mehr.
 

JOTHA

Well-Known Member
Licensed User
Guten Morgen klaus,
gestern ist es doch etwas spät geworden, deshalb melde ich mich erst heute wieder.

Wie ich gerade gesehen habe, hast Du auch schon wieder weiterentwickelt ...

Ich hatte noch etwas Zeit und habe einige Kleinigkeiten (hauptsächlich wegen dem Aussehen) geändert:

1) DateMonth = DateTime.Date(DateTime.Now) - damit immer der aktuelle Monat zuerst aufgerufen wird.
2) CellWidth = 50dip - damit die Zellen zum Anklicken etwas größer sind und die Buchstaben größer geschrieben werden können.
3) RowHeight = 50dip - damit in der Zelle "Personen" eine 3. Zeile Platz hat für das Geburtsdatum.
4) TextSize = 32 - da die Zellen größer geworden sind und die Einträge besser lesbar sind (Ausnahme Teilnehmer-Einträge und die Überschriften).
5) wenn eine Person HEUTE Geburtstag hat, soll das Feld (lblPerson) eingefärbt werden und ein Sonderzeichen z.B: Geburtstagstorte (momentan ersatzweise: Chr(9728)) eingefügt werden.
6) die Datumsfelder (lblDayNumber) mit führender Null formatieren.
7) Samstag und Sonntag soll ein Symbol (Sonne) gezeigt werden: lblPersonData(row, col).Text = Chr(9728)
8) den HEUTIGEN Tag im Wochentags- (lblDay) und Datumsfeld (lblDayNumber) ANDERS einfärben -- funzt noch nicht ganz

Anbei sende ich Dir die "alte" Version (mit meinen Änderungen) als ZIP.

Für SQL Abfragen solltest Du RecordSet verwenden anstatt Cursor, dann wäre dein Projekt B4i und B4J kompatibel.
Momentan ist das natürlich noch in den Sternen, aber sinnvoll wäre diese Variante schon, wenn es dann nicht zu umständlich wird.

Ist Dein Projekt eine Anwesentheitsliste oder Abwesentheitsliste?
... eine Anwesenheitsliste. Es kommen aber natürlich auch Bezeichnungen wie "K" für Krankheit, "F" für Ferien und viele weitere Abkürzungen aus einer Auswahlliste hinzu.
An anderer Stelle sollen aber später auch diese Dinge ausführlicher verwaltet werden, wie z.B.: Arbeitsunfähigkeitsbescheinigung (AUB) von wann bis wann, etc.

... Verwaltung von Personal, Krankheit, Unfall, Ferien usw.
Es sollen auch mehrere Kurse verwaltet werden können, etc.

Jetzt schaue ich mir aber erst einmal deine neue Version 4 an ...
 

Attachments

JOTHA

Well-Known Member
Licensed User
Hallo klaus,
ich habe gerade deine Version 4 geöffnet ... sieht alles ganz toll aus, mir gefällt auch die Idee mit dem Jahr und Monat oben links!
 

klaus

Expert
Licensed User
Ich fand dass das obere linke Rechteck nicht gut aussah, und habe das Jahr und den Monat wieder hinzugefügt.
Und habe die Jahr Monats Auswahl nach unten verschoben, da versteckt man nicht den Bildschirm.
Ich habe die SQL Initialisierung in das Starter Modul verschoben.
Die Umstellung von Cursor auf ResultSet ist nicht aufwendig, aber falls Du nie mit B4J oder B4i arbeiten willst kannst Du dbei Cursor bleiben.
Ich finde dass Cursor praktischer ist als RecordSet, aber in B4J und B4i gibt es keinen Cursor.
Und Erel hat dann RecordSet in B4A hinzugefügt.

Ich hab mir deine letze Version angeschaut, sieht ja ganz toll aus.
Ich ahbe einen Fehler gesehen.
Die Tage in der oberen Reihe sind falsch.
DateMonth musst Du ergänzen, das Datum muss mit 01 anfangen.
B4X:
DateMonth = DateTime.Date(DateTime.Now)
DateMonth = "01" & DateMonth.SubString(2)
 

JOTHA

Well-Known Member
Licensed User
... aber in B4J und B4i gibt es keinen Cursor ...
Vielleicht wollen die "Kollegen" mit dem iPhone ja auch mal so eine App ... ich denke das mit dem ResultSet ist eine gute Alternative!
Ich werde es mal ausprobieren.

Das mit dem Fehler habe ich auch schon gesehen, war aber nur kurz auf der Suche nach der Ursache ... Danke fürs Finden!
 

klaus

Expert
Licensed User
. ich denke das mit dem ResultSet ist eine gute Alternative!
Ich werde es mal ausprobieren.
Das ist in der Version 4 schon drin.

Ich wollte auch schon vorschlagen eine B4X CustomView für die Tabelle zu machen.
Leider gibt es (noch) keine 2 dimensionale ScrollView in Android. Hoffe dass Erel die ScrollView2D Library einfügt.
Das gleiche Modul wäre dann für alle drei Produkte nutzbar.
 

JOTHA

Well-Known Member
Licensed User
Das ist in der Version 4 schon drin.
Ja, das habe ich schon gesehen.

B4X ist schon eine tolle IDE, vor allem, wenn man tatsächlich für mehrere Plattformen programmiert.
Ich wundere mich, warum die "Software-Industrie" noch nicht groß aufgesprungen ist.

https://www.b4x.com/android/forum/threads/b4x-b4a-scrollview2d.105382/
Vielleicht macht ja Star-Dust so eine Lib: "If none is available the i add in my SD_XUIView libraries"
Heute mittag oder abends mache ich mal eine kleine CSV-Datei zum Einlesen der Teilnehmer ... das probiere ich auch gleich mal mit der ResultSet-Version aus ;)
 

Attachments

klaus

Expert
Licensed User
Ich habe mir ein Programm, in B4J, geschrieben das cvs Dateien zu SQL umwandelt.
Hast Du B4J?
Das kannst Du von HIER runterlden.

Die Antwort von Star-Dust hatte ich gesehen.
Das entspricht aber nicht genau dem was ich gerne hätte.
Ich möchte dass man in B4A eine zwei dimensionale ScrollView bekommt, wie in B4J und B4i, die man auch als B4XView direkt benutzen kann, ohne konditioneller Programmierung.
Das ist mit einer B4XLibrary, so viel wie ich weiss, nicht der Fall, zu mindest nicht direkt.
 
Last edited:

JOTHA

Well-Known Member
Licensed User
Hallo klaus,

sorry dass ich mich jetzt erst melde, aber ich war einfach beruflich sehr stark eingebunden.

Momentan muss ich das mit der Tabelle in Android leider vorläufig auf Eis legen, aber ich sollte mit B4J ein kleineres Projekt anpacken (vielleicht wird es auch ein bisschen größer).

Jedenfalls nochmals vielen Dank für deine Hilfe klaus!

... und natürlich auch ein herzliches Dankeschön für die Hilfe der anderen Forumsteilnehmer, DonManfred und mw71.
 
Top