Per Makro String in Subtabelle einer Datenbank eintragen

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: Per Makro String in Subtabelle einer Datenbank eintragen

Re: Per Makro String in Subtabelle einer Datenbank eintragen

von wellmo » Mo, 05.03.2012 18:07

Hallo F3K Total

Unter viewtopic.php?f=18&t=52522 habe ich die Dateien hochgeladen. wenn du den Dialog öffnest und dann auf den Button Jacuzzi klickst, verstehst du mich vielleicht, warum ich auf den Dialog nicht verzichten will.

Gruss Dave

Re: Per Makro String in Subtabelle einer Datenbank eintragen

von F3K Total » Mo, 05.03.2012 16:40

Hallo Wellmo,
wenn Du so am Dialog hängst.
Du könntest natürlich alle Eingaben die Du im Dialog machst, auch im Formular der Datenbank vornehmen, dann hättest Du alle Daten in der DB.

Gruß R

Re: Per Makro String in Subtabelle einer Datenbank eintragen

von wellmo » Mo, 05.03.2012 15:58

Hi F3K Total

Erstmal Danke für den Vorschlag, dabei gibt es aber ein grosses Aber.
Du überspringst dabei leider den Dialog und der ist sehr wichtig weil man darauf noch diverse weitere Einstellungen vornimmt. Also beim ersten Dialog wählt man aus, welche Art Offerte,Auftrag,Rechnung es wird und im zweiten Dialog wählt man dann Modell,Farben,Optionen aus. Deshalb darf ich den Dialog nicht übergehen.
Mittlerweile bin ich da aber auch schon ein bisschen weiter, hab zum neuen Problem aber einen neuen Post aufgemacht unter: viewtopic.php?f=18&t=52522

Re: Per Makro String in Subtabelle einer Datenbank eintragen

von F3K Total » So, 04.03.2012 18:17

Hallo wellmo,
viele Wege führen nach Rom.
Ich würde Folgenden vorschlagen:
Alle notwendigen Daten werden per Formular in die Datenbank eingegeben.
Also auch alle Informationen, die zu einer Offerte gehören.
Dort gibt es einen Button, "Offerte exportieren" der ein Makro startet, was entweder ein leeres Calc Dokument oder eine von Dir vorformatierte Calc Vorlage öffnet.
In das Calc Dokument werden per Makro die Inhalte der Offerte (also des aktuellen Datensatzes) übertragen, dann unter einem eindeutigen Namen abgespeichert.
Vorteil: Du hast alle ID's direkt parat und die Daten sind konsistent, da Du in Deiner DB mit Autowerten keine ID doppelt vergeben kannst.
Gruß R
Edit: Anbei ein kleines prinzipielles Beispiel.
Öffne die Datei Kunden_Offerten.odb, darin das Formular Kunden_Offerten, wähle einen Kunden, danach eine Offerte aus und drücke den Button Offerte exportieren.
Dateianhänge
Kunden_Offerten.zip
(19.21 KiB) 48-mal heruntergeladen

Re: Per Makro String in Subtabelle einer Datenbank eintragen

von wellmo » Sa, 03.03.2012 09:10

Hi ,4

Das funktioniert nur unter der Bedingung das es auch der letzte Eintrag ist, da ich aber auch wiederkehrende Kunden habe ( zum Glück) funktioniert diese Methode leider nicht.
Aber um die Kundennummer automatisch bei neuen Einträgen in der Datenbank zu vergeben benutze ich diesen Vorgang.

Ich bin auch gerne bereit meine 2 Dateien so zu bearbeiten das ich sie hier hochladen kann ( Daten die nicht für die Öffentlichkeit sind raus zu löschen), sofern das hilft.

Edit:
Mir ist da gerade ein Lösungsweg eingefallen, nur happerts noch an der Umsetzung.
Ich müsste aus dem Formular (Base) per Button (Makro) den Dialog (Calc) starten und dabei eine SQL-Abfrage im Makro für die einzelnen Textfelder im Dialog machen.
Damit hätte ich Anrede,Vorname,Nachname,ID,Kundennummer, Adresse, PLZ, und Ort schon im Dialog und somit auch im jeweiligen Sheet welches ich über den Dialog starte.
Nun Frage ich mich: Wie öffne/lade ich mein Calc-Dokument, öffne den Dialog und schreibe in die verschiedenen Textboxen aus dem Formular.
Kann mir da wer einen Codeansatz zitieren betreffend Dokumentübergreifendem öffnen und schreiben?

Edit2:
Ich stell mir den Code in etwa so vor:

Code: Alles auswählen

Sub Offertenerstellen
Dim dlg as Object
Dim oDialog as Object

'Hier müsste der Code hin um das CalcDokument "Offerten" zu öffnen
DialogLibraries.LoadLibrary( "Standard" )
dlg = CreateUnoDialog( DialogLibraries.Standard.dOffertenerstellen )
DateField1111 = dlg.getControl("DateField1111")   
   oDateFieldModel = dlg.Model.DateField1111
   oDateFieldModel.Text = date    
dlg.execute()
REM Datum übertragen
oDoc = ThisComponent   
  oSheet = oDoc.CurrentController.getactiveSheet()
   oZell = oSheet.getCellRangeByName("B15") 
   myDate = DateField1111.text
   oZell.Value= CDate(myDate)
   oZell.NumberFormat = 36 'Format 13.05.2006
  
   DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
   oDatenquelle = DatabaseContext.getByName("DB-Name")
   oDatVerb = oDatenquelle.getConnection("","")
   oStatement = oDatVerb.createStatement()
   sSQL = "SELECT ""Anrede"" FROM ""Kunden"""
   oStatement.executeUpdate(sSQL)
   oTextFieldModel = dlg.Model.Textfield1
   oTextFieldModel.Text = sSQL
End Sub

Gruss Dave

Re: Per Makro String in Subtabelle einer Datenbank eintragen

von komma4 » Fr, 02.03.2012 22:48

Wenn Du einen Autowert als ID einträgst, dann frage nach dem Eintrag in der Haupttabelle die höchste ID ab - das ist die Neueste.


Hilft Dir das weiter?

Re: Per Makro String in Subtabelle einer Datenbank eintragen

von wellmo » Fr, 02.03.2012 20:37

Ok ich bin mittlerweile soweit in der Lage in Haupttabelle und in Untertabellen per Makro etwas einzutragen.

Mir kommt nun aber kein Lösungsweg in den Sinn, wie ich es anstellen kann, dass das Makro unter der richtigen ID abspeichert.
Irgendwie muss ich ihm ja sagen für welchen Kunden ich die Offerte, Auftrag oder Rechnung geschrieben habe.
Dazu benötige ich ja einen eindeutigen Wert wie die ID der Haupttabelle, nur ist diese nirgends im Sheet vermerkt um sie als Variable einzubauen.
Wenn ich die ID aus der Datenbank holen will, muss ich dazu auch wieder einen eindeutigen Wert haben wie z.B. die Kundennummer, die ich in die Offerte etc. einbauen will ( evtl. muss ich mich erstmal um dieses Problem kümmern?), den Namen will ich dazu nicht benutzen da der nicht eindeutig ist. Nur ist die Kundennummer nicht in der Haupttabelle sondern in einer Untertabelle mit einer 1:n Beziehung.

Ich hoffe mein Problem ist so nachvollziehbar.

Fallt da jemandem einen Lösungsansatz ein, wie ich das handhaben könnte?

Edit: Momentan hab ich es so gelöst, das man die ID manuell in einem Dialog eingeben muss. es funktioniert aber es ist leider nicht ganz perfekt ;)
Falls doch jemand einen Lösungsansatz sieht, nur her damit.

