von RobertG » Sa, 21.03.2015 09:23
Hallo Daniel,
das Makro müsste genau so auch mit MySQL laufen, da es sich allein auf die Funktionalitäten beschränkt, die die Oberfläche von Base bereitstellt. Was ich noch mit einbauen würde ist die Aktualisierung des Formularteils, aus dem die Daten herauskopiert werden, damit keine doppelten Kopien in der Zieltabelle liegen.
Code: Alles auswählen
oFormZiel = thisComponent.Drawpage.Forms.getByName("Zielformular")
Diesen Formularnamen siehst Du, wenn Du das Formular zum Bearbeiten öffnest und den Formularnavigator aufsuchst. Der Name hat nichts mit einer eventuell vorhandenen Datenquelle zu tun. Die wird in den Formulareigenschaften aufbewahrt. Natürlich kannst Du auch im Formular einen anderen Namen wählen. Dann muss aber die Bezeichnung in dem Makro geändert werden. Mit ein bisschen Gefummele lässt sich das auch ohne die Namen im Makro erstellen.
Aus dem Formular, das die zu kopierenden Daten enthält, werden die Daten des aktuellen Datensatzes ausgelesen. Dabei wird Spalte für Spalte ausgelesen. oFormStart.getString(1) ist der Inhalt der ersten Spalte der dem Formular zugrundeliegenden Datenquelle. Ich lese den Inhalt als Text (getString) aus, weil ich ihn nur in ein anderes Feld übertragen möchte (nicht damit rechnen o.ä.).
Das Formular, in das die Daten eingefügt werden sollen, ist als oFormZiel benannt. Der Inhalt des ersten Feldes des Ausgangsformulars wird auf das zweite Feld des Zielformulars übertragen. Das ist deshalb bei dem Beispiel notwendig, weil das erste Feld der Zieltabelle das Feld "ID" ist, das in der Ausgangstabelle nicht vorhanden ist. Übertragen wird mit updateString() - da ich wieder nur die Zeichen drin haben will.
Das kannst Du natürlich auf beliebig viele Felder ausdehnen. Bei dem Verfahren darfst Du nur nicht nachträglich die Reihenfolge von Feldern in einer Datenquelle ändern (Formualr selbst spielt keine Rolle). Wenn Du sicher gehen willst, dass die Felder auch stimmen, musst Du erst über den Namen die Nummer des Feldes ermitteln und dann den Inhalt auslesen bzw. einfügen.
Gruß
Robert
Hallo Daniel,
das Makro müsste genau so auch mit MySQL laufen, da es sich allein auf die Funktionalitäten beschränkt, die die Oberfläche von Base bereitstellt. Was ich noch mit einbauen würde ist die Aktualisierung des Formularteils, aus dem die Daten herauskopiert werden, damit keine doppelten Kopien in der Zieltabelle liegen.
[code]oFormZiel = thisComponent.Drawpage.Forms.getByName("Zielformular")[/code]
Diesen Formularnamen siehst Du, wenn Du das Formular zum Bearbeiten öffnest und den Formularnavigator aufsuchst. Der Name hat nichts mit einer eventuell vorhandenen Datenquelle zu tun. Die wird in den Formulareigenschaften aufbewahrt. Natürlich kannst Du auch im Formular einen anderen Namen wählen. Dann muss aber die Bezeichnung in dem Makro geändert werden. Mit ein bisschen Gefummele lässt sich das auch ohne die Namen im Makro erstellen.
[code]oFormZiel.updateString(2, oFormStart.getString(1))[/code]
Aus dem Formular, das die zu kopierenden Daten enthält, werden die Daten des aktuellen Datensatzes ausgelesen. Dabei wird Spalte für Spalte ausgelesen. oFormStart.getString(1) ist der Inhalt der ersten Spalte der dem Formular zugrundeliegenden Datenquelle. Ich lese den Inhalt als Text (getString) aus, weil ich ihn nur in ein anderes Feld übertragen möchte (nicht damit rechnen o.ä.).
Das Formular, in das die Daten eingefügt werden sollen, ist als oFormZiel benannt. Der Inhalt des ersten Feldes des Ausgangsformulars wird auf das zweite Feld des Zielformulars übertragen. Das ist deshalb bei dem Beispiel notwendig, weil das erste Feld der Zieltabelle das Feld "ID" ist, das in der Ausgangstabelle nicht vorhanden ist. Übertragen wird mit updateString() - da ich wieder nur die Zeichen drin haben will.
Das kannst Du natürlich auf beliebig viele Felder ausdehnen. Bei dem Verfahren darfst Du nur nicht nachträglich die Reihenfolge von Feldern in einer Datenquelle ändern (Formualr selbst spielt keine Rolle). Wenn Du sicher gehen willst, dass die Felder auch stimmen, musst Du erst über den Namen die Nummer des Feldes ermitteln und dann den Inhalt auslesen bzw. einfügen.
Gruß
Robert