Datenbank mit speichern unter abspeichern

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Defender19
**
Beiträge: 20
Registriert: Do, 28.06.2018 14:07

Datenbank mit speichern unter abspeichern

Beitrag von Defender19 »

Hallo Zusammen,
ich bin neu hier und wollte mal fragen, ob es möglich ist eine Datenbank
mit einem Makro "speichern unter " zu speichern und anschließend die
Datenbank mit einem Makro zu schließen?
Geht das nur mit einer Tabelle bei Calc?

Wäre nett, wenn jemand mir helfen könnte

Gruß Defender19/
Defender19
**
Beiträge: 20
Registriert: Do, 28.06.2018 14:07

Re: Datenbank mit speichern unter abspeichern

Beitrag von Defender19 »

Ich habe nun ein Makro, dass mir das "speichern unter" macht,
allerdings zeigt er mir nicht alle Laufwerke an. Habe ich etwas falsch gemacht?

Code: Alles auswählen

[Sub speichern()
  
  oDoc=thisComponent
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "FilterName"
  args1(0).Value = "calc8"

  arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION) 
  dialog = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
  dialog.Initialize(arg()) 
  dialog.appendFilter("ODB Datenbank (*.odb)", "*.odb")
  
   IF Msgbox ("Bitte Datei abspeichern, "  & vbNewLine & _
  ""& vbNewLine & _
   "und den Speicherort wählen !" & vbNewLine & _
   ""& vbNewLine & _
   " Vielen lieben Dank")= 1 then 
   dialog.SetMultiselectionMode(False)
  dialogdisplayDirectory = ConvertToURL("C:\")
  dialog.DefaultName = Filename
  ok = dialog.execute()
 end if
 if ok = 1 Then   
	datei = dialog.getFiles() 
	URL = datei(0) 
    oDoc.storeasurl(URL, args1())

  end if
  
  end sub
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Datenbank mit speichern unter abspeichern

Beitrag von F3K Total »

Moin,
ich verstehe zwar den Sinn des Makros nicht, aber einen Fehler habe ich entdeckt, es fehlt ein Punkt. So wird Laufwerk C angezeigt, läßt du die Zeile weg, werden alle Laufwerke angezeigt:

dialog.displayDirectory = ConvertToURL("C:\")

Gruß R
Defender19
**
Beiträge: 20
Registriert: Do, 28.06.2018 14:07

Re: Datenbank mit speichern unter abspeichern

Beitrag von Defender19 »

Hallo F3K Total,

vielen Dank für deinen Hinweis. Allerdings erscheinen wiederum nicht alle
Laufwerke. Egal ob ich den Punkt setze oder die Zeile entferne. Kann es daran
liegen, dass die Datenbank auf einem Server abgelegt ist, von denen alle
zugreifen können? Und es daher kein lokales Laufwerk ist?

Ich habe auch versucht die Daten mit einem "Speichern Makro" abzuspeichern,
allerdings speichert er das nicht in der Originaldatenbank ab, sondern speichert
es auf dem jeweiligen persönlichen Bereich des Users im Netzwerk ab. Ich finde
und finde den Fehler nicht. Deswegen wollte ich den Weg mit "speichern unter"
gehen, um sicherzustellen, dass nach der Dateneingabe auch alles später wieder
vorhanden ist.
Mit diesem Teil, zeigt er mir alle Laufwerke an....mmmmhhh, ich komme nicht
dahinter warum es hier geht und beim anderen nicht.
Kannst du mir da einen Tip geben?

Grülße Defe

Code: Alles auswählen

DialogOpen=createunoservice("com.sun.star.ui.dialogs.FilePicker")
       DialogOpen.title = "Datei auswählen"
       DialogOpen.displaydirectory = "c:\"
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Datenbank mit speichern unter abspeichern

Beitrag von F3K Total »

Moin,
wieso die Netzlaufwerke nicht angezeigt werden, kann ich nicht sagen, bin da kein Fachmann.
Allerdings wollte ich dich darauf hinweisen, dass ich deine "Arbeitsweise" für kritisch halte. Wenn ich dich richtig verstehe, willst du mit mehrern Nutzern über ein Netzlaufwerk auf die .odb Datei zugreifen.

Punkt 1:
Es handelt sich aber bei einer .odb Datei, so wie geliefert um eine SINGLE-USER Datei. Zugriff mit mehreren USERN gleichzeitig ist ausgeschlossen.

Punkt 2:
Beim Öffnen der .odb (nix weiter als ein .zip-Archiv), wird die eingebettete HSQL-Datenbank aus dem .zip-Archiv entpackt und dann im Arbeitsspeicher des jeweiligen Clients gehalten. Die ggf. veränderten Daten werden erst dann sicher zurückgespeichert, wenn OpenOffice komplett beendet wird. Ob dies stattfindet, wenn es nicht vergessen wird, ist schwer zu kontrollieren.
Kommt es während des Betriebs zu einem Fehler, z.B. Rechnerabsturz oder Stromausfall, ist die .odb Datei in den meisten Fällen zerstört, die Daten unwiederbringlich verloren. Es gibt im Internet erfahrene Leute, die dringend davon abraten eine .odb, wie geliefert, professionel zu verwenden.

Eine möglich Abhilfe, aber nicht banal, wäre der folgende Weg:
Man kann die HSQL-Datenbank aus der .odb Datei herauslösen, sollte man erst dann tun, wenn das Design steht.
Die herausgelöste DB kann im Server-Mode laufen gelassen werden, dazu ist es allerdings erforderlich, das auf dem Server JAVA laufen darf. Ein kleines Sript startet, ein zweites fährt die Datenbank wieder herunter, ist aber nicht nötig, kann immer laufen.
Es handelt sich hier um das Datenbank-Backend.
Wenn es soweit ist, kann man mit mehreren Nutzern gleichzeitig zugreifen, die .odb, samt Abfragen, Formularen und Berichten arbeitet dann vom jeweiligen Client als Frontend.
So ist es auch möglich verschiedene Benutzernamen und Passworte zu vergeben, den Nutzern unterschiedliche Berechtigungen auf die Tabellen zuzuweisen und vieles mehr. Und am Wichtigsten, Datenverlust ist nahezu ausgeschlossen.
Aber wie gesagt, einfach ist das nicht. Es ist einiges zu lernen bevor das läuft.

Das Herauslösen des HSQL DB habe ich in einem meiner Videotutorials beschrieben.
Informationen zum Server-Modus findest du z.B. hier: https://forum.openoffice.org/en/forum/v ... 85#p257585
Gruß R
Defender19
**
Beiträge: 20
Registriert: Do, 28.06.2018 14:07

Re: Datenbank mit speichern unter abspeichern

Beitrag von Defender19 »

Hallo,

um die Handhabung noch einmal zu erklären.
Es arbeitet immer nur eine Person an der Datenbank, sollte eine andere Person zugreifen wollen, erscheint
ein Hinweis, mit der entsprechenden User-ID. Somit kann immer nur eine Person darauf arbeiten und das
ist auch so vollkommen in Ordnung.
Die Datenbank startet beim öffnen sofort mit den Button "für Eingaben" nach dem temporären speichern und
beenden eines Dialogs, kann ich anschließend das "speichern unter" (kein Makro) manuell über Datei speichern
erledigen. Da erscheinen wiederum alle Laufwerke.

Somit geht es mir eigentlich nur darum, dass beim "speichern unter"(Makro) alle Laufwerke angezeigt werden.
Du kannst mir auch nicht sagen, warum bei DialogOpen.displaydirectory......alle Laufwerke angezeigt werden?

gruß Defe
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datenbank mit speichern unter abspeichern

Beitrag von Stephan »

Somit geht es mir eigentlich nur darum, dass beim "speichern unter"(Makro) alle Laufwerke angezeigt werden.
Du kannst mir auch nicht sagen, warum bei DialogOpen.displaydirectory......alle Laufwerke angezeigt werden?
Bei mir werden (unter Windows 7) alle Laufwerke angezeigt, wenn ich den Dialog aufrufe, aber nur dann wenn ich den Windows-Dialog nutze (was Standard ist) jedoch nicht wenn ich den OO-eigenen Dialog nutze indem ich den unter Extras-Optionen/Einstellungen-Allgemein -->"OpenOffice-Dialoge verwenden" aktiviert habe.


Gruß
Stephan
Defender19
**
Beiträge: 20
Registriert: Do, 28.06.2018 14:07

Re: Datenbank mit speichern unter abspeichern

Beitrag von Defender19 »

Hallo Stephan,

vielen Dank für deine schnelle Antwort. Allerdings ist bei uns im
Geschäft alles etwas anders. Unsere IT hat Open Office angepasst und
somit erscheinen deine Verweise leider nicht bei mir unter "Extras-Optionen/Einstellungen-Allgemein -->"OpenOffice-Dialoge".
Auch geht das Aufzeichnen der Makros nicht. Ich muss alles von Hand programmieren. Der Button wurde
schlicht weg entfernt. Bin schon froh, dass ich mit F11 in die Makros komme.

Haste noch ne andere Idee? Bin für alles dankbar...

Gruß Defe
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Datenbank mit speichern unter abspeichern

Beitrag von F3K Total »

Hallo Defender,
ich wiederhole meinen Hinweis:
F3K Total hat geschrieben: Mi, 25.07.2018 12:22 ... Die ggf. veränderten Daten werden erst dann sicher zurückgespeichert, wenn OpenOffice komplett beendet wird.
Und ja, es gibt einen OpenOffice-Dialog

Code: Alles auswählen

dialog = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
und den Betriebssystem Dialog

Code: Alles auswählen

dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
Bei mir unter W7 zeigen alle beide meine sämtlichen lokalen Laufwerke, andere habe ich leider nicht:
d.png
d.png (31.14 KiB) 5818 mal betrachtet

Gruß R
Defender19
**
Beiträge: 20
Registriert: Do, 28.06.2018 14:07

gelöst: Datenbank mit speichern unter abspeichern

Beitrag von Defender19 »

Hallo F3K Total,

genau das wars,....hippppppppppppie ich haben den Windows Dialog genommen und
siehe da, alle Laufwerke sind vorhanden.
Echt klasse, dass du mir geholfen hast....ich bin sprachlos und begeistert.

:lol: :lol: :lol: :lol:

Vielen lieben Dank an dich und an Stephan für die Hilfe.

WOW.WOW.WOW komm einfach nicht aus dem staunen raus......

Defender19
Defender19
**
Beiträge: 20
Registriert: Do, 28.06.2018 14:07

Re: Datenbank mit speichern unter abspeichern

Beitrag von Defender19 »

Sorry, dass ich den Thread noch einmal öffnen muß. Ich habe folgendes
Problem. Mit meinem Makro "speichern unter" speichert er zwar die Datenbank
ab. Allerdings ist die Datenbank beim erneuten Starten komplett verschwunden und
ich stelle fest, dass es mit OO-Writer abgespeichert wurde. Somit wurde aus 1,32 Mbyte
plötzlich 8,53 kbyte. Ich verstehe nicht warum.
Kann mir jemand noch einmal helfen?

Code: Alles auswählen

Sub speichern()
  
  oDoc=thisComponent
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "FilterName"
  args1(0).Value = "calc8"

  arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION) 
  dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
  dialog.Initialize(arg()) 
  dialog.appendFilter("ODB Datenbank (*.odb)", "*.odb")
  
   IF Msgbox ("Bitte Datei abspeichern unter, "  & vbNewLine & _
  ""& vbNewLine & _
   "GS / Geschäft /" & vbNewLine & _
   ""& vbNewLine & _
   "  Programm / Geschaeft")= 1 then 
   dialog.SetMultiselectionMode(false)
 
  dialog.DefaultName = Filename
  ok = dialog.execute()
 end if
 if ok = 1 Then   
	datei = dialog.getFiles() 
	URL = datei(0) 
    oDoc.storeasurl(URL, args1())

  end if
  
  end sub
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Datenbank mit speichern unter abspeichern

Beitrag von F3K Total »

Hi,
statt

Code: Alles auswählen

oDoc=thisComponent
nimm

Code: Alles auswählen

oDoc = thisDatabaseDocument
Sonst speicherst du "ThisComponent", was z.B. nur das gerade geöffnete Formular sein kann.
Gruß R
Defender19
**
Beiträge: 20
Registriert: Do, 28.06.2018 14:07

gelöst: Re: Datenbank mit speichern unter abspeichern

Beitrag von Defender19 »

Hallo F3K Total,

genial....super.....das so etwas kleines, so eine große Auswirkung hat, ist
schon der Hammer. Ich muß noch viel lernen.

Ich danke dir unheimlich, für die echt klasse Unterstützung. Ich verbeuge
mich vor dir.

Endlich kann das Wochenende kommen....yeahhhh

Gruß Defe
Pretender1970
**
Beiträge: 28
Registriert: Fr, 05.01.2018 08:38

Re: Datenbank mit speichern unter abspeichern

Beitrag von Pretender1970 »

Hallo F3K Total,

darf ich dich noch einmal belästigen?

Ich habe doch das Makro "speichern unter" und mir ist aufgefallen, dass wenn ich den
Button anklicke und das Makro gestartet wird und ich den Ordner und die entsprechende
Datei (die soll überschrieben werden) ausgewählt habe, er mir die Datei ersetzt. Das ist
ja genau, was ich will.
Allerdings beim erneuten starten der Datei, sind die geänderten Einträge nicht vorhanden.
Ist da was beim Makro falsch? Oder liegt das generell an der Datenbank?

Gruß Defe

Code: Alles auswählen

Sub speichern()
  
  oDoc=thisDatabaseDocument
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "FilterName"
  args1(0).Value = "calc8"

  arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION) 
  dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
  dialog.Initialize(arg()) 
  dialog.appendFilter("ODB Datenbank (*.odb)", "*.odb")
  
   IF Msgbox ("Bitte Datei abspeichern unter, "  & vbNewLine & _
  ""& vbNewLine & _
   "Fa.GS / Firma Datenbank /" & vbNewLine & _
   ""& vbNewLine & _
   " Auflistung / Programm / Auflistung")= 1 then 
   dialog.SetMultiselectionMode(false)
 
  dialog.DefaultName = Filename
  ok = dialog.execute()
 end if
 if ok = 1 Then   
	datei = dialog.getFiles() 
	URL = datei(0) 
    oDoc.storeasurl(URL, args1())

  end if
  
  end sub
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Datenbank mit speichern unter abspeichern

Beitrag von F3K Total »

... wer lesen kann, ist klar im Vorteil, ich habe es dir bereits 2x geschrieben:
F3K Total hat geschrieben: Mi, 25.07.2018 15:54 Hallo Defender,
ich wiederhole meinen Hinweis:

F3K Total hat geschrieben: ↑
Mi, 25.07.2018 12:22
... Die ggf. veränderten Daten werden erst dann sicher zurückgespeichert, wenn OpenOffice komplett beendet wird.
Versuche mal

Code: Alles auswählen

Sub speichern()
  
  oDoc=thisDatabaseDocument
  oDoc.DataSource.flush'<---sollte die Daten der internen HSQLDB auf Platte speichern
  .
  .
  .
Gruß R
Antworten