Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Abfrage- Primärschlüssel- HILFE !!





Frage

Hallo, ich habe eine Tabelle aus Excel, die ich in Access importieren möchte. Die Tabelle besteht aus knapp 5000 Datensätzen. Nun zu meinem Problem: Die Tabelle hat mehrere Spalten, die wichtigsten: ArtNr, Artikel und EK. Die ArtNr kommt in der Tabelle mehrfach vor, sie soll in Access den Primärschlüssel bekommen. Wie kann ich beim Import oder in einer Abfrage die doppelten Einträge löschen?? Es sollte auch der Ek berücksichtigt werden! Also die ArtNr mit dem höheren EK sollen entfernt werden. Wer kann mir da weiterhelfen??

Antwort 1 von FrankieH

Versuchs mal mit:
Group By [Dein Schluessel]
in Verbindung mit
min [EK]

Das ist das, was mir gerade so einfällt.
Weiss nicht, obs klappt, weil ich group by idR mit sum(Spalte) einsetze.

Gruss
Frankie

Antwort 2 von Teddy7

Vielleicht reicht es schon, vor dem Import die Exceldatei nach ArtikelNr und aufsteigendem EK zu sortieren.
Wenn man dann in der Access-Tabelle die ArtikelNr als Index ohne Duplikate definiert müßten nur die ersten Datensätze jeder ArtikelNr akzeptiert werden.
Die anderen Datensätze wandern in die Fehler-Tabelle.
Gruß
Teddy

Antwort 3 von Roedelheim

Hallo,

@Frankie
danke für den Tip, aber funktioniert leider nicht.

@Teddy
Access entfernt beim Import den Index wieder. "Vorher doppelte Einträge entfernen. Trotzdem danke!!

Ich habe es auch schon mit einer Löschabfrage probiert. Doch auch das klappt nicht so, wie ich es mir vorstelle.

Kennt jemand noch ein spezielles Access-Forum?

roedelheim

Antwort 4 von 14071

Hi Roedelheim,

Lösungsvorschlag, falls nicht zu viele doppelte vorhanden sind. Dürfte bei 5000 Sätzen aber noch überschaubar sein.

Daten importieren - zunächst ohne primary-key. Über den Assistenten kannst du dir dann die doppelten anzeigen lassen und von Hand löschen (Abfrage und Tabelle nebeneinander öffnen). Anschließend die Art-Nr. als Schlüssel definieren.

hth
Gruß
Jürgen

Antwort 5 von Teddy7

Na ja - es gibt immer noch den Weg, den Import "von Hand" zu machen.
-----------
' Um auf Excel zugreifen zu können wird eine Objekt-Variable benötigt
' Verweis auf Microsoft Excel setzen
Dim objExcel As Excel.Application
' Verweis auf Microsoft DAO setzen
Dim ttab1 As DAO.Recordset
Dim ktab1 As String
' Recordset anlegen
Set ttab1 = CurrentDb.OpenRecordset("Select * from tblArtikel", dbOpenDynaset)
' neue Excel-Instanz anlegen
Set objExcel = New Excel.Application

' um mitverfolgen zu können, was in Excel passiert, kann Excel eingeblendet werden
If optSichtbar = True Then
objExcel.Visible = True
End If

' Öffnen der Excel-Datei
objExcel.Workbooks.Open ("C:\temp\Eingabe.xls")
With objExcel.Range("A1")
' Anzahl Zeilen im Tabellenblatt ermitteln
lastrow1 = .SpecialCells(xlCellTypeLastCell).Row
End With
' 1. Zeile ist die Überschrift
For xlin = 2 To lastrow1
objExcel.Cells(xlin, 1).Select
xfeld = objExcel.Cells(xlin, 1).Value
xnum = 0
On Error Resume Next
xnum = CInt(xfeld)
On Error GoTo fehlerhandler
If xnum > 0 And xnum < 32 Then
' Neuen Datensatz aufbauen
ttab1.AddNew
ttab1!TT = CInt(objExcel.Cells(xlin, 1).Value)
ttab1!MM = CInt(objExcel.Cells(xlin, 2).Value)
ttab1!JJ = CInt(objExcel.Cells(xlin, 3).Value)
' ---
ttab1.Update
End If ' Wenn 1. Spalte numeric und zwischen 1 und 31

Next xlin ' nächste Zeile



verlassen:
On Error Resume Next
' alle von der Anwendung angelegten Objekte sollen auch von ihr wieder
' zerstört werden. Deshalb hier ein Clean-Up
objExcel.Workbooks.Close

Set objExcel = Nothing

ttab1.Close
Set ttab1 = Nothing

Exit Sub

fehlerhandler1:
If Err.Number = 9 Then
GoTo verlassen
End If

fehlerhandler:
MsgBox CStr(Err.Number) & ": " & Err.Description, vbCritical
----------------
Das ist jetzt auf die Schnelle aus einem meiner Programme ausschnittweise kopiert - es werden also bestimmt Fehler darin sein.
Aber als Beispiel wie sowas machbar ist müßte es reichen.
Du mußt natürlich dazwischen noch eine Prüfung einbauen, ob die ArtikelNr bereits vorhanden ist.
Wenn Du dazu noch weitere Hilfe brauchst kannst Du mit Excel-tabelle und Datenbank (A97 oder A2000) mal zumailen.
Ich werde aber wahrscheinlich erst am Wochenende dazu kommen mal reinzuschauen.
Gruß
Teddy

Antwort 6 von Roedelheim

DANKE!!

@Teddy
Danke für die ausführliche Hilfe, aber ich bin nur ein Laie und weiß nicht so recht, wo ich das einfügen sollte.

Ich habe das Problem jetzt mit einer Anfügeabfrage gelöst.

Gruß
roedelheim

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: