Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Tabellenerstellungsabfrage in VBA-Abfrage ändern

Begonnen von cyberchris, März 07, 2012, 17:12:24

⏪ vorheriges - nächstes ⏩

cyberchris

ich würde das Wohnzimmer komplett aus- und wieder einraumen. Dann würde ich bestimmt auch wieder ein paar Sachen finden...

Wahrscheinlich UPDATE...:-)
Nur passt dann der Code nicht mehr....ist das vielleicht kompliziert. Für mich zumindest, da ich mich damit eigentlich nicht auskenne.
Einfach SELECT in UPDATE zu ändern geht leider nicht.

Gruß Christoph

cyberchris

Muss ich dann das so machen: (Musste ich mir wieder zusammenstückeln, da die unterschiedlichen Abfragetypen ja nicht 1:1 verwendbar sind. Wird aber sicherlich wieder irgendwo ein Fehler sein...:-(

UPDATE PMDB SET PMDB.IdentNr = '*', PMDB.Firma = '*', PMDB.IDoWAG = '*', PMDB.Klassifizierung = '*', PMDB.Bezeichnung = '*',  & _
PMDB.Kalibrierdienst = '*', PMDB.Kalibrierdatum = '*' INTO PMM_Indexierung IN '" & strPfad & "' FROM PMDB " & _
WHERE (((PMDB.Standort)<>'Klärung'));

Ist die Zieltabelle dann immer identisch mit der Ausgangstabelle? D. h., wenn Einträge in der Ausgangstabelle nicht mehr vorkommen werden diese dann auch in der Zieltabelle gelöscht?
In meinem Fall müssen beide Inhalte immer komplett identisch sein!

Danke
Gruß Christoph

DF6GL

Hallo,


nochmal die Frage: Wozu das Ganze?

Das eigentliche Problem ist nicht die Syntax der Abfrage(arten) , eher das Verfahren, irgendwas archivieren/kopieren zu wollen.

cyberchris

Hallo,

ich muss die genannten Daten (Kopie) in eine separate mdb ablegen, damit ein anderes Programm darauf zugreifen kann. Man möchte nicht direkt auf die Livedaten zugreifen (aus Sicherheitsgründen).

Diese Daten muss ich in regelmäßigen Zeitabständen updaten.

gruß Christoph

DF6GL

Hallo,



eigentlich sind das immer noch zu wenig Infos...




Wie auch immer, es geht halt nur, wie schon mehrfach angesprochen , über:


zum Einen: Vor jeder Übertragung erst die  Tabelle löschen , dann neu erstellen und Daten einfügen.

zum Anderen: Bei allererster Übertragung (bzw. einmalig von Hand bei der DB-Erstellung) die Tabelle generieren. Dann bei jeder Übertragung zunächst die Tabelle leeren und anschliessend akt. Daten einfügen. Hier kann man sich auch vorstellen, vorhandenen Daten nicht zu löschen und nur akt. Daten neu hinzufügen, je nachdem, was genau gemacht werden soll/muss.


Welche Methodik man für die einzelnen Vorgänge anwendet, ist erst sekundärer von Belang:

SQL (als gespeicherte Abfrage oder SQL-String generiert und ausgeführt per VBA) mittels "IN"-Parameter

Transferdatabase-Methode

Opendatabase/Opencurrentdatabase und Recordsets

Verknüpfung der ext. Tabelle und deren Manipulation.

.
.

ebs17

#20
Zum Dritten: Wenn Aktualisieren heißt, eine Tabelle der anderen anzugleichen statt zu ersetzen, braucht man einen Schlüssel, um erkennen zu können, ob ein Datensatz vorhanden oder neu ist sowie welcher Datensatz durch welchen Datensatz zu aktualisieren ist. Mit "*" kommt man da nicht weiter.

Prinzipdarstellung (Annahme: Zwei Felder, die gemeinsam den Schlüssel ergeben, zzgl zwei weitere Felder):
' Löschen nicht mehr vorhandener Datensätze
DELETE Zieltabelle Z
WHERE NOT EXISTS
(SELECT Null FROM Quelltabelle Q
WHERE Z.Key1 = Q.Key1 AND Z.Key2 = Q.Key2)

' Aktualisieren vorhandener Datensätze
UPDATE Zieltabelle Z INNER JOIN Quelltabelle Q
ON Z.Key1 = Q.Key1 AND Z.Key2 = Q.Key2
SET Z.Field1 = Q.Field1,  Z.Field2 = Q.Field2

' Anfügen (nur) neuer Datensätze
INSERT INTO Zieltabelle (Key1, Key2, Field1, Field2)
SELECT Q.Key1, Q.Key2, Q.Field1, Q.Field2
FROM Quelltabelle Q
WHERE NOT EXISTS
(SELECT Null FROM Zieltabelle Z
WHERE Z.Key1 = Q.Key1 AND Z.Key2 = Q.Key2)


Das ist zwar etwas mehr Text (Programmiereraufwand) als ein Löschen und Kopieren einer Tabelle, hat dafür einige andere Merkmale, auf die man Wert legen könnte:
- Beziehungen, Indizes und Schlüssel werden nicht verletzt. Z.B. könnten die Datensätze der Zieltabelle mit weiteren Daten verknüpft sein. Ein vollständiges Löschen wäre da eine erhebliche Störung.
- Es werden nur die Datensätze bewegt, die wirklich benötigt werden. Das bedeutet weniger Netzwerktraffic und höheren Zeitvorteil. Warum sollte ich z.B. 1 Mio Datensätze löschen und neu übertragen, wenn z.B. nur 21 Datensätze zu aktualisieren wären?
- Die Zieldatenbank wird  bei weitem nicht so erheblich aufgebläht durch Löschen und Neuschreiben.

Zur Ansprache einer externen Datenbank ergänzt Du entsprechend das "IN 'Pfad_DB'". Alternativ könntest Du auch die Zieltabelle temporär in die eigene Anwendung verknüpfen:
DoCmd.TransferDatabase acLink, , "X:\irgendwo\eine.MDB", acTable, _
   "Quelltabelle", "Temp"
CurrentDb.Execute "DELETE ..."      ' Abfragen ausführen
DoCmd.DeleteObject acTable, "Temp"


MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard