BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

mysql autoconnect, form autostart

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
drheiser
Beiträge: 8
Registriert: Mi 27. Apr 2016, 16:51

mysql autoconnect, form autostart

Beitrag von drheiser » Mi 11. Mai 2016, 21:36

Meine Datenbank läuft auf einem mysql server. Dieser braucht einen Benutzer+Passwort.
Ich würde gerne beim Start der Datenbank automatisch ein Formular öffnen. Ich habe schon etliche Varianten probiert, klappt aber nicht. Ich vermute es scheitert an der Verbindung zum mysql server. Hier muß man immer manuell Passwort und Benutzer eingeben.
Läßt sich die Verbindung zum mysql server automatisieren, sodaß ich das Passwort nicht mehr eingeben muß?

mein code:

Sub AutoloadForm
Con = ThisDatabaseDocument.CurrentController
If NOT ( oCon.isConnected() ) Then oCon.connect()
oCon.loadComponent(com.sun.star.sdb.application.DatabaseObject.FORM,"Lagerverwaltung.StammdatenListe",FALSE)
End Sub

das Makro habe ich "Aktion bei Dokument öffnen" hinterlegt.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: mysql autoconnect, form autostart

Beitrag von RobertG » Mi 11. Mai 2016, 22:21

Hallo drheiser,

aus dem Handbuch, ohne es anzupassen:
IF NOT oDatenquelle.IsPasswordRequired THEN oVerbindung = oDatenquelle.GetConnection("","")
Hier wäre es möglich, fest einen Benutzernamen und ein Passwort einzugeben, wenn eine Passworteingabe erforderlich wäre. In den Klammer steht dann ("Benutzername","Passwort").
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

drheiser
Beiträge: 8
Registriert: Mi 27. Apr 2016, 16:51

Re: mysql autoconnect, form autostart

Beitrag von drheiser » Mo 30. Mai 2016, 15:47

Vielen Danke für die Antwort, Robert.
Leider klappt das nicht.
Es erfolgt kein autoconnect mit der mysql Datenbank und vermutlich wird auch deshalb das "Start"-Formular nicht automatisch geöffnet.
Hier mal mein code:

sub OnOpenDocument()
Dim oController
oController = ThisDatabaseDocument.CurrentController
IF NOT oController.IsPasswordRequired THEN oVerbindung = oController.GetConnection("benutzer","passwort")
IF NOT ( oController.isConnected() ) THEN oController.connect() ' Connect to the database, if necessary
oController.loadComponent( com.sun.star.sdb.application.DatabaseObject.FORM, "Lagerverwaltung.StammdatenListe", FALSE ) ' Parameters: ObjectType, Parameter ObjectName, ForEditing
End Sub

devdol
Beiträge: 45
Registriert: Fr 11. Mär 2011, 17:59

Re: mysql autoconnect, form autostart

Beitrag von devdol » Mo 17. Sep 2018, 16:33

... da muß ich mich leider ohne Antwort der Frage anschließen. Warum erhält man nach einem

Code: Alles auswählen

	If Not oController.isConnected()  Then oController.DataSource.GetConnection(sUser,sPassword)
	oController.loadComponent( com.sun.star.sdb.application.DatabaseObject.FORM, meinFormularname, FALSE ) '
dennoch nur die Fehlermeldung
"Type: com.sun.star.sdbc.SQLException, Message: [OOoBase] Es besteht keine Verbindung zur Datenbank.."

Es sollte doch möglich sein, anstelle des interaktiven Dialogs, den man mit CurrentController.Connect() aufrufen kann, auch ohne Dialog automatisch die Datenbankverbindung für das Formular zu erzeugen - nur wie?

Entwickler, die sich mit dem MVC-Paradigma hinter dem Ganzen besser auskennen, können vielleicht weiterhelfen?

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: mysql autoconnect, form autostart

Beitrag von RobertG » Mo 17. Sep 2018, 19:27

Hallo devdol,

ich habe das jetzt einmal mit MySQL ausprobiert. Die Weitergabe des Passwortes über

Code: Alles auswählen

oDatasource.GetConnection("username","password")
ist anscheinend nicht möglich.
Die folgende Verfahrensweise führt bei mir zu einer Verbindung:

Code: Alles auswählen

oDatasource = ThisComponent.DataSource
oDatasource.Password = "password"
Ob da der Dialog, der sonst erscheint, die Eingabe des Passwortes über GetConnection verhindert, kann ich nicht sagen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

devdol
Beiträge: 45
Registriert: Fr 11. Mär 2011, 17:59

Re: mysql autoconnect, form autostart

Beitrag von devdol » Do 20. Sep 2018, 10:56

Hallo Robert,

vielen Dank für den interessanten Vorschlag!
Folgendes habe ich jetzt in einem Autostart-Makro stehen, welches an das Ereignis "Dokument öffnen" gebunden ist:

Code: Alles auswählen

 ' (1)
	oDatasource = ThisComponent.DataSource
	oDatasource.Password = sPassword
	oDatasource.User = sUser
	oDatasource.IsPasswordRequired = False
	oDatasource.GetConnection(sUser,sPassword)
	' Xray oDatasource
 ' (2)	
	oController=ThisComponent.CurrentController
	MsgBox "Connected:"+oController.isConnected() 

	If (Not oController.isConnected() ) Then 
	   oController.DataSource.GetConnection(sUser,sPassword)
           MsgBox "Nach getConnection ; Connected:"+oController.isConnected() 	   
	 End If  
	'
 ' (3)	
	oController.loadComponent( com.sun.star.sdb.application.DatabaseObject.FORM, _
       sFormularName, FALSE ) ' Parameters: ObjectType, Parameter ObjectName, ForEditing:FALSE
Das interessante dabei ist:
* Alle Zuweisungen in (1) sind möglich und funktionieren auch (wie man sich mit Xray überzeugen kann).
* Der Aufruf von GetConnection() zeigt keinen Dialog mehr an
* Trotzdem liefern beide MsgBoxes "False" für den .Connected-Status, und in Block (3) kommt folgrichtig die Fehlermeldung
"Type: com.sun.star.sdbc.SQLException, Message: [OOoBase] Es besteht keine Verbindung zur Datenbank."
* Ändert man "oDatasource.IsPasswordRequired = True", ändert das auch nichts an vorgenanntem Verhalten.

Der Zugriff auf die Datenbank (mariadb; Verbundungsart: mysql(odbc", weil das die einzige zu sein scheint, die zumindest meistens einigermaßen fehlerfrei funktioniert) ist mit einem bestimmten Benutzernamen und leerem Kennwort möglich.
Setze ich einen anderen berechtigten DBuser ein mit einem nichtleeren Kennwort, funktioniert das ganze ebenfalls nicht, also kann es auch nicht am Spezialfall "Leerstring" liegen.

Hat es irgendjemand geschafft, ein Formular, das mysql-Daten anzeigt, automatisch zu öffnen, ohne jedes Mal den Dialog "Authentifizierung erforderlich" passieren zu müssen?

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: mysql autoconnect, form autostart

Beitrag von RobertG » Do 20. Sep 2018, 15:59

Hallo devdol,

ist für mich auch nur eine Sache von trial-and-error sowie xray:

Code: Alles auswählen

SUB ConnectDB
	oDatasource = ThisComponent.DataSource
	oDatasource.Password = "my Password"
	ThisComponent.CurrentController.Connect()
	ThisComponent.FormDocuments.getByName( "formname" ).open
END SUB
Der Zugriff auf die Tabellen klappte so, weil die Verbindung wohl mit der Passwortweitergabe klar war.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

devdol
Beiträge: 45
Registriert: Fr 11. Mär 2011, 17:59

[gelöst] Re: mysql autoconnect, form autostart

Beitrag von devdol » Fr 21. Sep 2018, 10:31

Hallo Robert,

erst mal tausend Dank für Deine Hilfsbereitschaft! Habe mich so gefreut, weil

Code: Alles auswählen

ThisComponent.FormDocuments.getByName(sFormName).open
schon etwas anderes zu sein scheint als

Code: Alles auswählen

oController.loadComponent( com.sun.star.sdb.application.DatabaseObject.FORM, sFormName, FALSE )
das per se ja funktioniert, doch vielleicht nicht mit der Methode der Zugangsdaten-Parametrisierung nicht zusammenpaßt
(das Verständnis von MVC und damit auch das Innenleben von LO erschließt sich mir als Nicht-Entwickler nicht und wird es wohl auch nie...).

Gleichwohl, mit

Code: Alles auswählen

	sUser = (...)
	sPassword = "" ' trifft im konreten Fall zu
        oDatasource = ThisComponent.DataSource
	oDatasource.Password = sPassword ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	ThisComponent.CurrentController.Connect()
	ThisComponent.FormDocuments.getByName( sFormName).open	
öffnet sich das Formular wieder nur nach jenem Dialog, der bereits richtig (mit sUser und leerem Kennwort) vorbelegt ist, dennoch Bestätigung verlangt.

Nach soviel Error habe ich nun noch ein weiteres Quentchen Trial hinzugefügt und statt des .Password-Attribus das .IsPasswordRequired zugewiesen:

Code: Alles auswählen

	sUser = (...)
        oDatasource = ThisComponent.DataSource
	oDatasource.IsPasswordRequired = False  ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	ThisComponent.CurrentController.Connect()
	ThisComponent.FormDocuments.getByName( sFormName).open	
Erstaunlich finde ich das deshalb, weil unter "Eigenschaften/Kennwort erforderlich: [ ]" diese Tatsache schon auf augenscheinlich globalem Level für die Anwendung vorkonfiguriert ist. Doch täuscht hier der Augenschein wohl wieder mal.

Auf jeden Fall tut das kleine Makro jetzt endlich genau das, was es soll, nämlich mir gefühlte 100 Klicks auf ein sinnfreies "OK" täglich zu ersparen. Und wir können endlich diesen Beitragsfaden mit [gelöst] verzieren!
Danke nochmals an RobertG, denn ohne Deine Anregung hätte ich wie einige weiter oben wohl auch schon wieder aufgeben müssen.

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten