dialog der eine datei einliest wird nicht ausgeführt

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

Moderator: Moderatoren

kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

dialog der eine datei einliest wird nicht ausgeführt

Beitrag von kannenklaus »

hallo

schon wieder habe ich ein kleines problem. ein von mir entworfener dialog hat eine schaltfläche zum öffnen einer datei mit der bindung an das entsprechende makro.

das problem ist, dass entweder der dialog stehen bleibt und kein import stattfindet oder bei oDlg.dispose() der ladevorgang gestartet wird, das makro aber dann mit haut und haaren abschmiert (also mit openoffice).

wird das makro alleine über extras>>makros>>makro ausführen gestartet klappt alles.

der mit der schaltfläche verknüpfte code lautet wie folgt:

Code: Alles auswählen

Sub SuErImpDBF

freue mich auf eine antwort

beste grüße

klaus

	call [mdlImport].ImpDbfInAktivesDokument
'	oDlg.dispose()


End sub
der code ImpDbfInAktivesDokument sieht so aus:

Code: Alles auswählen

Sub ImpDbfInAktivesDokument
	Dim vDateiDialog 
	Dim vDateiZugang
	dim i as integer
	dim sPfad as string	 		'Startverezichnis der Dialoge
	Dim sDatei as String        'nimmt den Pfad und den Dateinamen auf
	Dim sFrame as String
	

	vDateiDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")'Datei Öffnen-Dialog wird erstellt
	vDateiZugang = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")'Dateizugang wird erstellt
'	sFrame = "lbp_"
'hier wird der Standardpfad festgelegt und in die URL-Schreibweise umgewandelt	
	sPfad = ConvertToUrl("x:\446\GIS\pfa21\gauss\lbp_mass")
	
'prüft ob der angegebene Pfad vorhanden ist.	
	if vDateiZugang.Exists(sPfad) Then
	   vDateiDialog.SetDisplayDirectory(sPfad)
	else
	msgbox ("Der gewählte Pfadname existiert nicht!" + Chr(13)+"Die Routine wird beendet.",0+64,"dBase-Import Fehler")
	exit sub
	End if
	
'Titel des Öffnen-Dialogs wird festgelegt
	vDateiDialog.setTitle("B+P :::dBase-Import:::")
	
'Öffnen Dialog wird auf dBase gestellt
	vDateiDialog.appendfilter("dBase","*.dbf")

'der Variablen i wird der Dateidialog zugewiesen und die if-Abfrage vorbereitet
	i = vDateiDialog.Execute()

'der Variablen sDatei wird der kpl. Dateipfad übergeben	
	If i = 1  then
	  sDatei = vDateiDialog.Files(0)
	end if	
	vDateiDialog.dispose()
	
'Hier findet der eigentliche Import statt
'arg (1)=Array mit 2 Argumenten definieren für den Filter und die Filteroptionen
Dim oFrame as Object
Dim arg(1) as new com.sun.star.beans.PropertyValue
	arg(0).name = "FilterName" 
	arg(0).value = "dBase" 
	arg(1).name = "FilterOptions"
	arg(1).value = "0"   'System Character Set Umlaute werden richtig wiedergegeben
	oFrame = StarDesktop.CurrentComponent.CurrentController.Frame 
'if-Abfrage prüft, ob ein Dateiname übergeben worden ist.
	if vDateiZugang.Exists(sDatei) Then
	oFrame.loadComponentFromURL(sDatei, "_self", 0, arg())
	else
		msgbox ("Es wurde keine dbf-Datei ausgewählt!"+ Chr(13)+"Die Routine wird beendet.",0+64,"dBase-Import Fehler")
		exit sub
	end if
End Sub
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Klaus,

warum willst du eigentlich die neue Datei in den gleichen Frame einlesen?

Das ist ja auch die Frage im anderen Thread. Wenn ich mir diesen Code hier betrachte, dann gibt es einfach Kollisionen zwischen den jeweiligen Controllern.
Wenn du über eine Schaltfläche das Makro "Sub SuErImpDBF " startest, so hast du hier eine Umgebung (Controller). In dem Makro rufst du eine anderes auf - ok. Solange wartet jetzt dieses Makro, bis der Rücksprung erfolgt - und arbeitet dann weiter - in deinem Fall beendet es sich dann erst!!
Im neunen Makro aber willst du ein neues Dokument mit einem eigenen Controller in deine Umgebung laden - und somit den alten Controller - der ja noch auf Signale wartet - rausschmeissen.

Das geht schief.....

Anders sieht es aus, wenn du das Marko über die eigene Basic-Umgebung startest - dann gibt es keine Controllerwidersprüche.

Also, ich denke, da kannst du nur ein neues Dokument laden und abschliessend das aktuelle schliessen.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo thomas,
warum willst du eigentlich die neue Datei in den gleichen Frame einlesen?
weil man so die gewünschte funktionalität in einem dialog unterbringen kann. schade, dass sich die controller im weg sind.

danke für deinen hinweis.

beste grüße

klaus
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Wenn du auf "_self" verzichtest und das aktuelle Dokument selber schliesst und dann mit odoc=load... die dbase-datei öffnest, läuft dein Makro.

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo michael

zuallerst danke für deinen tipp.
odoc=load.
odoc kann weder als odoc=loadcomponentURL noch als odoc.oadcomponentURL übergeben werden. :?

wo wäre odoc.close(true) anzuwenden? in dem makro das den dialog aufruft?

freue mich auf deine anwort.

grüsse

klaus
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Sorry, ich dachte Du würdest mit dem kurzen Hinweis klarkommen.

Code: Alles auswählen

    odoc=stardesktop.currentComponent
    odoc.close(true)   
    
    Jetzt Dein Dialog....

    arg(0).name = "FilterName"
    arg(0).value = "dBase"
    arg(1).name = "FilterOptions"
    arg(1).value = "0"  
    odoc=starDesktop.loadComponentFromURL(sDatei, "_blank", 0, arg())
Wenn das Makro in OO steht und nicht im Dokument sollte es gehen.

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Antworten