ACCESS DB ÜRÜN LİSTESİ GÜNCELLEME ADO

Katılım
6 Ekim 2004
Mesajlar
250
Excel Vers. ve Dili
MSOffice 2010 TR
Altın Üyelik Bitiş Tarihi
19-11-2020
Merhaba ,

Aşağıdaki kod Access veri tabanına ado ile ulaşıp Producttable adındaki tabloda field2 Productname ye bakıyor ve referans verilen excel hücrelerinde ürün adı eşleşiyorsa field4 de Price satırlarını döngü ile cok hızlı bir şekilde değiştirebiliyor. Çok güzel kullanışlı bir kod. Arşivlemek açısından burada paylaşıyorum ayrica bu kodda ihtiyacıma göre revize denedim fakat cok ugrasmama ragmen yapamadım. Yardımcı olabilecek üstad varsa yardımınızı rica ederim.

Bana lazım olanlar :

1) Producttable aynı üründen birden çok varsa Nasil bir kod kullanmaliyim.


2)Hücrelerden döngüyle değiştirme kodlarını bozmadan ayrıca bir makro olarak Sadece ÜrünTextbox1 deki ürün ismini kontrol edip PriceCombobox1 deki değerle değitirecek ikinci bir modül e ihtiyacım var.


https://software-solutions-online.com/updating-tables-access-database-using-excel-vba/?unapproved=1103&moderation-hash=121f3101d0fa4e3a0243c93a0063f8fa#comment-1103


Sub updateAccess()

Dim cn As ADODB.Connection

Dim rstProducts As ADODB.Recordset

Dim sProduct As String

Dim cPrice As String

Dim counter As Integer

Application.DisplayAlerts = False

Set cn = New ADODB.Connection

cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Products.accdb;Persist Security Info=False;"

cn.Open

Set rstProducts = New ADODB.Recordset

With rstProducts

.Open "ProductTable", cn, adOpenKeyset, adLockPessimistic, adCmdTable

End With

sProduct = Sheet1.Cells(2, 1).Value ' row 1 contains column headings

counter = 0

Do While Not sProduct = ""

sProduct = Sheet1.Cells(2 + counter, 1).Value

cPrice = Sheet1.Cells(2 + counter, 2).Value

rstProducts.Filter = "ProductName = '" & sProduct & "'"

If rstProducts.EOF Then

rstProducts.AddNew

rstProducts("rstProducts!ProductName").Value = sProduct

rstProducts("rstProducts!Price").Value = cPrice

Else

rstProducts!Price = cPrice

End If

rstProducts.Update

counter = counter + 1

sProduct = Sheet1.Cells(2 + counter, 1).Value

Loop

rstProducts.Close

Set rstProducts = Nothing

cn.Close

Set cn = Nothing

Application.DisplayAlerts = True

End Sub


teşekkürler , saygılar ,
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Örnek dosya eklerseniz bakabilirim. Sadece kod ile zor.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Aşağıdaki kodu deneyebilir misiniz.

Kod:
Private Sub CommandButton1_Click()

Set con = VBA.CreateObject("adodb.Connection")
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\SANAYI_ONAYLAR.mdb" & ";Persist Security Info=False;"

Set rs = con.Execute("update [ASLI_GELMEYEN] set DURUMU = '" & ComboBox1.Value & "' where NETSIS_KOD = '" & TextBox1.Value & "' ")
con.Close

MsgBox "işlem gerceklesti"
End Sub
 
Son düzenleme:
Katılım
6 Ekim 2004
Mesajlar
250
Excel Vers. ve Dili
MSOffice 2010 TR
Altın Üyelik Bitiş Tarihi
19-11-2020
Erdem Bey teşekkürler elinize saglik bu çalışıyor.

Toplu şekilde , ilk örnekteki gibi excel hücrelerinden döngü ile değiştirmek istersek nasil yapabiliriz. tektek girişler oldugu gibi db de aylık olarak da toplu güncellemeler yapilacak çünkü..
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Döngü ile yapmaktan kastınız excel'deki NETSIS_KOD sütununda olan tüm değerleri access'te güncellemek mi istiyorsunuz?
Userform kullanacak mısınız?
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Userform kullanmayacağınızı düşünüyorum.
Aşağıdaki kodu kullanabilirsiniz.

Kod:
Sub DENEMEME()

Set con = VBA.CreateObject("adodb.Connection")

ruta = ThisWorkbook.Path & "\SANAYI_ONAYLAR.mdb"

For i = 2 To Cells(Rows.Count, "A").End(3).Row

con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ruta & ";Persist Security Info=False;"

Set rs = con.Execute("update [ASLI_GELMEYEN] set DURUMU = '" & Cells(i, "B") & "' where NETSIS_KOD = '" & Cells(i, "A") & "' ")
con.Close

Next i

MsgBox "işlem gerceklesti"
End Sub
 
Katılım
6 Ekim 2004
Mesajlar
250
Excel Vers. ve Dili
MSOffice 2010 TR
Altın Üyelik Bitiş Tarihi
19-11-2020
çok teşekkür ederim emeklerinize saglik.
ikisini de kullanacagim.
 
Katılım
6 Ekim 2004
Mesajlar
250
Excel Vers. ve Dili
MSOffice 2010 TR
Altın Üyelik Bitiş Tarihi
19-11-2020
hocam bir şey daha lazim oldu rica etsem. bakabilir misiniz.

tablodaki değerleri saydırmam lazim selecet * from u iki değerli nasıl kullanabilirim. yani iki sutunda filtre yapacağım




Sub test()

Dim lRecCount, lRecCount2 As Long
Set BAGLAN = CreateObject("adodb.connection")
Set rs = CreateObject("adodb.recordset")
Dim YOL, DOSYA As String
YOL = ThisWorkbook.Path
DOSYA = "\SANAYI_ONAYLAR.mdb"
Set BAGLAN = CreateObject("adodb.connection")
RUTA = YOL & DOSYA
BAGLAN.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & "Data Source=" & RUTA
rs.Open "select * from [ASLI_GELMEYEN] WHERE [ASLI_GELMEYEN].DURUMU LIKE '%" & "NO" & "%'", BAGLAN, 1, 1
rs.MoveLast
lRecCount = rs.RecordCount
MsgBox lRecCount
rs.Close
Set rs = Nothing
End Sub


Buna ikinci bir sutunu ekleyebir miyim

[ASLI_GELMEYEN].DONEMI LIKE '%" & "KASIM" & GİBİ ?
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Örnek dosya üzerinden sorabilir misiniz.
 
Katılım
6 Ekim 2004
Mesajlar
250
Excel Vers. ve Dili
MSOffice 2010 TR
Altın Üyelik Bitiş Tarihi
19-11-2020
buyurun , databasedeki dönemi kasım olan ve durumu yes olanları sayacak cmd buton
 

Ekli dosyalar

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Öncelikle SQL konusunda kendinizi geliştirmeniz gerekiyor.
Aşağıdaki adres türkçe ve basit örneklerle öğrenmenize yardımcı olacaktır.

https://www.sqlkodlari.com/

Sorunuza gelince KASIM ayını sayısını öğrenmek için aşağıdaki sorguyu kullanabilirsiniz.

Kod:
sorgu = "select count(DONEMI) from[ASLI_GELMEYEN] where  DONEMI = '" & "KASIM" & "' "
 
Katılım
6 Ekim 2004
Mesajlar
250
Excel Vers. ve Dili
MSOffice 2010 TR
Altın Üyelik Bitiş Tarihi
19-11-2020
Merhaba ,

gonderdigim dosyada verdiginiz kod zaten var saydirabiliyorum fakat ikili sorguyu çözemedim / dönemi kasım olan and durumu yes olan. iki kriterli sorgu ihtiyacim

