Von Calc zu Datensatz in Base springen

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: Von Calc zu Datensatz in Base springen

Re: Von Calc zu Datensatz in Base springen

von F3K Total » Sa, 04.02.2012 11:57

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

Re: Von Calc zu Datensatz in Base springen

von Reginald » Sa, 04.02.2012 11:50

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

von F3K Total » Sa, 04.02.2012 10:17

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

von Reginald » Mo, 30.01.2012 20:48

Hey R,

super, das klappt 1a und ist genau, wonach ich gesucht habe.

Danke,
Reginald

Re: Von Calc zu Datensatz in Base springen

von F3K Total » So, 29.01.2012 13:13

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.

Von Calc zu Datensatz in Base springen

von Reginald » Sa, 28.01.2012 19:50

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

Nach oben