Gruss Dave

Per Makro String in Subtabelle einer Datenbank eintragen

von wellmo » Do, 01.03.2012 16:42

Sali zäme

Erneut stosse ich auf ein Problem, ich bin mir aber nicht sicher ob es hier drin richtig ist.

Folgende Situation:
ich habe ein Sheet das per Button (Makro) auf den Desktop abgespeichert wird, dies funktioniert auch. Nun möchte ich, dass das Makro einen Text (String) in eine Datenbank-Tabelle einträgt. Dies gelingt mir für die Haupttabelle (siehe Code unten), aber ich müsste den Text in eine Untertabelle eintragen, also wenn im Sheet in Zelle "A12" Offerte steht, dann muss es in die Untertabelle "Offerten" eingetragen werden

Datenbank-Struktur: Datenbank nur in Base erstellt
Haupttabelle: Kunden
ID ( Primärschlüssel, Autowert)
Vorname
Nachname
Datum

Untertabelle: Offerten
ID ( Primärschlüssel, Autowert)
KundenID ( Beziehung zur Haupttabelle)
Offerten
Datum

Untertabelle: Aufträge
ID ( Primärschlüssel, Autowert)
KundenID ( Beziehung zur Haupttabelle)
Aufträge
Datum

Untertabelle: Rechnungen
ID ( Primärschlüssel, Autowert)
KundenID ( Beziehung zur Haupttabelle)
Rechnungen
Datum

Code: Alles auswählen

Sub Speichern
   Dim oDoc As Object
   Dim oSheet As Object
   Dim oCell1 As Object
   Dim oCell2 As Object
   Dim oCell3 As Object
   Dim sName As String
   Dim sVorname As String
   Dim sLaufwerk As String
   Dim sFilename as String
   Dim DatabaseContext as Object
   Dim oDataquelle as Object 
   Dim oDatVerb as Object
   Dim oStatement as Object
   Dim sSQL as String
   Dim dummy()
  
'Sheet auf Desktop speichern
   oDoc = ThisComponent
   oSheet = oDoc.Sheets.getByName("Tabelle1")
   oCell1 = oSheet.getCellByPosition(3, 0) 
   sName = oCell1.String
   oCell2 = oSheet.getCellByPosition(2, 0)
   sVorname = oCell2.String
   oCell3 = oSheet.getCellByPosition(4, 0)
   sNummer= oCell3.String
   sLaufwerk = "C:/Users/Benutzername/Desktop/"
   sFilename = sNummer & " " & sName & " " & sVorname
   neuerpfad = sLaufwerk + "/" + sFilename + ".ods"
   dateiurl=converttourl(neuerpfad)
   odoc.storetourl(dateiurl,dummy())
   
'Text in DB-Tabelle speichern
   DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
   oDatenquelle = DatabaseContext.getByName("DB-Name")
   oDatVerb = oDatenquelle.getConnection("","")
   oStatement = oDatVerb.createStatement()
   sSQL = "INSERT INTO ""Kunden"" (" + " ""Vorname"", ""Nachname"") VALUES('" + sVorname + "','" + sName +"')" 
   oStatement.executeUpdate(sSQL)
   end Sub
So, und nun zu den vielen hoffentlich nicht all zu dummen Fragen meinerseits:
Wie bring ich dem Makro bei das in eine Untertabelle zu speichern?
Wie bring ich ihm bei, abzuchecken ob er im Richtigen Datensatz der Haupttabelle ist?
Erstellt wird mit dem Code oben immer ein neuer Datensatz, besteht der Datensatz aber schon, sollte in diesen eingefügt werden und nicht einen neuen Datensatz mit gleichem Namen erstellt werden.
Ich habe mich noch kaum mit SQL beschäftigt und hoffe das mir mit wenig Umstand geholfen werden kann.

weitere Fragen kommen bestimmt noch dazu.

Gruss Dave

Nach oben