Probleme beim Einloggen

Tippfarm: MS Office Problemlösungen

Gefundene Lösungen teilen, Fragen stellen - oder nur mitlesen. Titel der Beiträge bitte mit "FRAGE:" oder "TIPP:" beginnen. Viel Vergnügen!

Herbert Fidesser TIPP: Bericht aus den gefilterten Datensätzen eines Formulars erstellen
Wenn ein Formular gefilterte Datensätze anzeigt, kann recht einfach auch der zugehörige Bericht gefiltert aufgerufen werden. Diese einfache VBA-Zeile matcht's möglich:
DoCmd.OpenReport "Berichtsname", acViewPreview, , Me.Filter
"Me.Filter" übernimmt den Formularfilter in den Bericht.
Yunnis Bouharoual Import aus Excel und Überschreibung aktueller Datensätze
Liebe Gruppe,
folgende Aufgabe muss ich bewältigen : Datensätze sollen aus Excel importiert werden, sofern die Tabelle noch nicht in Access(2010) existiert wird sie neu angelegt, existiert sie jedoch schon (z.B identische Spaltennamen) soll sie mit den aktuellen Datensätzen (über den Import aus Excel) aktualisiert/überschrieben werden. Das ganze soll dann über Buttons in einem Formular laufen.
Da meine VBA-Kenntnisse sehr begrenzt sind wende ich mich nun an Experten die mir hoffentlich weiterhelfen können.
Den Import-Vorgang habe ich soweit schon hinbekommen :
Private Sub btnBrowse_Click
Dim diag As Office.FileDialog
Dim item As Variant
Set diag = Application.FileDialog(msoFileDialogFilePicker)
diag.AllowMultiSelect = False
diag.Title = "Bitte wählen Sie eine Excel-Datei aus"
diag.Filters.Clear
diag.Filters.Add "Excel Spreadsheets", "*.xls, *.xlsx"
If diag.Show Then
For Each item In diag.SelectedItems
Me.txtFileName = item
Next
End If
Dim FSO As New FileSystemObject
If Nz(Me.txtFileName, "") = "" Then
MsgBox "Bitte wählen Sie eine Datei aus!"
Exit Sub
End If
If FSO.FileExists(Me.txtFileName) Then
Modul1.ImportExcelSpreadsheet Me.txtFileName, FSO.GetFileName(Me.txtFileName)
Else
MsgBox "Diese Datei wurde nicht gefunden!"
End If
End Sub
In meinem Modul 1 steht folgendes :
Public Sub ImportExcelSpreadsheet(fileName As String, tableName As String)
On Error GoTo BadFormat
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, tableName, fileName, True
Exit Sub
BadFormat:
MsgBox "Das Format dieser Datei wird nicht unterstützt"
End Sub
Wie schaffe ich es nun über den Import aus Excel Datensätze in Access zu aktualisieren bzw. wie muss ich den Code für das Überschreiben mit meinem Import-Code verknüpfen.
Folgende Ansätze die ich in diversen Foren gefunden habe die bislang aber nicht funktionierten:
Public Function ErsetzenTabelle(txtFileName As String, Dateiname As String) As Long
ErsetzenTabelle = 0
DoCmd.RunSQL "SELECT " & txtFileName & ".* INTO " & txtFileName & "TEMP FROM " & txtFileName & ";"
DoCmd.RunSQL "DELETE * FROM " & txtFileName & "TEMP"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, txtFileName & "TEMP", Dateiname, True
If DCount("*", txtFileName & "TEMP") = 0 Then
MsgBox "Die Datenherkunft beinhaltet keine Daten."
Exit Function
Else
DoCmd.RunSQL "DELETE * FROM " & txtFileName
DoCmd.RunSQL "SELECT " & txtFileName & "TEMP.* INTO " & txtFileName & " FROM " & txtFileName & "TEMP;"
End If
DoCmd.DeleteObject acTable, txtFileName & "TEMP"
ErsetzenTabelle = -1
Exit Function
End Function
Die Syntax von SQL-Statements habe ich noch nicht durchschaut weshalb ich das noch nicht so gut an meinen Code anpassen bzw. selbst schreiben konnte.
Wie würdet ihr das lösen? Am besten man kann noch auswählen welche AccessTabelle man denn überschreiben möchte.
Evtl. hat hier jemand genau so einen Code schon mal geschrieben und könnte diesen zu Verfügung stellen?
Mit freundlichen Grüßen
Yunnis Bouharoual
Herbert Fidesser
Hi Yunnis,
mit der Zeile
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, txtFileName & "TEMP", Dateiname, True
hst du schon eine Access-Tabelle erzeugt.
Nun kannst du die Daten in eine andere Tabelle übernehmen, vorausgesetzt, es gibt in beiden Tabellen ein Feld mit einem eindeutigen übereinstimmenden Schlüssel (Primärschlüssel = ID):
dim db as Database
dim tblquell as recordset, tblziel as recordset
Set DB = currentdb
Set tblquell = db.OpenRecordset("NameQuelltbl", dbOpenDynaset)
Set tblziel = db.OpenRecordset("NameZieltbl", dbOpenDynaset)
with tblquell
if .recordcount = 0 then
MsgBox "Nix da!"
Exit sub
end if
.movefirst
Do
'Prüfung der beiden Primärschlüssel auf Übereinstimmung
tblziel.findfirst IDz = !IDq
if tblziel.NoMatch Then
tlbziel.AddNew
tlbziel!IDz = !IDq
else
tlbziel.Edit
end if
'Und jetzt einfach alle anderen Felder überschreiben:
tlbziel!Feldname1 = !Feldname xy
'usw.
tlbziel.update
Loop While Not .EOF
end with
Der Code ist ungeprüft.
Ich hoffe, das genügt dir.
Gutes Gelingen und schönen Gruß
Herbert
Herbert Fidesser TIPP: Feldauswahl in UNION-Abfrage
In einer UNION-Abfrage mehrere Tabellen verknüpft. Die Anzahl der abgefragten Felder muss dabei in allen Tabellen gleich sein. Was tun, wenn ein Feld aber nicht in allen Tabellen existiert?
Lösung:
Das fehlende Feld mit NULL angeben, also z.B.:
Das Feld Titel gibt es in Tabelle 2 nicht.
SELECT Titel, Nachname, Vorname FROM Tabelle1
UNION SELECT NULL, Nachname, Vorname FROM Tabelle2;
Statt NULL kann auch ein konstanter Wert eingesetzt werden (z.B. "xy" as Titel).

Moderatoren

Infos zu den Moderatoren

Über die Gruppe "Tippfarm: MS Office Problemlösungen"

  • Gegründet: 01.07.2008
  • Mitglieder: 2.748
  • Sichtbarkeit: offen
  • Beiträge: 3.615
  • Kommentare: 3.269
  • Marktplatz-Beiträge: 0