PDA

Vollständige Version anzeigen : Tabelleninhalte in zwei andere Tabellen übertragen


dreamweaver
04.08.2005, 10:11
Hallo!

Ich habe ein (wahrscheinlich etwas größeres) Problem. Ich habe eine
Quelltabelle (tbl_Quelle). Die Inhalte der Tabelle werden von einer anderen Anwendung benötigt. Allerdings in einem anderen Format. Deshalb muss ich die Inhalte der tbl_Quelle in zwei andere Tabellen aufspalten (tbl_Ziel_Data und tbl_Ziel_Werte). Ich denke das ist über eine pure Abfrage nicht mehr lösbar. Ich hab mich zumindest schon vergeblich daran versucht. Um die Sache zu verdeutlichen habe ich eine Beispiel DB angehängt. Dort ist die Quelltabelle tbl_Quelle drin. Außerdem sind die beiden Zieltabellen dabei. Dort habe ich beispielhaft Daten eingetragen. Ich hoffe ich konnte das Problem gut erklären.

Das Übertragen der Inhalten in zwei Tabellen ist keine einmalige Sache. Deshalb muss ich da eine Lösung finden die leicht und immer wieder anwendbar ist.

MisterBurns
04.08.2005, 10:45
warum machst du nicht 2 anfügeabfragen und lässt sie hintereinander ausführen?

grüße

dreamweaver
04.08.2005, 11:00
Ok, ich habe nun versucht die Tabelle tbl_Ziel_Data zu füllen.
Dafür habe ich folgende Abfrage gebastelt:

INSERT INTO tbl_Ziel_Data ( Name, Base )
SELECT Name, Base
FROM tbl_Quelle;

Leider fügt er die Datensätze nicht ein. Er sagt dass er 7 Datensätze
wegen Schlüsselverletzungen nicht einfügen kann???

MisterBurns
04.08.2005, 11:04
dann hast du entweder einen primärschlüssel gesetzt und werte mehrfach oder zb in ein zahlfeld text eingegeben!
die feldeigenschaften von quelltabelle und zieltabelle müssen ident sein!

Morli
04.08.2005, 12:17
Die Fehlermeldung erhälst Du weil dein Feld "ID_Data" als Zahl von Type Long definiert ist. Du mußt hier schon Autowert nehmen.

Morli

Morli
04.08.2005, 12:31
Und bei der Tabelle mit den Werten wirst Du wohl nicht um VBA rumkommen.
Hier mal ein Beispiel.

Function tbl_Ziel_Werte_Füllen()
Dim rstQ As Recordset
Dim rstZ As Recordset
Dim i As Byte
Set rstQ = CurrentDb.OpenRecordset("tbl_Quelle")
Set rstZ = CurrentDb.OpenRecordset("tbl_Ziel_Werte")

If Not rstQ.EOF Then
Do Until rstQ.EOF
If Not IsNull(rstQ!Base) Then
rstZ.AddNew
rstZ!ID_werte = rstQ!Key
rstZ!Merkmal = rstQ!Base
rstZ!wert = rstQ!Size
rstZ.Update
End If
For i = 1 To 5
If Not IsNull(rstQ("P" & i)) Then
rstZ.AddNew
rstZ!ID_werte = rstQ!Key
rstZ!Merkmal = rstQ("P" & i)
rstZ!wert = rstQ("M" & i)
rstZ.Update
End If
Next
rstQ.MoveNext
Loop
End If

rstQ.Close
rstZ.Close

Set rstQ = Nothing
Set rstZ = Nothing

End Function

Morli

dreamweaver
04.08.2005, 18:23
@ Morli

Vielen Dank für deinen VBA Code. Ich werde leider erst nächste
Woche dazu kommen den Code in die DB einzubauen. Ich bin aber
schon sehr gespannt. Gebe dann auch Feedback ob es geklappt hat.

@alle anderen

Auch euch schonmal vielen Dank für die Hilfe...

dreamweaver
08.08.2005, 06:34
@Morli

So, habe jetzt mal den VBA Code eingebaut. Leider meldet er mir beim
Ausführen einen Laufzeitfehler 13: Typenunverträglichkeit. Er meckert
bei der Recordseterstellung. Habs dann so versucht:

Function tbl_Ziel_Werte_Füllen()
Dim rstQ As Recordset
Dim rstZ As Recordset
Dim i As Byte
Dim DB As DAO.Database
Set DB = Application.CurrentDb
Set rstQ = DB.OpenRecordset("tbl_Quelle")
Set rstZ = DB.OpenRecordset("tbl_Ziel_Werte")

If Not rstQ.EOF Then
....

Hat ihn aber auch nicht beeindruckt. Was mach ich da falsch?

dreamweaver
08.08.2005, 07:23
Ah, Fehler schon behoben. Musste ja die DAO Libary aktivieren. Jetzt klappts.

Function tbl_Ziel_Werte_Füllen()
Dim rstQ As DAO.Recordset
Dim rstZ As DAO.Recordset
Dim i As Byte
Dim DB As DAO.Database
Set DB = Application.CurrentDb
Set rstQ = DB.OpenRecordset("tbl_Quelle", dbOpenTable)
Set rstZ = DB.OpenRecordset("tbl_Ziel_Werte", dbOpenTable)

If Not rstQ.EOF Then
Do Until rstQ.EOF
If Not IsNull(rstQ!Base) Then
rstZ.AddNew
rstZ!ID_werte = rstQ!Key
rstZ!Merkmal = rstQ!Base
rstZ!wert = rstQ!Size
rstZ.Update
End If
For i = 1 To 5
If Not IsNull(rstQ("P" & i)) Then
rstZ.AddNew
rstZ!ID_werte = rstQ!Key
rstZ!Merkmal = rstQ("P" & i)
rstZ!wert = rstQ("M" & i)
rstZ.Update
End If
Next
rstQ.MoveNext
Loop
End If

rstQ.Close
rstZ.Close

Set rstQ = Nothing
Set rstZ = Nothing

End Function

Danke...

dreamweaver
08.08.2005, 10:51
Hallo,

ich habe nun noch eine Frage zu meiner Anwendung.

Ich habe nun noch eine vierte Tabelle in der Anwendung. Diese heißt
tbl_all. In der Tabelle sind alle möglichen Prod1 ... Prodn vorhanden.
Es gibt aber nicht zu jedem Produkt Zusatzinformationen. Nur die Prod
die in tbl_Quelle stehen haben Zusatzinformationen. Nun möchte ich aber
dass in der tbl_Ziel_Data auch die Prod ohne Zusatzinfos auftauchen. Da
wäre dann das Feld Base leer. Wie kann ich das realisieren? Ich würde das
gerne automatisch per Knopfdruck (siehe frm_Splitter) erledigen.

Zur besseren Veranschaulichung die DB als ZIP.