My solution to others:
My code:
Code:
Public Sub Import()
Dim sDBFile As String
Dim sXLSFile As String
Dim sSheet As String
Dim sTableName As String
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM tbl_temp_dok"
'On Error Resume Next
' DoCmd.SetWarnings False
' DoCmd.RunSQL "DROP TABLE tbl_slow_Dokumenty"
' DoCmd.SetWarnings True
'On Error GoTo 0
sDBFile = "C:\Users\ljar01\Desktop\Makro Braki Access\Nowy\Aplikacja_Braki_FE.accde"
sXLSFile = "C:\Users\ljar01\Desktop\Makro Braki Access\Nowy\Słownik.xlsx"
sSheet = "Dokumenty"
sTableName = "tbl_temp_dok"
'
'CurrentDb.Execute "SELECT * INTO [;DATABASE=" & _
'sDBFile & ";]." & sTableName & _
'" FROM [Excel 8.0;HDR=Yes;DATABASE=" & _
'sXLSFile & ";].[" & sSheet & "$];", dbFailOnError
''DoCmd.TransferDatabase acLink, "Microsoft Access", sDBFile, _
acTable, sTableName, sTableName
CurrentDb.Execute "INSERT INTO tbl_temp_dok SELECT * FROM [Excel 8.0;HDR=Yes;DATABASE=" & _
sXLSFile & ";].[" & sSheet & "$];", dbFailOnError
DoCmd.OpenQuery "QryUpdateDok"
DoCmd.OpenQuery "QryAppendDok"
DoCmd.OpenQuery "QryDeleteDok"
DoCmd.SetWarnings True
End Sub
This code is running when user is opening front-end (Access Runtime):
1) delete data from tbl_temp_dok (which is not linked table)
2) Next step is to insert all data drom Excel to Access temp table
3) run update and appned quries
QryUpdateDok - first I am uptading existing fields:
Code:
UPDATE tbl_slow_Dokumenty INNER JOIN tbl_temp_dok ON tbl_slow_Dokumenty.Numer=[tbl_temp_dok].Numer
SET tbl_slow_Dokumenty.Obowiązkowy = [tbl_temp_dok].Obowiązkowy, tbl_slow_Dokumenty.Dokument = [tbl_temp_dok].Dokument;
QryAppendDok - secondly I am appending non existing fields:
Code:
INSERT INTO tbl_slow_Dokumenty
SELECT tbl_temp_dok.*
FROM tbl_temp_dok LEFT JOIN tbl_slow_Dokumenty ON tbl_slow_Dokumenty.Numer=[tbl_temp_dok].Numer
WHERE tbl_slow_Dokumenty.Numer Is Null;
edit:
I added also delete query to check if records in tbl_slow_Dokumenty were deleted from tbl_temp:
Code:
DELETE tbl_slow_Dokumenty.*FROM tbl_slow_Dokumenty
WHERE tbl_slow_Dokumenty.Numer NOT IN (SELECT tbl_temp_dok.Numer FROM tbl_temp_dok);
I do not know this is good approach to build databases using flat Excel files but referencing to Access Gurus answers - this is a good way.
Best Wishes
Jacek