"Öncelikle SQL konusunda kendinizi geliştirmeniz gerekiyor. " yorumunuza katiliyorum bu konuya egilecegim. bugune kadar iş yerinde bireysel ihtiyaclarim icin excel kullanirken şimdi bir kac kişinin ortak kullanacagi kucuk programlarla ugrasiyorum excel db olarak kullanmaya calistigimda sorunlarla karsilastim. dolayisiyla access gibi amacı database olan programla yöneldim , fakat sadece VBA kodlarından anladiğim için Excel üzerinden Accesle çalışmaya yeni başladım, kaynak için çok teşekkür ederim.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
ADO nesnesini sadece access'te kullanmak için değil. Kapalı excel dosyaları yada açık excel dosyalarınızdaki sorgulamalar içinde kullanabilirsiniz.

Kod:
sorgu = "select count(DONEMI) from[ASLI_GELMEYEN] where  DONEMI = '" & "KASIM" & "' and DURUMU =  '" & "YES" & "' "
 
Katılım
6 Ekim 2004
Mesajlar
250
Excel Vers. ve Dili
MSOffice 2010 TR
Altın Üyelik Bitiş Tarihi
19-11-2020
evet ado ile kapalı dosyalarda calismalar kullaniyorum.

rs.Open "select * from [ASLI_GELMEYEN] WHERE [ASLI_GELMEYEN].DURUMU LIKE '%" & "NO" & "%'" AND [ASLI_GELMEYEN].DONEMI LIKE '%" & "KASIM" & "%'", BAGLAN, 1, 1

Bu sekilde deniyorum olmuyor yalniz verdiğiniz kod.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Benim önerdiğim kod ile sizin yazdığınız kod çalışma mantığı olarak birbirinden farklı. Önerdiğim kod doğru çalışıyor.
Böyle bir işlem için LIKE operatörü kullanmanıza gerek yok.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Kod:
sorgu = "select * from [ASLI_GELMEYEN] WHERE [ASLI_GELMEYEN].DURUMU LIKE '%" & "NO" & "%' and  [ASLI_GELMEYEN].DONEMI LIKE '%" & "KASIM" & "%' "
 
Katılım
6 Ekim 2004
Mesajlar
250
Excel Vers. ve Dili
MSOffice 2010 TR
Altın Üyelik Bitiş Tarihi
19-11-2020
anladım şu şekilde deneyince oldu çok teşekkür ederim cok ugrastirdim

rs.Open "select * from [ASLI_GELMEYEN] WHERE [ASLI_GELMEYEN].DURUMU LIKE '%" & "NO" & "%' and [ASLI_GELMEYEN].DONEMI LIKE '%" & "KASIM" & "%' ", BAGLAN, 1, 1
rs.MoveLast
lRecCount = rs.RecordCount
MsgBox lRecCount
rs.Close
Set rs = Nothing
 

burhancavus61

Altın Üye
Katılım
13 Mayıs 2005
Mesajlar
761
Excel Vers. ve Dili
2010 Türkçe
Altın Üyelik Bitiş Tarihi
03.11.2024
Userform kullanmayacağınızı düşünüyorum.
Aşağıdaki kodu kullanabilirsiniz.

Kod:
Sub DENEMEME()

Set con = VBA.CreateObject("adodb.Connection")

ruta = ThisWorkbook.Path & "\SANAYI_ONAYLAR.mdb"

For i = 2 To Cells(Rows.Count, "A").End(3).Row

con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ruta & ";Persist Security Info=False;"

Set rs = con.Execute("update [ASLI_GELMEYEN] set DURUMU = '" & Cells(i, "B") & "' where NETSIS_KOD = '" & Cells(i, "A") & "' ")
con.Close

Next i

MsgBox "işlem gerceklesti"
End Sub
Hocam bu kodu userform üzerinden uygulamak istiyorum. döngü işlemi user form için nasıl olmalı
 
Üst