Seite 1 von 1
Von Calc zu Datensatz in Base springen
Verfasst: Sa, 28.01.2012 19:50
von Reginald
Hallo zusammen,
ich arbeite viel mit Calc und Base, habe Daten in beiden, arbeite mich in die Programmierung ein und bastle mir ein Makro, mit dem ich Daten von Calc mit Base (mySQL) abgleichen kann.
Beispielsweise habe ich eine Datenbank Kunden und ein Formular Kundenformular, wo jeder Datensatz natürlich eine eindeutige ID hat im Feld ID.
Die Datenbank ist in OO registriert und das Formular ist geöffnet.
Kann ich mit einem Macro von OOCalc aus direkt das Kundenformular von Base in den Vordergrund holen und zum Datensatz mit ID=123 springen?
Grüße
Reginald
Re: Von Calc zu Datensatz in Base springen
Verfasst: So, 29.01.2012 13:13
von F3K Total
Hallo,
ja das geht,
hier ein kurzes Makro dazu.
Wenn Du mit dem Cursor in der Calc Tabelle in der Spalte ID stehst und dann das Makro aufrufst (z.B. per Tastenkombination oder Schaltfläche) passiert genau was Du möchtest.
Du mußt nur den Namen der Datenbank mit Endung .odb und den Namen des geöffneten Formulares im Code anpassen.
Ausserdem ermittelt das Makro die aktuelle Zeile aus der
ersten Spalte der dem Formular zugeordneten Abfrage/Tabelle mit .getint(
1)
Sollte deine ID in der dritten Spalte des Dateninhaltes des Formulares stehen, ändere hier in .getint(
3)
Code: Alles auswählen
Sub S_jump_to_BaseForm
nID=thiscomponent.currentselection.value
ocompmenum = stardesktop.Components.createEnumeration
while ocompmenum.hasmoreelements()
ocomp=ocompmenum.nextelement
if instr(1,ocomp.Title,"Datenbankname.odb : Formularname",1) > 0 then
odoc=ocomp
odoc.currentcontroller.frame.containerwindow.toFront
endif
wend
oform = odoc.DrawPage.forms.MainForm
oresult=oform.createResultSet
oresult.first
nrow = 1
do
nIDF=oresult.getint(1)
if nID=nIDF then
nfound=nrow
exit do
endif
nrow=nrow+1
loop until oresult.next = false
oform.absolute(nfound)
End Sub
Gruß R
Edit:
Code: Alles auswählen
if ocomp.Title = "Datenbankname.odb : Formularname" then
in
Code: Alles auswählen
if instr(1,ocomp.Title,"Datenbankname.odb : Formularname",1) > 0 then
geändert, sonst geht es nur wenn das Formular einmal im Entwurfsmodus geöffnet wurde, weil an den Titel noch "schreibgeschützt" drangehängt wird.
Re: Von Calc zu Datensatz in Base springen
Verfasst: Mo, 30.01.2012 20:48
von Reginald
Hey R,
super, das klappt 1a und ist genau, wonach ich gesucht habe.
Danke,
Reginald
Re: Von Calc zu Datensatz in Base springen
Verfasst: Sa, 04.02.2012 10:17
von F3K Total
Hi,
ich habe das Makro noch etwas verbessert, jetzt muß man nicht in die erste Spalte klicken, es reicht wenn man in der Zeile ist, oder die ganze Zeile markiert hat:
Code: Alles auswählen
Sub S_jump_to_BaseForm
osel = thiscomponent.currentselection
if osel.rows.count <> 1 then
msgbox ("Nur Zellen innerhalb einer Zeile selektieren!",16,"Fehler")
exit sub
else
nrow = osel.rangeaddress.startrow
nsheet = osel.rangeaddress.sheet
endif
nID = thiscomponent.sheets(nsheet).getCellByPosition(0,nrow).value
ocompmenum = stardesktop.Components.createEnumeration
while ocompmenum.hasmoreelements()
ocomp=ocompmenum.nextelement
if instr(1,ocomp.Title,"Datenbankname.odb : Formularname",1) > 0 then
odoc=ocomp
odoc.currentcontroller.frame.containerwindow.toFront
endif
wend
oform = odoc.DrawPage.forms.MainForm
oresult=oform.createResultSet
oresult.first
nrow = 1
do
nIDF=oresult.getint(1)
if nID=nIDF then
nfound=nrow
exit do
endif
nrow=nrow+1
loop until oresult.next = false
oform.absolute(nfound)
End Sub
Gruß R
Re: Von Calc zu Datensatz in Base springen
Verfasst: Sa, 04.02.2012 11:50
von Reginald
Hey R,
super, danke! Werde ich nachher mal testen.
Jetzt noch die 1 Mio Dollar Frage. Mein erstes je in Base erstelltes Makro war das hier:
Code: Alles auswählen
Dim sPath as String
Dim oForm as Object
Dim sPathField as String
oDoc = ThisComponent
oForm = oDoc.drawpage.forms.getbyindex(0)
sPathField = "FolderName" ' 'FolderName' ist der Feldname des Feldes wo der Folder drinsteht.
sPath = oForm.getByName(sPathField).text
'MsgBox "Der Pfad ist " + sPath
'Jetzt den Explorer öffnen:
shell "explorer /e," & sPath, 1
Damit öffne ich einen Folder im Windows Explorer. Der Foldername steht im Base-Formular drin.
Kann ich das einfach so an dein Makro hinten dranhängen, also: Lies die ID in Calc aus, spring zum entsprechenden Datensatz in Base, lies dort den Foldernamen aus und öffne den Folder?
Grüße
Reginald
Re: Von Calc zu Datensatz in Base springen
Verfasst: Sa, 04.02.2012 11:57
von F3K Total
Na, Du hast Glück,
oForm gibt es schon
oDoc gibt es auch schon
daher brauchst Du nur diesen Teil(ungeprüft):
Code: Alles auswählen
Dim sPath as String
Dim sPathField as String
sPathField = "FolderName" ' 'FolderName' ist der Feldname des Feldes wo der Folder drinsteht.
sPath = oForm.getByName(sPathField).text
'MsgBox "Der Pfad ist " + sPath
'Jetzt den Explorer öffnen:
shell "explorer /e," & sPath, 1
Gruß R