Hi,
I have been able to work the code for add new and update records and checking the record duplication which is as below :
Sub Add_Update_Data_To_Base()
Application.ScreenUpdating = False ' Prevents screen refreshing.
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
Dim MyConn
Dim lngRow As Long
Dim lngId, LR, Upd
Dim j As Long
Dim sSQL As String
LR = Range("A" & Rows.Count).End(xlUp).Row
Upd = LR - 1
lngRow = 4
Do While lngRow <= LR
Sheets("marketing").Activate
lngId = Cells(lngRow, 1).Value
sSQL = "SELECT * FROM Tbl_Sample_details WHERE Sample_Auto_ref = '" & lngId & "'"
Set cnn = New ADODB.Connection
'Office Connection:
MyConn = "Provider = Microsoft.ACE.OLEDB.12.0;" & _
"Data Source = C:\Karina_Int\Database\Sample_Process.accdb"
'Home Connection:
'MyConn = "Provider = Microsoft.ACE.OLEDB.12.0;" & _
"Data Source = E:\Karina_Int\Database\Sample_Process.accdb"
With cnn
' .Provider = "Microsoft.Jet.OLEDB.4.0"
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
End With
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
rst.Open sSQL, ActiveConnection:=cnn, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
' If rs.BOF And rs.EOF Then
' MsgBox "recordset is empty"
'Else
' rs.MoveLast
' MsgBox "recordset contains " & rs.RecordCount & " rows"
'End If
' Set rs = Me.Recordset.Clone
'If Me.Recordset.RecordCount = 0 Then 'checks for number of records
' MsgBox "There is no records"
'End If
With rst
'If Not (.BOF And .EOF) = True Then
If .RecordCount = 0 Then
.AddNew
.Fields("Sample_Auto_ref") = Cells(lngRow, 1).Value
.Fields("Ref_Client") = Cells(lngRow, 2).Value
.Fields("Ref_Karina") = Cells(lngRow, 3).Value
.Fields("Saison") = Cells(lngRow, 4).Value
.Fields("Marketing_Manager") = Cells(lngRow, 5).Value
.Fields("Merchandiser") = Cells(lngRow, 6).Value
.Fields("Client") = Cells(lngRow, 7).Value
.Fields("Depart") = Cells(lngRow, 8).Value
.Fields("Theme") = Cells(lngRow, 9).Value
.Fields("Desc") = Cells(lngRow, 10).Value
.Fields("Type_Echantillion") = Cells(lngRow, 11).Value
.Fields("Taille") = Cells(lngRow, 12).Value
.Fields("Qty") = Cells(lngRow, 13).Value
.Fields("Keep_KI") = Cells(lngRow, 14).Value
.Fields("Type_Lavage") = Cells(lngRow, 15).Value
.Fields("Colori_Gmt_dyed") = Cells(lngRow, 16).Value
.Fields("Valeur_Ajouter") = Cells(lngRow, 17).Value
.Fields("Date_request_Merc") = Cells(lngRow, 18).Value
.Fields("Date_Livraison") = Cells(lngRow, 19).Value
.Update
'MsgBox "record added new"
Else
.Fields("Sample_Auto_ref") = Cells(lngRow, 1).Value
.Fields("Ref_Client") = Cells(lngRow, 2).Value
.Fields("Ref_Karina") = Cells(lngRow, 3).Value
.Fields("Saison") = Cells(lngRow, 4).Value
.Fields("Marketing_Manager") = Cells(lngRow, 5).Value
.Fields("Merchandiser") = Cells(lngRow, 6).Value
.Fields("Client") = Cells(lngRow, 7).Value
.Fields("Depart") = Cells(lngRow, 8).Value
.Fields("Theme") = Cells(lngRow, 9).Value
.Fields("Desc") = Cells(lngRow, 10).Value
.Fields("Type_Echantillion") = Cells(lngRow, 11).Value
.Fields("Taille") = Cells(lngRow, 12).Value
.Fields("Qty") = Cells(lngRow, 13).Value
.Fields("Keep_KI") = Cells(lngRow, 14).Value
.Fields("Type_Lavage") = Cells(lngRow, 15).Value
.Fields("Colori_Gmt_dyed") = Cells(lngRow, 16).Value
.Fields("Valeur_Ajouter") = Cells(lngRow, 17).Value
.Fields("Date_request_Merc") = Cells(lngRow, 18).Value
.Fields("Date_Livraison") = Cells(lngRow, 19).Value
rst.Update
'MsgBox "update me"
End If
End With
'rst.Close 'the connection
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
lngRow = lngRow + 1
Loop
MsgBox "You just updated " & Upd & " records"
End Sub
But am still looking for solution for the download record code from access. In fact the workbook already have some data in it and it just need to update the some of the records from the database which were changed.
the code is as such :
Sub Download_data_From_Dase()
Dim cn As Object, rs As Object
Dim intColIndex As Integer
Dim DBFullName As String
Dim TargetRange As Range
Dim LR
'HOME CONNECTION
'DBFullName = "E:\Karina_Int\Database\Sample_Process.accdb"
'OFFICE CONNECTION
DBFullName = "C:\Karina_Int\Database\Sample_Process.accdb"
'On Error GoTo Whoa
Application.ScreenUpdating = False
Sheets("RECALL").Activate
'Set TargetRange = Sheets("RECALL").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
Set TargetRange = Sheets("RECALL").Cells(Rows.Count, "A").End(xlUp)
'Set TargetRange = Sheets("RECALL").Range("A" & Rows.Count).End(xlUp).Row
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & DBFullName & ";"
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT Sample_Auto_ref , Ref_Client, Ref_Karina, Saison, Marketing_Manager, Merchandiser, Client, Depart, Theme, Desc, Type_Echantillion FROM tbl_sample_details WHERE Valeur_Ajouter = 'NS'", cn, , , adCmdText
'strSQL1 = "SELECT Customers.Company, Customers.[Last Name], "
'strSQL1 = strSQL1& "Customers.[First Name], "
'strSQL1 = strSQL1& "Customers.[Job Title], Customers.[Business Phone]"
'strSQL1 = strSQL1& "FROM Customers;"
' ' Write the field names
For intColIndex = 0 To rs.Fields.Count - 1
TargetRange.Offset(1, intColIndex).Value = rs.Fields(intColIndex).Name
Next
' Write recordset
TargetRange.Offset(1, 0).CopyFromRecordset rs
LetsContinue:
Application.ScreenUpdating = True
On Error Resume Next
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
On Error GoTo 0
Exit Sub
End Sub