Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Access Import Formular
zurück: Probleme mit Bildern im Formular weiter: Filterung eines Listenfelds per Kombinationsfelder Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Offen Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
newyork1311
Einsteiger


Verfasst am:
11. Dez 2012, 11:45
Rufname:

Access Import Formular - Access Import Formular

Nach oben
       Version: Office 2010

Hallo Zusammen,

In meiner Datenbank habe ich mir ein Import Formular erstellt, dass mir eine Excel Liste in Access importiert. Ich habe jetzt folgendes Problem. Ich möchte, dass automatisch die importierten Daten in die richtigen Tabellen eingefügt werden. Das geht auch beim ersten Import. Ich bekomme aber jeden Monat Vier neue Excel Listen in der Datensätze dazukommen bzw.: sich ändern und sobald ich diese Excel Liste einfüge, fügt er die neuen Daten in die Tabellen an ohne zu überprüfen, ob es diese schon gibt. Ich würde mich um eine ausführliche Hilfe bedanken, da ich kein VBA Profi bin.
Tabellen in der Datenbank : Website, Keyword, Telefonbuch.
Code:
Private Sub Befehl1_Click()
    Dim Dateipfad As String
    Dim dlg As FileDialog
    Dim qdf As DAO.QueryDef  '1.Abfrage
    Dim strSql As String     '1.Abfrage
    Dim strSqll As String    '2.Abfrage
    Dim qdff As DAO.QueryDef '2.Abfrage
    Dim strSqlll As String    '3.Abfrage
    Dim qdfff As DAO.QueryDef '3.Abfrage
   
    Set dlg = Application.FileDialog(msoFileDialogOpen)
    'Dialog Titel
    dlg.Title = "Exceldatei Auswählen!"
    'Standartpfad
    dlg.InitialFileName = "C:\Dokumente und Einstellungen\goertz_j\Eigene Dateien"
    'Import Button
    dlg.ButtonName = "Import"
    dlg.Filters.Clear
    dlg.Filters.Add "Excel", "*.xlsx"
    If dlg.Show Then
        'wenn Exceldatei angegeben wurde
        Dateipfad = dlg.SelectedItems(1) 'Pfad in Variable
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml _
                                , "Test", Dateipfad, True, "Tabelle1!"
    End If
    '1.  Füllen der Tabelle Website
    strSql = "Insert into website(url)SELECT Test.url FROM Test LEFT JOIN Website ON Test.ID = WebSite.WebID AND Test.Url = Website.URL WHERE website.url not like test.[url]"
    Set qdf = CurrentDb.CreateQueryDef("DummyWebsite", strSql)
    DoCmd.OpenQuery qdf.Name
    CurrentDb.QueryDefs.Delete qdf.Name
    '2. Füllen der Tabelle Keyword
    strSqll = "Insert Into keyword(kname, webid)SELECT Test.suchbegriff, Test.id FROM Test left JOIN keyword ON (Test.Suchbegriff = keyword.kname) AND (Test.id = keyword.kid) WHERE keyword.kid Is Null"
    Set qdff = CurrentDb.CreateQueryDef("DummyKeyword", strSqll)
    DoCmd.OpenQuery qdff.Name
    CurrentDb.QueryDefs.Delete qdff.Name
    '3. Monat Auswählen
    Select Case Me!Rahmen153
      Case 1 ' Januar Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.Januar = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 2 ' Febuar Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.Febuar = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 3 ' März Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.März = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 4 ' April Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.April = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 5 ' Mai Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.Mai = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 6 ' Juni Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.Juni = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 7 ' Juli Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.Juli = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 8 ' August Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.August = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 9 ' September Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.September = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 10 ' Oktober Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.Oktober = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 11 ' November Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.November = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 12 ' Dezember Abfrage
        strSqll = "UPDATE Website INNER JOIN Test ON Website.webid=Test.ID SET Website.Dezember = Test.[pos]"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
    End Select
    '3. telefonbuch auswahl
    Select Case Me!Rahmen180
      Case 1
        strSqll = "UPDATE website SET Website.tid = 1 WHERE Website.url like 'http://dastelefonbuch%';"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 2
        strSqll = "UPDATE website SET Website.tid = 2 WHERE Website.url like 'http://www.dasoertliche%';"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 3
        strSqll = "UPDATE website SET Website.tid = 3 WHERE Website.url like 'http://adresse.gelbeseiten.de%';"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
      Case 4
        strSqll = "UPDATE website SET Website.tid = 4 WHERE Website.url like 'http://www.stadtbranchenbuch%';"
        Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
        DoCmd.OpenQuery qdff.Name
        CurrentDb.QueryDefs.Delete qdff.Name
    End Select
    '3. Löschen der Import Tabelle!
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DROP TABLE test;"
    DoCmd.SetWarnings True
End Sub
Grüße

Jan
JMalberg
Es wird so langsam sinnig ...


Verfasst am:
11. Dez 2012, 13:23
Rufname:
Wohnort: Saarbrücken


AW: Access Import Formular - AW: Access Import Formular

Nach oben
       Version: Office 2010

Dampf erst mal den Code ein, damit es übersichtlich wird:
  1. Lager den File-Dialog in eine Sub aus, die du dann aufrufst
  2. Code kürzen
    Code:
    ' statt
        Dim strSqll As String    '2.Abfrage
        Dim qdff As DAO.QueryDef '2.Abfrage
        Dim strSqlll As String    '3.Abfrage
        Dim qdfff As DAO.QueryDef '3.Abfrage
    ' ein
        Dim strSQL As String
    Lösche das. ein strSQL reicht; dazu Code anpassen
    Code:
    ' dann  statt
        strSQL = "Insert into website(url)SELECT Test.url FROM Test LEFT JOIN Website ON Test.ID = WebSite.WebID AND Test.Url = Website.URL WHERE website.url not like test.[url]"
        Set qdf = CurrentDb.CreateQueryDef("DummyWebsite", strSQL)
        DoCmd.OpenQuery qdf.Name
        CurrentDb.QueryDefs.Delete qdf.Name
       
    ' besser
        strSQL = "INSERT INTO website(url)" _
              & " SELECT T.url" _
                & " FROM Test AS T" _
                     & " LEFT JOIN Website AS W" _
                     & " ON  T.ID = W.WebID" _
                     & " AND T.Url = W.URL" _
               & " WHERE w.url Not Like T.[url]"
        CurrentDb.Execute strSQL, 128
        'löschen Set qdf = CurrentDb.CreateQueryDef(.....
        'löschen DoCmd.OpenQuery qdf.Name
        'löschen CurrentDb.QueryDefs.Delete qdf.Name
       
    ' bzw.
          Case 6 ' Juni Abfrage
            strSQL = "UPDATE Website AS W" _
                         & " INNER JOIN Test AS T" _
                         & " ON W.webid = T.ID" _
                     & " SET W.Juni = T.[pos]"
            'löschen Set qdff = CurrentDb.CreateQueryDef("Update", strSqll)
            'löschen DoCmd.OpenQuery qdff.Name
            'löschen CurrentDb.QueryDefs.Delete qdff.Name
           
    ' nach dem Select..Case...End Select
        End Select
        'SQL ausführen
        CurrentDb.Execute strSQL, 128
        '3. Löschen der Import Tabelle!
        CurrentDb.Execute "DROP TABLE test;", 128
    ' oder
        CurrentDb.Execute "DELETE * FROM test;", 128

_________________
Gruß
Jürgen

Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie!
Gast



Verfasst am:
11. Dez 2012, 15:45
Rufname:

AW: Access Import Formular - AW: Access Import Formular

Nach oben
       Version: Office 2010

Hallo Jürgen,

danke für die schnelle Antwort.

Ich habe meinen Quelltext jetzt so angepasst, wie du es gesagt hast.
Leider habe ich immer noch das Problem, wenn ich weitere Excel Listen einfügen lasse, das er nicht überprüft welche Datensätze schon in den Tabellen stehen und es somit zu Doppelten Einträgen kommt.

Ich denke es liegt an der Abfrage, weil ja die Website Tabelle immer größer wird und die Importtabelle nur beim ersten Mal genau so viele Datensätze hat, wie die Websitetabelle. Ich weiß auch nicht, was ich ändern muss.
Code:
    strSQL = "INSERT INTO website (url)" _
          & " SELECT T.url" _
            & " FROM Test AS T " _
                 & " LEFT JOIN Website AS W" _
                 & " ON  T.ID = W.WebID" _
                 & " AND T.Url = W.URL" _
           & " WHERE W.webid Is Null"
    CurrentDb.Execute strSQL, 128
KlausMz
Moderator Access


Verfasst am:
11. Dez 2012, 15:49
Rufname:
Wohnort: Irgendwo in der Pfalz

AW: Access Import Formular - AW: Access Import Formular

Nach oben
       Version: Office 2010

Hallo,
woran erkennst Du doppelte Datensätze?
Ist das ein Feld oder können das mehrere sein?

_________________
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
JMalberg
Es wird so langsam sinnig ...


Verfasst am:
11. Dez 2012, 15:52
Rufname:
Wohnort: Saarbrücken

AW: Access Import Formular - AW: Access Import Formular

Nach oben
       Version: Office 2010

Das liegt mMn am JOIN des SELECT. Teste mal
Code:
SELECT T.url
FROM   Test AS T
       LEFT JOIN Website AS W
       ON  T.ID = W.WebID
       AND T.Url = W.URL
WHERE  W.webid Is Null
Wieso sind denn 2 JOIN-Links nötig, wenn es doch in tblTest und tblWebsite je eine eineindeutige Url gibt? Dann ist doch ID im JOIN überflüssig?
Code:
SELECT T.url
FROM   Test AS T
       LEFT JOIN Website AS W
       ON T.Url = W.URL
WHERE  W.webid Is Null

_________________
Gruß
Jürgen

Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie!
newyork1311
Einsteiger


Verfasst am:
11. Dez 2012, 16:54
Rufname:

AW: Access Import Formular - AW: Access Import Formular

Nach oben
       Version: Office 2010

Vielen Dank für die Abfrage, funktioniert Super. Jetzt ist meine Frage, wie bekomme ich die Suchbegeriffe in die Keyword Tabelle bzw. woher hole ich mir den Wert für das Feld webid?
Code:
    strSQL = "INSERT INTO keyword (kname, webid)" _
          & " SELECT T.suchbegriff, W.webid" _
            & " FROM Test AS T" _
                 & " LEFT JOIN Keyword AS K" _
                 & " ON T.Suchbegriff = K.kname" _
           & " WHERE K.kid Is Null"
    CurrentDb.Execute strSQL, 128
JMalberg
Es wird so langsam sinnig ...


Verfasst am:
11. Dez 2012, 17:36
Rufname:
Wohnort: Saarbrücken

AW: Access Import Formular - AW: Access Import Formular

Nach oben
       Version: Office 2010

So wie du es vorhast. An dem SQL sehe ich keinen auffallenden Fehler.
_________________
Gruß
Jürgen

Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie!
newyork1311
Einsteiger


Verfasst am:
13. Dez 2012, 10:32
Rufname:


AW: Access Import Formular - AW: Access Import Formular

Nach oben
       Version: Office 2010

newyork1311 am 13. Dez 2012 um 09:16 hat folgendes geschrieben:
Hallo,

ich habe noch 2 Fragen.
Leider tritt immer der folgende Fehler auf.
Zitat:
'Laufzeitfehler 3061' 1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben
Wenn ich auf debuggen klicke, wird mir die letzte Zeile Gelb markiert.
Code:
    strSQL = "INSERT INTO keyword (kname, webid)" _
          & " SELECT T.suchbegriff, W.webid" _
            & " FROM Test AS T" _
                 & " LEFT JOIN Keyword AS K" _
                 & " ON T.Suchbegriff = K.kname" _
           & " WHERE K.kid Is Null"
    CurrentDb.Execute strSQL, 128
Meine 2. Frage ist, wenn ich in meinem Filedialog auf abbrechen klicke bekomme ich einen Fehler, wie kann ich das abfangen?

Grüße

Jan

die 1. Frage hat sich soweit erledigt, habe den Fehler gefunden. Hab mich vertippt. Rolling Eyes
Nur wie bekomme ich jetzt den PK aus der Tabelle Website als FK in die Tabelle Keyword?

Gruß

Jan
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Anzahl der Datensätze zählen (im Formular oder Bericht) ? 3 anna-bolika 3756 31. März 2005, 12:50
Dalmatinchen Anzahl der Datensätze zählen (im Formular oder Bericht) ?
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Access Tabellen & Abfragen: Formular Daten in einer Tabelle speichern? 1 Gast 1017 24. März 2005, 16:24
Willi Wipp Formular Daten in einer Tabelle speichern?
Keine neuen Beiträge Access Tabellen & Abfragen: Automatische Aktualisierung von generiertem Wert im Formular 9 GandalfTCM 1041 09. Feb 2005, 17:40
lothi Automatische Aktualisierung von generiertem Wert im Formular
Keine neuen Beiträge Access Tabellen & Abfragen: text import mit variabler dateiangabe 2 dicc 614 06. Feb 2005, 21:09
Gast text import mit variabler dateiangabe
Keine neuen Beiträge Access Tabellen & Abfragen: mehrer abfragen ein formular 1 romu 719 10. Jan 2005, 15:54
lothi mehrer abfragen ein formular
Keine neuen Beiträge Access Tabellen & Abfragen: kreuzabfrage ausführen nach vorgeschaltetem formular mit kom 4 Gast 887 21. Dez 2004, 15:17
Gast kreuzabfrage ausführen nach vorgeschaltetem formular mit kom
Keine neuen Beiträge Access Tabellen & Abfragen: Formeln vom Formular, werden in der Abfrage nicht angezeigt 4 maddes 895 23. Nov 2004, 12:38
Skogafoss Formeln vom Formular, werden in der Abfrage nicht angezeigt
Keine neuen Beiträge Access Tabellen & Abfragen: Add Record - Formular in ein Nebenformular 6 User007 926 27. Okt 2004, 11:49
Gast Add Record - Formular in ein Nebenformular
Keine neuen Beiträge Access Tabellen & Abfragen: Zeile der Dateneingabe (*) in einem Formular verschieben 2 Albertus 790 08. Okt 2004, 09:17
Albertus Zeile der Dateneingabe (*) in einem Formular verschieben
Keine neuen Beiträge Access Tabellen & Abfragen: Tabelle, Formular, Abfrage...und nun ? 3 Gags 790 29. Aug 2004, 22:05
lothi Tabelle, Formular, Abfrage...und nun ?
Keine neuen Beiträge Access Tabellen & Abfragen: Kriterien aus nem Formular die mich fertig machen!!! 19 Martin von der Bergwiese 2658 24. Aug 2004, 12:53
Lorenz Kriterien aus nem Formular die mich fertig machen!!!
Keine neuen Beiträge Access Tabellen & Abfragen: Umlaute beim import von einer Oracle-Datenbank 3 simsuper1981 2042 13. Aug 2004, 08:48
Willi Wipp Umlaute beim import von einer Oracle-Datenbank
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: MS Frontpage