Daten zwischen Datenbank und Calc kopieren

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Daten zwischen Datenbank und Calc kopieren

Re: Daten zwischen Datenbank und Calc kopieren

von RobertG » Fr, 31.05.2024 18:05

Wir werden wohl weiter aneinander vorbeireden. Ich erstelle öfter komplette Rechnungsdatenbanken. Calc nutze ich nahezu überhaupt nicht. Deswegen erscheint mir eine Lösung mit Calc nicht komfortabel, sondern eben mit vielen Krücken behaftet.

Wie Du Daten von Base nach Calc kopieren kannst habe ich Dir geschrieben. Ist dann auch in dem zweiten Beispiel drin. Warum Du da nicht mit klar kommst erschließt sich mir nicht.

Re: Daten zwischen Datenbank und Calc kopieren

von fuzzfilth » Fr, 31.05.2024 15:56

Anscheinend willst Du nicht nur den einmal ausgewählten Datensatz weiter sehen, sondern diesen auch dauerhaft irgendwo speichern.
Das versuche ich seit einer Weile zu erklären, ja.
Das geht nur, wenn Du den Ausdruck auch als PDF-Datei speicherst.
Das wäre ein echtes Armutszeugnis für eine Datenbank-gestützte Rechnungserstellung.
Jede Vorlage, die Du mit Calc erstellst, wird doch bei der nächsten Rechnung überschrieben. Deshalb weiß ich auch nicht, warum Du da überhaupt irgendetwas mit Calc machst.
Nochmal- die Aufgabe ist:

- Eine Rechnung aufzustellen, mit Zahl der Übernachtungen, Einzelpreis, Zahl der Gäste, Reinigungspauschale, Kurtaxe etc. Da kommt eine Endsumme raus. Die will ich nicht jedesmal extern auf dem Taschenrechner zusammenfummeln müssen, deshalb muss da Calc ran.

- In diese Rechnung soll auch eine Rechnungsadresse rein. Damit man auch die nicht jedesmal neu eintippen muss, soll die aus einer Adressdatenbank beigesteuert werden.

- Diese Rechnung wird dann, meinetwegen mit Rechungsnummer und Name, gespeichert, für meine Unterlagen und für die Steuerprüfung in acht Jahren. Und der Gast bekommt nen Ausdruck davon.

- Die nächste Rechnung des nächsten Gastes, mit anderer Endsumme und offensichtlich anderer Adresse, wird mit neuer Rechnungsnummer und neuem Namen gespeichert. Jetzt sinds schon zwei. In der ersten Rechnung soll der erste Betrag und die zugehörige Adresse stehen. In der zweiten Rechnung soll der zweite Betrag und die hier zugehörige, andere Adresse stehen. Und zwar jeweils sowohl beim Abspeichern als auch genau so beim nächsten und jedem weiteren Öffnen.

Mir verschließt sich warum diese Aufgabenstellung so abwegig erscheint.
Du kannst die einzelnen Felder anklicken und in Calc ziehen.
Das weiß ich. Darauf bezog sich auch meine ganz ursprüngliche Frage, wie man das bei vier Feldern pro Adresse für meine nicht-computer-affine Benutzerin auf einen Button legen könnte, der die vier Felder in vier bestimmte Calc-Zellen kopiert. Mit einem Macro funktioniert das nicht, weil Macros und Felder nichts von der Existenz des jeweils anderen wissen (wollen?).

Aber wenn das in Open Office offensichtlich nicht für den Anwender komfortabel zu lösen ist brauch ich auch nicht weiter zu fragen.

Danke trotzdem.

Re: Daten zwischen Datenbank und Calc kopieren

von RobertG » Fr, 31.05.2024 14:22

Nur einmal zur Information:
Das Beispiel funktioniert mit Makros. Wenn Du die nicht erlaubst, dann bleibt es natürlich ohne weitere Wirkung, weil
  • das Formular mit der Anzeige über eine Abfrage gespeist wird,
  • die Abfrage über das Listenfeld mit einem Filter für genau einen Datensatz gefiltert wird und
  • neue Datensätze direkt in den Filter übernommen werden.
Du wolltest den Datensatz anzeigen lassen, den Du gerade ausgewählt hast - auch beim nächsten Start noch. Das passiert.
Lass Dir doch bitte einmal das Formular im Formularnavigator anzeigen. Da müsstest Du 2 Formulare in Calc sehen. In einem ist die Adresstabelle, in dem anderen die Filtertabelle.
Vergiss die interne Suche von Base. Die ist viel zu kompliziert. Nutze das Listenfeld. Da sind alle Adressen drin enthalten.

Anscheinend willst Du nicht nur den einmal ausgewählten Datensatz weiter sehen, sondern diesen auch dauerhaft irgendwo speichern.
Das geht nur, wenn Du den Ausdruck auch als PDF-Datei speicherst. Jede Vorlage, die Du mit Calc erstellst, wird doch bei der nächsten Rechnung überschrieben. Deshalb weiß ich auch nicht, warum Du da überhaupt irgendetwas mit Calc machst.

Nimm einfach den Datenquellenbrowser in Calc, öffne die Tabelle. Du kannst die einzelnen Felder anklicken und in Calc ziehen.
Ich hoffe einmal, dass das auch In AOO geht. Ich mache das hier alles mit LibreOffice. Mit AOO habe ich schon beim Datenbankkontakt Probleme unter Linux.
Dateianhänge
Calc_Rechnung.ods
Calc-Datei mit Datenkopie nach Calc
(13.47 KiB) 285-mal heruntergeladen

Re: Daten zwischen Datenbank und Calc kopieren

von fuzzfilth » Fr, 31.05.2024 13:03

Ich denke hier ist der falsche Eindruck entstanden. Ich hab schon vor 30 Jahren relationale Datenbanken programmiert, allerdings in Filemaker, und da war das selbst ohne Handbuch eine Sache von den sprichwörtlichen paar Mausclicks, und es kam genau das raus was ich wollte (z. B. einen Adressdatensatz in der Datenbank finden, jede Rechnung mit genau einem bestimmten Adressdatensatz speichern/drucken/öffnen. Ganz einfache Anforderung eigentlich). Die geistigen Kapazitäten sind also durchaus vorhanden, würde ich meinen wollen. Allerdings habe ich (mit guten Excel-Kenntnissen) gerade bei Calc ab und an den Eindruck dass es an gewissen Stellen außergewöhnlich ungeschmeidig läuft. Ich versuche auch seit einer Weile mich hier in meinen Posts so klar wie nur irgend möglich auszudrücken, leider offenbar nicht erfolgreich.

Danke für dein Beispiel im letzten Post, allerdings tut das leider auch nicht was es soll:

Nachdem die Adressen und die Rechnung verbunden sind wird aus den Adressen in der Rechnung nur exakt ein Datensatz zur Auswahl angezeigt, anstatt der vorhandenen vier Datensätze, nämlich der vierte (warum gerade der ? Man weiß es nicht):

Bildschirmfoto 2024-05-31 um 12.22.01.png
Bildschirmfoto 2024-05-31 um 12.22.01.png (95.54 KiB) 19762 mal betrachtet

Und wenn ich hier nach etwas suche von dem ich zufällig weiß dass es da ist schlägt auch das fehl:

Bildschirmfoto 2024-05-31 um 12.41.27 Kopie.jpg
Bildschirmfoto 2024-05-31 um 12.41.27 Kopie.jpg (323.44 KiB) 19762 mal betrachtet

Wenn ich einen neuen Datensatz anlege und die Rechnung so abspeichere und wieder öffne, so wird trotzdem wieder der falsche Datensatz angezeigt.

Das sind letztlich 0 von 3 möglichen Punkten, keine so gute Bilanz, mit Verlaub.


Mein aktueller Ansatz, wie im letzten Post beschrieben, sieht so aus:

Bildschirmfoto 2024-05-31 um 13.02.16.png
Bildschirmfoto 2024-05-31 um 13.02.16.png (131.58 KiB) 19762 mal betrachtet
Hier sehe ich zumindest schon mal alle eingegebenen Adressen, kann auswählen und/oder eingeben. Aber auch hier wird die Rechnung nicht mit dem korrekten Adressdatensatz gespeichert. Ich kann die Rechnung unmittelbar ausdrucken, oder, falls das Drucken sich auch so schwierig gestalten sollte, den Monitor auf den Kopierer legen, aber das wars dann auch schon.

Drum bleibt meine Frage: Wie kann ich die Rechnung speichern so dass der korrekte Datensatz auch bei späterem Öffnen angezeigt bleibt ?

Interessanterweise hatte jemand vor paar Jahren in diesem Forum schonmal exakt dieselbe Frage:
https://oooforum.de/viewtopic.php?t=52594

Da sind dann viele Menschen mit guten Absichten in verschiedenste Richtungen davon galoppiert, und nicht ein einziger hat die eigentliche Frage beantwortet "Wie kann ich die Rechnung speichern so dass der korrekte Datensatz auch bei späterem Öffnen angezeigt bleibt ?".

Das finde ich seltsam. An Open Office. Und auch an Foren.

Re: Daten zwischen Datenbank und Calc kopieren

von RobertG » Fr, 31.05.2024 07:58

Mir scheint, dass Du noch nicht verstanden hast, dass da eine Datenbankdatei existiert, in der die Daten alle gespeichert sind. Öffne ich so eine Datenbankdatei, so zeigt die Datenbankdatei bei einem Klick auf eine Tabelle die Datensätze der Reihe nach an. Wenn Du von einem Datensatz zum nächsten kommen willst musst Du mit der Maus navigieren, alternativ über die Navigationsleiste den Datensatz ansteuern oder bestimmte Filtertechniken anwenden. Nur so bekommst Du einen Datensatz ausgewählt.

Beim nächsten Öffnen beginnt das Spielchen wieder von vorne - es sei denn, Du hast die vorherige Filterung in einer Filtertabelle gespeichert.

Ich bin weiter der Ansicht, dass es für Dein Vorhaben reichen würde, die Formularfelder direkt in das Rechnungsformular zu setzen. Wozu Du hin- und herlesen willst erschließt sich mir nicht.

Ich habe einmal schnell so eine Kombination erstellt. Bis auf das Einstellen "Nichtdruck" für viele Elemente habe ich am Design nichts gemacht. Nur ein Listenfeld, das die Adresse filtert, eine Möglichkeit zur Neueingabe und eine Möglichkeit zur Adressenänderung. Die Datenbank musst Du als "Adressen_Calc" in Extras → Optionen → LibreOffice Base → Datenbanken anmelden.
Dateianhänge
Calc_Base.zip
(16.66 KiB) 294-mal heruntergeladen

Re: Daten zwischen Datenbank und Calc kopieren

von fuzzfilth » Do, 30.05.2024 22:06

Hm. Irgendwie komm ich da überhaupt nicht weiter. Ich probier jetzt einen anderen Ansatz:

Anzeige der "Datenquelle als Tabelle" zeigt mir die Adress-Datensätze in Calc als Liste und ich kann auch finden/eingeben. Sie werden an den korrekten Stellen in der Rechnungs-Tabelle angezeigt.

Wenn ich aber die Rechnungs-Tabelle speichere und wieder öffne, dann ist wieder der erste Datensatz ausgewählt, nicht der zur Rechnung gehörende.

Das ist ja ziemlich zweckfrei.

Was muss ich tun, damit der beim Speichern der Rechnungs-Tabelle selektierte Datensatz auch beim wieder öffnen der Rechnungs-Tabelle immer noch selektiert ist ?

Re: Daten zwischen Datenbank und Calc kopieren

von RobertG » Di, 28.05.2024 20:52

…und genau das habe ich doch beschrieben: Wie Du den Inhalt der Felder auslesen kannst steht in dem Code, den ich in zwei unterschiedlichen Formen aufgeschrieben habe. Dazu muss lediglich der Button "Diese Adresse aus Datenbank holen" im Formular abgelegt sein, in dem auch die Textfelder sind. Um das zu sehen würde ich Dir raten, einmal den Formularnavigator zu öffnen. Der zeigt Dir, welche Elemente alle im gleichen Formular liegen.

Lass uns erst einmal den Weg fertig bekommen, bevor der umgekehrte Weg aus Calc raus in die Datenbank rein nur für Verwirrung sorgt.

Re: Daten zwischen Datenbank und Calc kopieren

von fuzzfilth » Di, 28.05.2024 19:30

Danke für deine Geduld.
das hängt natürlich damit zusammen, wie ob sich die jeweilige entwickelnde Person mit Calc oder Base auskennt.
So schaut's aus :lol:

Die gelben Felder sind, so der Fachausdruck, Textfelder. Sie zeigen Daten aus einer Datenbank. Das Einbinden über Textfelder wird in diversesten Tutorials, Leitfäden und Videos so beschrieben, da hab ich mir gedacht "wird wohl stimmen"...

Diese Daten kann ich hier ändern (das ändert sie in der Datenbank). Ich kann von hier aus auch neue Datensätze in der Datenbank anlegen und beschreiben. Ich kann nur nicht per Macro auf eben diese gelben Felder zugreifen (um etwas herauszukopieren oder um etwas hineinzuschreiben). Das muss doch gehen ?

Re: Daten zwischen Datenbank und Calc kopieren

von RobertG » Di, 28.05.2024 14:30

Nur um Klarheit zu bekommen: Sind das Formularfelder, die Du da gelb hinterlegt hast? Oder sind das irgendwie aus der Datenbank zu aktualisierende Felder, die nur die Verbindung in eine Richtung haben?

Davon ab: Als Datenbänkler hätte ich das alles komplett in eine Datenbank gelegt - incl. Ausdruck der Rechnungen und dem gesamten Buchungskram für Ferienhäuser. Aber das hängt natürlich damit zusammen, wie sich die jeweilige entwickelnde Person mit Calc oder Base auskennt.
Eine Vorlage für so etwas wäre in den Beispieldatenbanken enthalten, die neben dem Handbuch verfügbar sind: "Terminübersicht Ferienhäuser".

Re: Daten zwischen Datenbank und Calc kopieren

von fuzzfilth » Di, 28.05.2024 12:06

Hallo Robert, danke für deine flotte Antwort.
Mir ist bei der Konstruktion überhaupt nicht klar, wozu Du Calc benutzen möchtest.
Das Vorhaben ist recht simpel: Meine Userin hat eine Ferienzimmervermietung und will Rechnungen stellen. Diese Rechnung entsteht auf einem Rechnungs-Calc-Sheet. Da muss auch die Rechungsadresse drauf, und weil sie viele wiederkehrende Gäste hat will sie nicht jedesmal alle Adressdaten wieder und wieder eintippen müssen wenn derselbe Gast nochmal oder öfter kommt. Diese Rechnung wird gespeichert. Beim nächsten Gast wird diese Rechnung verändert und mit neuem Filenamen neu abgespeichert.

Was die Adressen angeht hab ich in dem Rechnungs-Calc-Sheet zum einen vier Zellen, in denen die für diese eine Rechnung gültigen Adressdaten von Herrn Meier reingeschrieben werden. Daraus bedienen sich erst mal alle Zellen die das dann auf dem Ausdruck an den richtigen Stellen oder im Text einbauen, für den Gast und für die Steuer.
Aus diesen vier Zellen will ich aber auch, nachdem die Adressdaten im Rechnungs-Calc-Sheet eingegeben sind, einen Datensatz in der verbundenen Adress-Datenbank erzeugen können, wie gesagt mit nur einem Button-klick, für den Fall, dass es Herrn Meier so gut gefallen hat dass er gedenkt wiederzukommen.

