Base Datensätze zwischen Tabellen kopieren

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

Moderator: Moderatoren

Wiesie
Beiträge: 3
Registriert: Mi, 04.01.2017 14:54

Base Datensätze zwischen Tabellen kopieren

Beitrag von Wiesie » Mi, 04.01.2017 15:13

Hallo Forum,

erst einmal vorweg: ich bin kein toller Programmierer aber für den Hausgebrauch hat es bis jetzt eigentlich immer gereicht.

Folgendes Problem:

Ich möchte in Base aus einer Tabelle Datensätze auslesen und diese mit den Datensätzen in einer anderen Tabelle vergleichen.
Wenn sie dort schon angelegt sind passiert zunächst erst einmal nichts ( später soll noch ein vergleich folgen). Existieren sie
nicht sollen sie angelegt und kopiert werden. Im Grunde funktioniert mein Makro, es ist aber sehr langsam und es dauert eine ganze
Weile bis die Tabelle mit den neuen Datensätzen im Formular angezeigt wird. Manchmal ( nicht immer ) hängt sich der Makro auch auf.
Frau Google kann mir nicht richtig helfen. Hat jemand einen Tip in welche Richtung ich weiter recherchieren könnte ?




Dies ist der Code:

Dabei ist Quelle meine Originaltabelle und Ziel die zu erweiternde.

For i = 1 To Z_Quelle
Duplikat = False

Ziel.Last
Z_Ziel = Ziel.getRow
Ziel.first

For j = 1 To Z_Ziel
If Quelle.getString(29) = Ziel.getString(1) Then Duplikat = True
Ziel.Next
Next j

If Duplikat = False Then
Kommission = Quelle.getString(29)
Kunde = Quelle.getString(30)
Maschine = Quelle.getString(31)
M_Konst_Soll = Datum_in_UNO_Date(Quelle.getString(11))
'M_Konst_neu = Datum_in_UNO_Date(Quelle.getString())
M_Konst_ist = Datum_in_UNO_Date(Quelle.getString(24))
E_Konst_Soll = Datum_in_UNO_Date(Quelle.getString(17))
E_Konst_neu = Datum_in_UNO_Date(Quelle.getString(16))
E_Konst_ist = Datum_in_UNO_Date(Quelle.getString(27))
Schaltschrank_Soll = Datum_in_UNO_Date(Quelle.getString(46))
'Schaltschrank_neu = Datum_in_UNO_Date(Quelle.getString(2))
Schaltschrank_ist = Datum_in_UNO_Date(Quelle.getString(54))
Montageort = Quelle.getString(37)



'*** Datensatz neu anlegen, Daten übernehmen und eintragen

Ziel.moveToInsertRow()
Ziel.updateString(1,Kommission)
Ziel.updateString(2,Kunde)
Ziel.updateString(3,Maschine)
Ziel.updateDate(4,M_Konst_Soll)
'Ziel.updateDate(5,M_Konst_neu)
Ziel.updateDate(6,M_Konst_ist)
Ziel.updateDate(7,E_Konst_Soll)
Ziel.updateDate(8,E_Konst_neu)
Ziel.updateDate(9,E_Konst_ist)
Ziel.updateDate(10,Schaltschrank_Soll)
'Ziel.updatDate(11,Schaltschrank_neu)
Ziel.updateDate(12,Schaltschrank_ist)
Ziel.updateString(13,Montageort)
Ziel.insertRow()
EndIf

Quelle.Next
Ziel.First
Next i

Vielen dank schon einmal vorab,

Wiesie

Wiesie
Beiträge: 3
Registriert: Mi, 04.01.2017 14:54

Re: Base Datensätze zwischen Tabellen kopieren

Beitrag von Wiesie » Mi, 04.01.2017 15:18

Noch zur Ergänzung:

Z_Quelle und Z_Ziel wurden vorher mit . getRow belegt

Wiesie

F3K Total
********
Beiträge: 3140
Registriert: Mo, 28.02.2011 17:49

Re: Base Datensätze zwischen Tabellen kopieren

Beitrag von F3K Total » Mi, 04.01.2017 16:00

Hallo,
warum machst Du so einen Aufriss?
Du kannst leicht mit einer Abfrage die "Differenz" der beiden Tabellen ermitteln und dann per Kopieren/Einfügen in die Haupttabelle speichern.
Beispiel anbei.
Die Abfrage Abfrage_neue_Daten_in_Zusatztabelle

Code: Alles auswählen

SELECT * 
FROM 
    "Zusatztabelle" 
WHERE 
    "ID" || "Name" || "Adresse" || "PLZ" || "Ort" 
NOT IN ( SELECT 
    "ID" || "Name" || "Adresse" || "PLZ" || "Ort" 
FROM 
    "Haupttabelle" )
zeigt alle Datensätze der Zusatztabelle die nicht in der Haupttabelle vorkommen.
Vorgehen:
  • Klicke im Hauptfenster auf Abfragen
  • Markiere die Abfrage Abfrage_neue_Daten_in_Zusatztabelle
  • Rechtsklick, Kopieren
  • Klicke im Hauptfenster auf Tabellen
  • Markiere die Tabelle Haupttabelle
  • Rechtsklick, Einfügen
  • Der Assistent öffnet sich, wähle Daten anhängen, wenn nötig
  • Drücke "Fertigstellen"
Das Ergebnis ist, dass die Abfrage Abfrage_neue_Daten_in_Zusatztabelle nun keinen Datensatz mehr anzeigt, weil alle Daten, die noch nicht in der Haupttabelle waren, zugefügt worden sind, in diesem Fall genau 32 Stück.

Gruß R
EDIT: hatte den Anhang wohl vergessen ...
Dateianhänge
Differenz.odb
(83.98 KiB) 26-mal heruntergeladen

Wiesie
Beiträge: 3
Registriert: Mi, 04.01.2017 14:54

Re: Base Datensätze zwischen Tabellen kopieren

Beitrag von Wiesie » Do, 05.01.2017 11:15

Hallo R ( F3K Total )

danke für den Tip. Ich werde es wohl erst heute Abend ausprobieren können.
Ist eigentlich das was ich nicht wollte, beschäftigen mit SQL. Ich scheine aber wohl nicht Drumherum zu kommen.

Zu Deiner Frage nach dem Aufriss muss ich wohl noch ein paar Info's mehr liefern. Ich übernehme via Calc eine recht umfangreiche Tabelle mit Termindaten aus Access. Davon ist nur eine Teilmenge für mich interessant. Die Termine sind das Wesentliche, ich muss damit im Anschluss rechnen und vergleichen. Ich bekomme die Daten nicht im Datumsformat importiert und muss sie erst noch wandeln ( M_Konst_Soll = Datum_in_UNO_Date(Quelle.getString(11)) ). Deshalb bearbeite ich jeden Datensatz einzeln.

Noch eine Frage zu Deinem Vorschlag. Nach welchem SQL Kommando müsste ich googeln wenn ich gleichzeitig feststellen will ob ein bestimmter Datensatz schon vorhanden ist, z.b. "Ort" sich aber geändert hat. Wie das bei Terminplanungen so ist, das ganze lebt.

Ulli

F3K Total
********
Beiträge: 3140
Registriert: Mo, 28.02.2011 17:49

Re: Base Datensätze zwischen Tabellen kopieren

Beitrag von F3K Total » Do, 05.01.2017 12:23

Moin,
Wiesie hat geschrieben:Ich bekomme die Daten nicht im Datumsformat importiert
Wandel sie in Calc, dann kannst Du sie nach BASE schieben.
Wiesie hat geschrieben:Noch eine Frage zu Deinem Vorschlag. Nach welchem SQL Kommando müsste ich googeln wenn ich gleichzeitig feststellen will ob ein bestimmter Datensatz schon vorhanden ist, z.b. "Ort" sich aber geändert hat.
Googeln wird nicht helfen, ist zu speziell. SQL verstehen hilft. Oder eine Beispieldatei, ggf. verfremdet.
Gruß R

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste