[Gelöst] Standardwerte im Formular
Moderator: Moderatoren
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
[Gelöst] Standardwerte im Formular
Hallo,
hier bin ich wieder mit meinem nächsten Problem.
Ein Screenshot von meinem Formular findet ihr
hier
Ich habe in meinem Formular in der oberen Tabelle Standardwerte für einige Spalten gesetzt.
Das funktioniert auch, aber leider nicht immer. Wenn schon Zeilen in meiner Tabelle vorhanden sind und ich eine neue Zeile aufrufe, erscheinen die gewünschten Standardwerte. Rufe ich in meinem Hauptformular einen anderen Datensatz auf, erscheinen nun in der Tabelle in der ersten Zeile ebenfalls die gewünschten Standardwerte. Mache ich nun aber, ohne irgendeine Eingabe zu tätigen ein Reload, bleibt die erste Zeile leer. Ebenso verhält es sich, wenn ich in meinem Hauptformular wieder einen Datensatz aufrufe, zu dem es in dem Unterformular noch keine Datensätze gibt. Merkwürdig daran ist auch, dass xray mir die Standardwerte richtig anzeigt . Diese erscheinen aber nicht in meiner Tabelle.
Hat jemand eine Erklärung für dieses Verhalten bzw. wie erreiche ich, dass meine Standardwerte bei jedem neuen Datensatz auch in der ersten Zeile erscheinen?
Viele Grüße
Christiana
hier bin ich wieder mit meinem nächsten Problem.
Ein Screenshot von meinem Formular findet ihr
hier
Ich habe in meinem Formular in der oberen Tabelle Standardwerte für einige Spalten gesetzt.
Das funktioniert auch, aber leider nicht immer. Wenn schon Zeilen in meiner Tabelle vorhanden sind und ich eine neue Zeile aufrufe, erscheinen die gewünschten Standardwerte. Rufe ich in meinem Hauptformular einen anderen Datensatz auf, erscheinen nun in der Tabelle in der ersten Zeile ebenfalls die gewünschten Standardwerte. Mache ich nun aber, ohne irgendeine Eingabe zu tätigen ein Reload, bleibt die erste Zeile leer. Ebenso verhält es sich, wenn ich in meinem Hauptformular wieder einen Datensatz aufrufe, zu dem es in dem Unterformular noch keine Datensätze gibt. Merkwürdig daran ist auch, dass xray mir die Standardwerte richtig anzeigt . Diese erscheinen aber nicht in meiner Tabelle.
Hat jemand eine Erklärung für dieses Verhalten bzw. wie erreiche ich, dass meine Standardwerte bei jedem neuen Datensatz auch in der ersten Zeile erscheinen?
Viele Grüße
Christiana
Zuletzt geändert von Christiana am Mi, 01.07.2009 11:28, insgesamt 1-mal geändert.
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
Re: Standardwerte im Formular
Hallo,
zur Veranschaulichung und zum besseren Testen lade ich heute mal mein Calc-Formular und die DB-Tabelle hoch. Beide sind stark vereinfacht und anonymisiert.
Da das Kontingent für Dateianhänge immer noch vollständig ausgenutzt ist, ladet euch bitte meine Dateien hier und hier herunter.
Zum Testen bitte im Makro sAuftrag folgendermaßen anpassen:
1.Aufruf: sAuftrag = ”2008100“
2.Aufruf: sAuftrag = ”2009100“
3.Aufruf: sAuftrag = ”2009200“
Vielen Dank für eure Mühen
Christiana
zur Veranschaulichung und zum besseren Testen lade ich heute mal mein Calc-Formular und die DB-Tabelle hoch. Beide sind stark vereinfacht und anonymisiert.
Da das Kontingent für Dateianhänge immer noch vollständig ausgenutzt ist, ladet euch bitte meine Dateien hier und hier herunter.
Zum Testen bitte im Makro sAuftrag folgendermaßen anpassen:
1.Aufruf: sAuftrag = ”2008100“
2.Aufruf: sAuftrag = ”2009100“
3.Aufruf: sAuftrag = ”2009200“
Vielen Dank für eure Mühen
Christiana
OOo 3.1 mit WIN XP SP 3 und PostgreSQL 8.2
Re: Standardwerte im Formular
Hallo Christiana,
Du setzt einen Filter mit sAuftrag = "2009100" und dann ist der Inhalt der Tabelle gleich null.
Das kannst Du sehen, wenn Du mal folgenden Test machst:
Die MsgBox zeigt dann auch "0" an. Ausserdem ist die Steuerleiste in der Tabelle ausgegraut, also nicht funktionsfähig!
Warum beim ersten Mal der übergebene Text in der Tabelle erscheint kann ich Dir nicht sagen, aber das dürfte eigentlich nicht sein. Wo nix ist, kann man normalerweise auch nichts eintragen.
Man könnte jetzt folgendes machen:
Ich hoffe, ich konnte etwas Licht ins Dunkle bringen.
Viel Erfolg.
Jürgen
Edit hat sich nochmal Gedanken gemacht:
Also, wenn Du mehrere gleiche Auftragsnummern hast, dann kannst Du das mit der If-Abfrage vergessen.
Auch wenn sich jetzt vielleicht einige die Haare raufen, ich habe mich mal an ein "INSERT INTO"-Statement gewagt:
Was wichtig ist, dass man "sAuftrag" beim Einfügen mitgibt, weil danach ja wieder gefiltert wird!
Was ich noch nicht rausgefunden habe ist das Aufheben von:
damit wieder alle Datensätze angezeigt werden.
Vielleicht kann mir ja da jemand mal unter die Arme greifen. Danke.
Ich würde mal sagen der Schein trügt.Christiana hat geschrieben:Wenn schon Zeilen in meiner Tabelle vorhanden sind und ich eine neue Zeile aufrufe, erscheinen die gewünschten Standardwerte.
Du setzt einen Filter mit sAuftrag = "2009100" und dann ist der Inhalt der Tabelle gleich null.
Das kannst Du sehen, wenn Du mal folgenden Test machst:
Code: Alles auswählen
.......
oGrid = oForm.getByName("TableControl")
oForm.reload()
'xray oGrid
msgbox oGrid.parent.RowCount
.......
Warum beim ersten Mal der übergebene Text in der Tabelle erscheint kann ich Dir nicht sagen, aber das dürfte eigentlich nicht sein. Wo nix ist, kann man normalerweise auch nichts eintragen.
Man könnte jetzt folgendes machen:
Code: Alles auswählen
.......
oForm.reload()
if oGrid.parent.RowCount = 0 then
'tu irgendwas
end if
.......