Zum anderen hab ich besagte Datenbank angelegt, die ich auch mit dem Rechnungs-Calc-Sheet soweit verbunden habe, dass ich die Adressdaten in letzterem zumindest manuell in Textfelder eingeben, suchen und wieder rauskopieren kann, letzteres wenn Herr Meier eben voriges Jahr schon da war.
Auch hier brauche ich mehr Komfort für die Userin, der brauch ich nicht kommen mit "Äh, ja, das ist eigentlich ganz einfach, da musst du in dieses Feld hier klicken, das ist aber ein Textfeld, weißt du, keine Zelle, und dann da drin alles auswählen und dann musst du strg-c drücken, also strg gedrückt halten und dann einmal c drücken aber das c nur kurz, nichwa, und dann musst du da drüben einmal reinclicken und strg-v drücken, und dann machst du das Ganze noch dreimal aber an anderen Stellen, is klar, ne ?" In der Zeit hat sie alles zu Fuß eingetippt und alles war für die Katz. Also brauch ich auch hier einen Knopf, der diesmal im Rechungs-Calc-Sheet die gefundenen Daten aus den Textfeldern wieder in echte Zellen kopiert mit denen dann wiederum wie oben beschrieben die Rechnung korrekt befüllt wird. Es soll nur im Rechungs-Calc-Sheet gearbeitet werden, die Datenbank mit ihrem zugrundeliegenden Adress-Calc-Sheet soll nicht separat an die Oberfläche kommen.

Knackpunkt bei meinem Ansatz ist die Tatsache, dass die Datenbankdaten im Rechnungs-Calc-Sheet eben in Textfeldern und nicht in Zellen angezeigt werden. Und ich aus diesen nichts automatisiert rein- und rauskopiert bekomme.

Hier im Rechnungs-Calc-Sheet links die Zellen mit den aktuellen Adressdaten, rechts in gelben Textfeldern ein angezeigter Datensatz aus der Dantenbank. Darüber die drei bislang nichtfunktionalen Knöpfe. Den Rest der Rechnung hab ich nicht dargestellt, der ist genauso langweilig:

Bildschirmfoto 2024-05-28 um 11.41.50.png
Bildschirmfoto 2024-05-28 um 11.41.50.png (32.44 KiB) 20063 mal betrachtet
Die aktuellen Daten des Formulars
Da ist schon das erste Fachwort mit Disasterpotenzial. Verstehe ich das richtig, das 'Formular' ist mein mit der Adress-Datenbank verbundenes Adress-Calc-Sheet, ja ? Ich kann von einer Bürofachkraft *vielleicht* verlangen, dass sie zuerst von dieser auf die andere Maske wechseln muss um dann wiederum in dieser Maske weiterarbeiten zu können, aber hier ist das leider nicht vermittelbar. Alles muss vom Rechnungs-Calc-Sheet aus passieren.
Da Du die Daten aus Base bereits in Calc in einem Formular darstellst kannst Du neue Datensätze doch auch in dieses Formular eintragen (Button "Neuer Datensatz", Button "Speichern").
Genau das will ich machen, aber es scheitert eben an der mangelnden Kooperation der Textfelder.

Re: Daten zwischen Datenbank und Calc kopieren

von RobertG » Di, 28.05.2024 10:12

Mir ist bei der Konstruktion überhaupt nicht klar, wozu Du Calc benutzen möchtest.
Natürlich kannst Du Daten aus einer Datenbank auslesen und nach irgendwohin kopieren. Die aktuellen Daten des Formulars bekommst Du am einfachsten, wenn der Button, den Du erstellst, in dem entsprechenden Formular liegt:

