Discussion:
Delete from und Insert into
(zu alt für eine Antwort)
Dieter Schirmer
2008-11-04 15:35:47 UTC
Permalink
Hallo NG,

ich möchte in einer vorhandenen Access DB die Adresstabelle durch eine
"EXTERNE" Access-Tabelle "Adress-Datenbank" ersetzen. Leider sind die
Feldnamen unterschiedlich. Die Tabelle ist als verknüpfte Tabelle in der
Datenbank vorhanden.

1. Ansatz die Feldnamen durch eine Abrage an die vorhandenen Namen
anzupassen scheitert daran, da die interen Tabelle mit 1:n-Verknüpfungen
arbeitet und ich diese nicht über die Abfrage erhalte. Somit arbeitet die DB
nicht richtig. Ansehen der Daten ok, aber neue Daten eingeben geht nicht.

2. Ansatz einfach den Inhalt der vorhandene Tabelle (Delete from) löschen
und per "SQL Insert into" wieder füllen scheitert daran, dass die
verknüpften Tabellen auch gelöscht werden.

Hat jemand eine praktikable Idee, wie ich dieses Problem auf einfache Weise
lösen kann?

Vielen Dank für Eure Hilfe

Gruß
Dieter
Mark Doerbandt
2008-11-04 15:49:27 UTC
Permalink
Hallo, Dieter,
Post by Dieter Schirmer
ich möchte in einer vorhandenen Access DB die Adresstabelle durch eine
"EXTERNE" Access-Tabelle "Adress-Datenbank" ersetzen. Leider sind die
Feldnamen unterschiedlich. Die Tabelle ist als verknüpfte Tabelle in der
Datenbank vorhanden.
1. Ansatz die Feldnamen durch eine Abrage an die vorhandenen Namen
anzupassen scheitert daran, da die interen Tabelle mit 1:n-Verknüpfungen
arbeitet und ich diese nicht über die Abfrage erhalte. Somit arbeitet die DB
nicht richtig. Ansehen der Daten ok, aber neue Daten eingeben geht nicht.
2. Ansatz einfach den Inhalt der vorhandene Tabelle (Delete from) löschen
und per "SQL Insert into" wieder füllen scheitert daran, dass die
verknüpften Tabellen auch gelöscht werden.
Beziehungen zwischen zwei Backends gehen nicht mit Access. Du musst
wohl auf sie verzichten und ggf. programmatisch nachbauen.

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Dieter Schirmer
2008-11-04 16:05:39 UTC
Permalink
Hallo Mark,

danke für Deine Antwort.
Post by Mark Doerbandt
Beziehungen zwischen zwei Backends gehen nicht mit Access. Du musst
wohl auf sie verzichten und ggf. programmatisch nachbauen.
Genau das wollte ich ja auch mit dem Punkt 2, aber das scheitert ja daran,
dass die in Beziehung stehenden Tabellen auch gelöscht werden.
Gibt es da nicht noch eine Lösung/Workaround (Daten kopieren) die mir
weiterhilft?

Das ganze programmatisch nachbauen wird sehr aufwendig, da sehr viele
Abfragen und Berichte in der DB existieren. Nur wenn es wirklich keine
andere Lösung gibt, muss ich da mal rechnen.

Gruß

Dieter
Mark Doerbandt
2008-11-04 16:08:20 UTC
Permalink
Hallo, Dieter,
Post by Dieter Schirmer
Genau das wollte ich ja auch mit dem Punkt 2, aber das scheitert ja daran,
dass die in Beziehung stehenden Tabellen auch gelöscht werden.
Du meinst die Daten darin und nicht die Tabellen als ganzes, oder?
Post by Dieter Schirmer
Gibt es da nicht noch eine Lösung/Workaround (Daten kopieren) die mir
weiterhilft?
Ja, Du kannst die Beziehungen temporär löschen, die Daten per SQL
einfuegen und die Beziehungen wieder erstellen. Beziehungen kann man
per VBA löschen und erstellen, ist aber manchmal tricky.

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Dieter Schirmer
2008-11-04 16:16:38 UTC
Permalink
Hallo Mark,
Post by Mark Doerbandt
Du meinst die Daten darin und nicht die Tabellen als ganzes, oder?
Ja, genau, nur die Daten. Das funktioniert auch per SQL. Allerdings wie
beschrieben auch die Daten der anderen (2) Tabellen.
Post by Mark Doerbandt
Ja, Du kannst die Beziehungen temporär löschen, die Daten per SQL
einfuegen und die Beziehungen wieder erstellen. Beziehungen kann man
per VBA löschen und erstellen, ist aber manchmal tricky.
Ja, wenn es dafür eine Lösung gibt, nur her damit :-).
Ich habe da schon ein wenig gegoogelt, aber nix passendes gefunden. Hast Du
nen Link zu dieser VBA-Lösung?
Wäre toll, also das geht dann per VBA und nicht per SQL-Statement?