Viel Erfolg.
Jürgen
Edit hat sich nochmal Gedanken gemacht:
Also, wenn Du mehrere gleiche Auftragsnummern hast, dann kannst Du das mit der If-Abfrage vergessen.
Auch wenn sich jetzt vielleicht einige die Haare raufen, ich habe mich mal an ein "INSERT INTO"-Statement gewagt:
Was wichtig ist, dass man "sAuftrag" beim Einfügen mitgibt, weil danach ja wieder gefiltert wird!
Code: Alles auswählen
Sub TestFormular2
Dim Context
Dim DB
Dim Conn
Dim Stmt
Dim Result
Dim strSQL As String
sAuftrag = "2009105"
oDoc = thisComponent
oSheet = oDoc.sheets.getByName("Tabelle1")
oDraw = oSheet.drawpage
oForm = oDraw.Forms.getByName("Standard")
'Folgenden Filter kannst Du glaube ich vergessen
'oForm.CommandType = 2
'oForm.Command = "SELECT * FROM flst_alt WHERE auftrag = '" & sAuftrag & "';"
'oForm.Order = "auftrag, gemarkung, flur, flurstueck"
'oGrid = oForm.getByName("TableControl")
'oForm.reload()
'if oGrid.parent.RowCount = 0 then
' Ende vergessen
Context=CreateUnoService("com.sun.star.sdb.DatabaseContext")
DB=Context.getByName("test_standardwerte")
Conn=DB.getConnection("","")
DBTables = Conn.getTables()
TableName$ = "flst_alt"
If DBTables.hasByName(TableName$) Then
Stmt=Conn.createStatement()
strSQL="INSERT INTO ""flst_alt""(""auftrag"",""gemarkung"",""flur"") VALUES (" & sAuftrag & ",'Gemarkung','24')"
Stmt.executeUpdate(strSQL)
oForm.Command = "SELECT * FROM flst_alt WHERE auftrag = '" & sAuftrag & "';"
oForm.Order = "auftrag, gemarkung, flur, flurstueck"
Conn.close()
oForm.reload()
End If
'end if
End Sub
Code: Alles auswählen
oForm.Command = "SELECT * FROM flst_alt WHERE auftrag = '" & sAuftrag & "';"
Vielleicht kann mir ja da jemand mal unter die Arme greifen. Danke.
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
Re: Standardwerte im Formular
Hallo Jürgen,
vielen Dank für Deine Hilfe. Licht ins Dunkle hast Du schon allein dadurch gebracht, dass du mir versuchst zu helfen.
Allerdings habe ich auch gemerkt, dass ich mich nicht immer verständlich genug ausgedrückt habe.
Eigentlich dachte ich ja auch, dass die Standardwerte auch erscheinen sollten, wenn die Tabelle noch leer ist.
Aber leider ist dem ja nicht so.
Dieser Ansatz hier gefällt mir sehr gut:
Dann könnte man die Abfrage noch folgendermßen ergänzen:
Und damit hast du mich eben auf eine tolle Idee gebracht, die ich allerdings noch nicht geprüft habe.
Vielleicht könnte ich an die Stelle von 'tu irgendwas diesen Code einfügen:
Wenn die Tabelle flst_alt immer voller wird, könnte dann der Zugriff sehr lange dauern.
Vielleicht sollte ich die Tabelle speziell für diesen Fall in der DB noch einmal anlegen und nur mit einem Datensatz füllen.
Hoffentlich habe ich mich diesmal verständlicher ausgedrückt und Du kannst meinen Gedanken folgen.
Wenn das alles nicht klappt, bleibt mir ja immer noch das "INSERT INTO"-Statement.
Du hast mich auf viele neue Ideen gebracht und das ist gut so!
Also nochmals vielen herzlichen Dank!
Christiana
vielen Dank für Deine Hilfe. Licht ins Dunkle hast Du schon allein dadurch gebracht, dass du mir versuchst zu helfen.
Allerdings habe ich auch gemerkt, dass ich mich nicht immer verständlich genug ausgedrückt habe.
Damit meinte ich, wenn ich z.B. zum Auftrag 2008100, zu dem ja schon Zeilen in der Tabelle vorhanden sind, noch eine neue Zeile hinzufügen möchte, dann kommen wie gewünscht die Standardwerte.Christiana hat geschrieben:Wenn schon Zeilen in meiner Tabelle vorhanden sind und ich eine neue Zeile aufrufe, erscheinen die gewünschten Standardwerte.
Eigentlich dachte ich ja auch, dass die Standardwerte auch erscheinen sollten, wenn die Tabelle noch leer ist.
Aber leider ist dem ja nicht so.
Dieser Ansatz hier gefällt mir sehr gut:
Allerdings habe ich dazu noch eine Frage. Entspricht oGrid.parent.RowCount = 0 gleich oForm.RowCount?turtle47 hat geschrieben:.......
oForm.reload()
if oGrid.parent.RowCount = 0 then
'tu irgendwas
end if
.......
Dann könnte man die Abfrage noch folgendermßen ergänzen:
Code: Alles auswählen
if oForm.isNew and oForm.RowCount = 0 then...
Das kann man folgendermaßen erreichen:turtle47 hat geschrieben:Was ich noch nicht rausgefunden habe ist das Aufheben von:
oForm.Command = "SELECT * FROM flst_alt WHERE auftrag = '" & sAuftrag & "';"
damit wieder alle Datensätze angezeigt werden.
Code: Alles auswählen
oForm.Command = "SELECT * FROM flst_alt;"
Vielleicht könnte ich an die Stelle von 'tu irgendwas diesen Code einfügen:
Code: Alles auswählen
oForm.Command = "SELECT * FROM flst_alt;"
oForm.reload()
oForm.Command = "SELECT * FROM flst_alt WHERE auftrag = '" & sAuftrag & "';"
Vielleicht sollte ich die Tabelle speziell für diesen Fall in der DB noch einmal anlegen und nur mit einem Datensatz füllen.
Hoffentlich habe ich mich diesmal verständlicher ausgedrückt und Du kannst meinen Gedanken folgen.
Wenn das alles nicht klappt, bleibt mir ja immer noch das "INSERT INTO"-Statement.
Du hast mich auf viele neue Ideen gebracht und das ist gut so!
Also nochmals vielen herzlichen Dank!
Christiana
OOo 3.1 mit WIN XP SP 3 und PostgreSQL 8.2
Re: Standardwerte im Formular
Hallo Christana,
Arbeitest Du auch mit xray?

Schönen Tag noch.
Jürgen
Ich habe es mir xray nochmal überprüft und es scheint gleich zu sein.Christiana hat geschrieben: Allerdings habe ich dazu noch eine Frage. Entspricht oGrid.parent.RowCount = 0 gleich oForm.RowCount?
Arbeitest Du auch mit xray?
Oh man, vor den Kopf hau. So geht es. Vielen Dank.Christiana hat geschrieben: Das kann man folgendermaßen erreichen:
Code: Alles auswählen
oForm.Command = "SELECT * FROM flst_alt;"

Das freut mich.Christiana hat geschrieben:Du hast mich auf viele neue Ideen gebracht und das ist gut so!

Schönen Tag noch.
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Standardwerte im Formular
Hallo Christiana, Hallo Jürgen,
ich verfolge dieses Thema schon einen Weile interssehalber.
Besonders oForm.Command....... gefällt mir ganz gut. Ich selber hätte es bisher über einen über eine Variable versorgten Filter gelöst.
Vielleicht findet Ihr ja hier noch ein paar gute Ideen, oder Varianten zum Thema (siehe Link).
Ich bin jedenfalls begeistert über die Makro-Beispiele.
http://www.oooforum.org/forum/viewtopic.phtml?t=65111
Gruß eBayer
ich verfolge dieses Thema schon einen Weile interssehalber.
Besonders oForm.Command....... gefällt mir ganz gut. Ich selber hätte es bisher über einen über eine Variable versorgten Filter gelöst.
Vielleicht findet Ihr ja hier noch ein paar gute Ideen, oder Varianten zum Thema (siehe Link).
Ich bin jedenfalls begeistert über die Makro-Beispiele.
http://www.oooforum.org/forum/viewtopic.phtml?t=65111
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
Re: Standardwerte im Formular
Hallo eBayer,
vielen Dank für Deinen Link zu den Makro-Beispielen im englischen Forum.
Das muss ich mir auf jeden Fall noch einmal genauer anschauen. Solche Beispiele kann man nie genug haben.
Genauso habe ich es am Anfang auch gemacht. Aber in meinem Fall soll der Anwender wirklich nur auftragsbezogen hintereinander weg arbeiten und an der Stelle nicht die Möglichkeit haben alle Aufträge zu sehen. Die Navigationsleiste meines Tabellenkontrollfeldes habe ich ausgeschaltet und dafür das Formular-Steuerelement ”Navigationsleiste“ eingefügt. Diese beinhaltet auch Filter- und Sortierfunktionen. Wenn ich mit oForm.Filter arbeite, ist der Filter-Button gedrückt und wenn ich ihn aufhebe, werden alle Aufträge angezeigt und genau das soll nicht sein. So kam ich dann auf die Idee das Ganze über den Command-Befehl einzuschränken.
In der Mehrzahl der Anwendungen wird der Filter-Befehl sicher die bessere Variante sein - je nach Aufgabenstellung.
Viele Grüße
Christiana
vielen Dank für Deinen Link zu den Makro-Beispielen im englischen Forum.
Das muss ich mir auf jeden Fall noch einmal genauer anschauen. Solche Beispiele kann man nie genug haben.

Code: Alles auswählen
Ich selber hätte es bisher über einen über eine Variable versorgten Filter gelöst.
Genauso habe ich es am Anfang auch gemacht. Aber in meinem Fall soll der Anwender wirklich nur auftragsbezogen hintereinander weg arbeiten und an der Stelle nicht die Möglichkeit haben alle Aufträge zu sehen. Die Navigationsleiste meines Tabellenkontrollfeldes habe ich ausgeschaltet und dafür das Formular-Steuerelement ”Navigationsleiste“ eingefügt. Diese beinhaltet auch Filter- und Sortierfunktionen. Wenn ich mit oForm.Filter arbeite, ist der Filter-Button gedrückt und wenn ich ihn aufhebe, werden alle Aufträge angezeigt und genau das soll nicht sein. So kam ich dann auf die Idee das Ganze über den Command-Befehl einzuschränken.
In der Mehrzahl der Anwendungen wird der Filter-Befehl sicher die bessere Variante sein - je nach Aufgabenstellung.
Viele Grüße
Christiana
OOo 3.1 mit WIN XP SP 3 und PostgreSQL 8.2
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
Re: Standardwerte im Formular
Hallo Jürgen,
meine letzte Idee mit den Command-Befehlen hat nur in meinem Test-Formular geklappt, weil sich das Tabellenkontrollfeld in meinem Original-Formular in einem Subformular befindet und dann dauert das Ganze einfach zu lange. So habe ich doch noch auf Deine Idee mit dem "INSERT INTO"-Statement zurückgegriffen. Mir gefiel anfangs nur die Idee mit den Standardwerten besser, weil ich mich dann nicht auch noch um das Löschen der Zeile kümmern muss, falls jemand nur so herumgeklickert hat und keine zusätzlichen Werte eingegeben hat. Ebenso muss ich nun verhindern, dass man eine neue Zeile eingibt ohne in die erste Zeile zusätzliche Werte eingegeben zu haben. Ich musste schließlich feststellen, alles halb so schlimm. Ging alles wesentlich schneller als die Versuche die Sache mit den Standardwerten zum Laufen zu bringen.
Übrigens ist mir noch eine andere Variante zum "INSERT INTO"-Statement eingefallen:
Im Grunde genommen ist es aber das Gleiche.
Nochmals vielen Dank für Deine Hilfe!
Einen schönen Tag noch.
Christiana
meine letzte Idee mit den Command-Befehlen hat nur in meinem Test-Formular geklappt, weil sich das Tabellenkontrollfeld in meinem Original-Formular in einem Subformular befindet und dann dauert das Ganze einfach zu lange. So habe ich doch noch auf Deine Idee mit dem "INSERT INTO"-Statement zurückgegriffen. Mir gefiel anfangs nur die Idee mit den Standardwerten besser, weil ich mich dann nicht auch noch um das Löschen der Zeile kümmern muss, falls jemand nur so herumgeklickert hat und keine zusätzlichen Werte eingegeben hat. Ebenso muss ich nun verhindern, dass man eine neue Zeile eingibt ohne in die erste Zeile zusätzliche Werte eingegeben zu haben. Ich musste schließlich feststellen, alles halb so schlimm. Ging alles wesentlich schneller als die Versuche die Sache mit den Standardwerten zum Laufen zu bringen.
Übrigens ist mir noch eine andere Variante zum "INSERT INTO"-Statement eingefallen:
Code: Alles auswählen
If oSubFormFlstNeu.isNew and oSubFormFlstNeu.RowCount = 0 then
oSubFormFlstNeu.reload()
oSubFormFlstNeu.updateString(3,sGemarkung) '3.Spalte in DB-Tabelle
oSubFormFlstNeu.updateString(4,sFlur)
oSubFormFlstNeu.updateString(6,sLage)
oSubFormFlstNeu.insertRow()
End If
Ja, wüsste gar nicht mehr wie ich ohne es arbeiten sollte.Arbeitest Du auch mit xray?
Nochmals vielen Dank für Deine Hilfe!

Einen schönen Tag noch.
Christiana
OOo 3.1 mit WIN XP SP 3 und PostgreSQL 8.2