Code: Alles auswählen

SUB DatenKopieren(oEvent AS OBJECT)
oForm = oEvent.Source.Model.Parent
stString1 = oForm.getString(1)
stString2 = oForm.getString(2)
END SUB
Damit würdest Du in den Variablen die Inhalte der zugrundeliegenden Tabelle rein nach der Position der Felder in der Tabelle ermitteln. Vielleicht etwas riskant.

Code: Alles auswählen

SUB DatenKopieren(oEvent AS OBJECT)
oForm = oEvent.Source.Model.Parent
stString1 = oForm.getString(oForm.findColumn("Nachname"))
stString2 = oForm.getString(oForm.findColumn("Vorname"))
END SUB
Damit hast Du den Inhalt der Felder "Nachname" und "Vorname" in die Variable eingelesen - unabhängig von der Position.
Wie Du die Werte in Calc rein schreibst weißt Du vermutlich besser als ich. Ich arbeite bei Calc nicht mit Makros. Aber hier sonst ein Weg:

Code: Alles auswählen

oDoc = thisComponent
oSheet = oDoc.sheets(0)
oCell = oSheet.getCellByPosition(0,0)
oCell.String = stString1
oCell = oSheet.getCellByPosition(1,0)
oCell.String = stString2
Die Position, wo die Werte hin sollen, musst Du natürlich entsprechend anpassen.
Da Du die Daten aus Base bereits in Calc in einem Formular darstellst kannst Du neue Datensätze doch auch in dieses Formular eintragen (Button "Neuer Datensatz", Button "Speichern").


Gruß

Robert

Daten zwischen Datenbank und Calc kopieren

von fuzzfilth » Mo, 27.05.2024 22:12

Hallo beisammen.

Anfänger hier, sorry, und nein, ich hab mit der Suche nichts gefunden (wenn ich wüsste wonach ich suche bräuchte ich nicht zu suchen...)

Also.
- Es ist mir gelungen eine Datenbank zu erstellen, in denen Adressen (gähn) gesammelt werden
- Diese Adressen kann ich auch in einer Calc Tabelle aufrufen, ihre Daten werden nach Suche in vier Textfeldern angezeigt
- Ich hab auch die Formular-Navigation unten gefunden und kann so neue Datensätze von der Tabelle aus in die Datenbank eingeben

Aber mir fehlt noch folgendes damit das für eine computerfremde Userin einigermaßen komfortabel wird:

1. Nach dem Finden eines Datensatzes (der in vier Textfeldern angezeigt wird) soll der Inhalt dieser vier Textfelder mit einem Button (den hab ich schon) in vier Zellen der Tabelle kopiert werden, schließlich will sie mit den Daten ja irgendwas anfangen. Dazu muss ich vermutlich ein Makro schreiben, beim Versuch desselben kann ich aber schon nicht die Daten aus dem ersten Feld holen, weil das eben keine Zelle sondern ein Textfeld ist. Wie geht das richtig ?

2. Genauso möchte ich umgekehrt mit einem zweiten Button (den hab ich auch schon) existierende Daten aus vier Zellen in einen neu anzulegenden Datensatz der Datenbank schreiben. Dabei hab ich dasselbe Problem wie oben. 'Neuer Datensatz' krieg ich noch ins Makro rein, aber nach erfolgreichem Kopieren aus der Zelle hat das Makro keinen blassen Dunst dass ich die Daten im Textfeld haben will. Wie geht das richtig ?

3. Dass man zum Suchen der Adressen das Fernglas links unten nutzen muss und nicht das oben in der Mitte (Finden & Ersetzen) bekomm ich garantiert nicht vermittelt. Ich hab auch schon einen Button wo drauf steht "Adresse suchen". Klicken auf's (richtige) Fernglas lässt sich aber nicht als Makro aufzeichnen. Wie geht das richtig ?

Vielen Dank schon mal

Nach oben