Danke für die schnelle Hilfe.


Gruß

Dieter
Mark Doerbandt
2008-11-04 16:21:50 UTC
Permalink
Hallo, Dieter,
Post by Dieter Schirmer
Ja, wenn es dafür eine Lösung gibt, nur her damit :-).
Ich habe da schon ein wenig gegoogelt, aber nix passendes gefunden. Hast Du
nen Link zu dieser VBA-Lösung?
Wäre toll, also das geht dann per VBA und nicht per SQL-Statement?
ja, schau Dir mal in der Online-Hilfe zu DAO das Objekt Relations an,
dort insbesondere .Delete. Und dann natürlich die Methode
.CreateRelation des Database-Objektes. Schau Dir zuerst mal an, welche
Beziehungen tatsächlich bestehen, indem Du die Relations-Auflistung
iterierst und mache Backups! ;-)

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Thomas Möller
2008-11-04 16:22:39 UTC
Permalink
Hallo Dieter,
Post by Dieter Schirmer
Post by Mark Doerbandt
Ja, Du kannst die Beziehungen temporär löschen, die Daten per SQL
einfuegen und die Beziehungen wieder erstellen. Beziehungen kann man
per VBA löschen und erstellen, ist aber manchmal tricky.
Ja, wenn es dafür eine Lösung gibt, nur her damit :-).
Ich habe da schon ein wenig gegoogelt, aber nix passendes gefunden. Hast Du
nen Link zu dieser VBA-Lösung?
Wäre toll, also das geht dann per VBA und nicht per SQL-Statement?
schau mal auf meiner HP nach einer Beispieldatenbank mit dem Namen
"TM-DatenbankObjekte". Darin findest Du Codebeispiele zum Anlegen und
Löschen von Beziehungen.


HTH
--
Thomas

Homepage: www.Team-Moeller.de
Dieter Schirmer
2008-11-04 16:47:38 UTC
Permalink
Hallo Mark, hallo Thomas,

vielen Dank für Eure schnelle Hilfe.
Werde das direkt testen und versuchen umzusetzen.

@Thomas:
Habe gelesen, die Funktion "Beziehung löschen" und "Beziehung anlegen" geht
nicht bei eingebundenen Tabellen. Aber ich hoffe, ich kann das in der
Backend-DB an den Tabellen ausführen oder muß ich die Tabellen auch vorher
aus der FrontEnd-DB rausschmeißen?

Danke nochmals

Gruß

Dieter
Mark Doerbandt
2008-11-04 17:20:38 UTC
Permalink
Hallo, Dieter,
Post by Dieter Schirmer
Habe gelesen, die Funktion "Beziehung löschen" und "Beziehung anlegen" geht
nicht bei eingebundenen Tabellen. Aber ich hoffe, ich kann das in der
Backend-DB an den Tabellen ausführen oder muß ich die Tabellen auch vorher
aus der FrontEnd-DB rausschmeißen?
Du kannst per DAO natuerlich auch das BE bearbeiten.

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Dieter Schirmer
2008-11-04 17:25:52 UTC
Permalink
Hallo Mark,
Post by Mark Doerbandt
Du kannst per DAO natuerlich auch das BE bearbeiten.
das ist soweit auch OK, aber ich war mir nicht sicher, ob die Tabellen im BE
zum FE verknüpft sein dürfen oder ob ich die Verknüpfung vorher lösen muss.
Aber ich habe es soweit getestet. Es funktioniert auch im BE mit den
verknüpften Tabellen.

Danke euch beiden für die super Hilfe.
Muß das jetzt alles zusammen bauen und denke es läuft dann.

Gruß

Dieter
und nen schönen Abend :-)
Mark Doerbandt
2008-11-04 17:29:23 UTC
Permalink
Hallo, Dieter,
Post by Dieter Schirmer
Muß das jetzt alles zusammen bauen und denke es läuft dann.
wenn Du es fertig hast, poste doch ruhig hier einen Codeschnipsel,
falls mal wieder jemand danach sucht.

Gruss & schönen & erfolgreichen Abend - Mark
Jens Schilling
2008-11-04 20:03:17 UTC
Permalink
Hi, Mark
Post by Mark Doerbandt
Post by Dieter Schirmer
Muß das jetzt alles zusammen bauen und denke es läuft dann.
wenn Du es fertig hast, poste doch ruhig hier einen Codeschnipsel,
falls mal wieder jemand danach sucht.
Da gibt es schon was von Thomas Kessler :

Anzeigen, Erstellen und Löschen von Tabellenrelationen in externen DB's

http://www.tksoft-online.de/MS-Access-DB-und-Objekt-Eigenschaften/View-category.html

Tschüs
Jens
Mark Doerbandt
2008-11-05 08:46:51 UTC
Permalink
Hallo, Jens,
Post by Jens Schilling
Da gibt es schon
ein guter Journalist hat immer mindestens zwei Quellen! ;-)

Trotzdem danke für den Link, Mr. Cybrarian! ;-)

Gruss - Mark

Dieter Schirmer
2008-11-04 22:26:28 UTC
Permalink
Hallo Mark,

das funktioniert jetzt ganz prima.
Großen Dank an euch beide.
Damit habe ich mein Problem gelöst und die vorhandene Accessdatenbank wird
jetzt bei jedem Start mit den aktuellen Adressen aus einer "externen"
Adressendatenbank gespeist.
Hier jetzt der gewünschte Codeschnipsel:

Die Funktionen BeziehungLoeschen und BeziehungAnlegen sind aus den
Codebeispielen von Thomas Möller entnommen.

Start Code -----------------------------------------------------
If BeziehungLoeschen("Tabelle1Tabelle2", PfadDatenbank) Then
'MsgBox "Beziehung erfolgreich gelöscht", vbInformation
Else
MsgBox "Operation fehlgeschlagen", vbCritical
End If

Call DelData

Call CopyData

If BeziehungAnlegen("Tabelle1", "Tabelle2", "Tab1", "Tab2", , PfadDatenbank)
Then
'MsgBox "Beziehung angelegt", vbInformation
Else
MsgBox "Operation fehlgeschlagen", vbCritical
End If


Public Sub DelData()
Dim oDB As DAO.Database

'Tabelle1 komplett leeren
sSQL = "DELETE * FROM Tabelle1"

Set oDB = CurrentDb
oDB.Execute sSQL
oDB.Close
Set oDB = Nothing

End Sub

Public Sub CopyData()
Dim oDB As DAO.Database

'Tabelle1 kopieren
sSQL = "INSERT INTO Tabelle1 ( K_Nummer, K_Bezeichnung, K_Bezeichnung2,
K_Bezeichnung3, K_Bezeichnung4, K_Straße, PLZ, Ort,
K_Telefon, K_Fax, K_Email ) " & _
"SELECT K_Nummer, K_Bezeichnung, K_Bezeichnung2, K_Bezeichnung3,
K_Bezeichnung4, K_Straße, PLZ, Ort, K_Telefon, K_Fax, K_Email
FROM abfTabelle1 "

Set oDB = CurrentDb
oDB.Execute sSQL
oDB.Close
Set oDB = Nothing

End Sub
Ende Code ------------------------------------------------------

Viele Grüße

Dieter
Lesen Sie weiter auf narkive:
Loading...