Soru Userform - Access Bağlantıları ile ilgili Yardım hk.

furkani

Altın Üye
Katılım
24 Şubat 2020
Mesajlar
64
Excel Vers. ve Dili
Microsoft Office Standard 2019
Altın Üyelik Bitiş Tarihi
26-04-2025
Merhaba Arkadaşlar,
Ekte paylaştığım dosyayı iş yerinde saha bilgilerinin kayıt edilmesi için kullanmak istiyorum. Aslında tüm veriler eksiksiz girilirse şuanda işimi görüyor, ancak giriş yapacak personelin daha az inisiyatif almasını ve tabiri caiz ise taş gibi bir form olmasını istediğimden sizden yardım rica ediyorum.
Tablonun amacı kısaca; sahada ürün alımı yapacak personeller aldığı ürünlerin verilerini excel userform üzerinden access e gönderiyor. Ürün alımı ile ilgili bilgiler ve fiyat hesaplaması bulunan userform üzerinde ki SERİ NO kısmı access' de birincil anahtardır. Tüm işlemleri Seri Numarası üzerinden yapmayı planladım. Userform da 2 ayrı kayıt bölümü bulunmakta; analiz ve satın alma. Yapılan Analizin satışa dönüşmemesi durumunda altta ki Analiz butonuna, devamında seri numarası üzerinden çağrılan analizinde satın almaya dönüşmesi durumunda altta ki kantar bilgileri de eklenerek satın alma butonuna basılması gerekmektedir.
Bu noktada formdaki eksiklerim şunlardır;
- Kayıt Butonuna Basıldığında (Analiz veya Satın Alma), eksik bilgi var ise, Eksik Bilgi Girişi olduğuna dair uyarı vermesi ve tüm bilgiler girilmeden işlem yaptırmaması
- Birincil anahtar olan SERİ NO. mevcutta access de var ise, Mükerrer kayıt hatası vermesi,
- Analiz Çağır butonu ile çağrılan Bilgilerin, en altta bulunan Kantar Bilgileri girildikten sonra Satın Almaya basılarak kaydedilmesiyle Access dosyasında ki satırın güncellenmesi, (Tek satır; 17 Kolon Analiz Bilgisini, 4 kolon da Kantar Bilgilerini içeriyor. Bunların toplamı da 21 kolonluk Satın Almayı oluşturuyor. Aynı satırda 17 kolondan oluşan analiz bilgileri çağrıldıktan sonra kantar bilgileri girilerek satın almaya basıldığı zaman satırın sonunda ki 4 kolonda dolarak, 21 kolonun Access' de tamamen güncellenmesi)
Umarım bu kadar uzun bir yazı yazmam derdimi anlatmaya yetmiştir. Şimdiden emeği geçenlere teşekkür ederim. Saygılar,
 

Ekli dosyalar

furkani

Altın Üye
Katılım
24 Şubat 2020
Mesajlar
64
Excel Vers. ve Dili
Microsoft Office Standard 2019
Altın Üyelik Bitiş Tarihi
26-04-2025
Arkadaşlar kimsenin ilgisini çekmedi mi :)
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Şimdi şöyle birkaç sıkıntı var ....

1) Dosyanızı açınca Excel gizleniyor, Excel'in kendisine ve kodlara ulaşmak için debelenmek lazım.

2) Konunun Access ile ilgili olduğunu söylüyorsunuz ama ekte Access dosyası yok, nasıl deneme yapıp da sonuçları izleyeceğiz?

.
 

furkani

Altın Üye
Katılım
24 Şubat 2020
Mesajlar
64
Excel Vers. ve Dili
Microsoft Office Standard 2019
Altın Üyelik Bitiş Tarihi
26-04-2025
İki sıkıntıya da düzelterek gönderiyorum. Bir hususun tekrar altını çizmek istiyorum;
2 ayrı kayıt butonu var ( Analiz ve Satın Alma) ve bu iki buton da aynı tabloya mükerrer kayıt yapıyor. Yukarı da demek istediğim Analiz Kaydı yapıldıktan sonra, seri numarasına göre bilgi çağırılacak. Çağırılan bilgiler, kantar bilgileri de girilerek Satın Alma butonuna basıldığı zaman access deki satırın güncellenmesini rica ediyorum.
İlginiz için teşekkür ederim.
 

Ekli dosyalar

furkani

Altın Üye
Katılım
24 Şubat 2020
Mesajlar
64
Excel Vers. ve Dili
Microsoft Office Standard 2019
Altın Üyelik Bitiş Tarihi
26-04-2025
Yardımlarınızı bekliyorum, teşekkürler.
 

furkani

Altın Üye
Katılım
24 Şubat 2020
Mesajlar
64
Excel Vers. ve Dili
Microsoft Office Standard 2019
Altın Üyelik Bitiş Tarihi
26-04-2025
Konu günceldir.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Ben size şöyle bir öneride bulunayım;

Örnek olarak, bilgisayarda lokal olarak çalışan bir Excel dosyası ve Access veri tabanı oluşturun. Veri tabanı dosyasında 1-2 tablo, 3-4 tane alan olsun. Bunları da, esas projenizle uyumlu olarak hazırlayın (alanların veri tipleri, uzunlukları, tekil ID ....). Yani, fazla karışık/kuruşuk olmasın....

Bu örnek üzerinden sorunuzu tekrar sorarsanız, yardım almanız kolaylaşabilir belki. Örnek dosyada amaca ulaştığınızda, geriye dönüp esas dosyanıza uyarlayabilirsiniz.

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
İstediğinizi, belki hazırladığım örnekte bulabilirsiniz....

Veritabanı işlerinin başlangıcında genelde "Telefon Defteri" gibi basit bir yapı, olayın kavranmasında iyi olur, bu nedenle böyle bir örnek hazırladım.

Excel'den, kayıtların saklandığı Access dosyasına veri yazılıyor, güncelleniyor veya siliniyor. Bu işler yapılırken, verilerin olduğu tablodaki "ID" alanından faydalanılıyor. Deneme yaparken, mevcut veri tabanında "Adres" bilgileri eksik olan kayıtları güncelleyebilirsiniz... Bu iş yapılırken, veri tabanı tablosunda "ID" alanı kullanıyor.

Aslında, Public-Global değişkenler kullanarak kodlar yarı yarıya azaltılabilirdi ama, her prosedürü müstakil hazırladım ki; incelerken başından sonuna kadar bir bütünlük olsun istedim.

Not: Bende Access olmadığı için veri tabanını Excel'de VBA ile oluşturdum, hatalar varsa bilemiyorum ama idare eder ... herhalde

.
 

Ekli dosyalar

furkani

Altın Üye
Katılım
24 Şubat 2020
Mesajlar
64
Excel Vers. ve Dili
Microsoft Office Standard 2019
Altın Üyelik Bitiş Tarihi
26-04-2025
Haluk Bey teşekkürler, tam benim ihtiyacım olan örnek bir dosya. Ancak, access verilerini güncellemeyi başaramadım. Sizin göndermiş olduğunuz dosya daki access e bağlantı mantığını tam anlayamadım bu nedenle, access dosyasını bulduramıyorum. Aşağıda hem benim access dosyasından verileri hangi bağlantı ile aldığımı hem de sizin access verilerini hangi bağlantı ile güncelleme yaptığınız kodları gönderiyorum. Uyarlama için umarım arkadaşlardan yardım gelir. İlginiz için teşekkürler.

Benim hazırladığım access' den kayıt çekme kodu;

Kod:
Private Sub CommandButton2_Click()

Dim baglan As New Connection
Dim rs As New Recordset

baglan.Open "Provider=Microsoft.Ace.Oledb.12.0;data source=\\192.168.1.25\Hammadde\denemedata.accdb;"

rs.Open "select * from NOHUT where KİMLİK", baglan, adOpenKeyset, adLockPessimistic
rs.AddNew

If Me.ComboBox1.Text <> "" Then rs.Fields(1) = Me.ComboBox1.Text
...
If Me.TextBox18.Text <> "" Then rs.Fields(21) = Me.TextBox18.Text

rs.Update
rs.Close
baglan.Close
MsgBox "Veri Kaydedildi!"

End Sub

Bu da sizin hazırladığınız access' deki veriyi güncelleyen kodlar;

Kod:
Private Sub CommandButton2_Click()

    Dim adoCN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Dim strSQL As String
    Dim i As Long, countRows As Long
    
    On Error GoTo ErrorHandler:
    
    DatabasePath = ThisWorkbook.Path & "\TelefonDefteri.mdb"
    
    Set adoCN = New ADODB.Connection
    
    If Val(Application.Version) < 14 Then
        adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
    Else
        adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
    End If
    
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
    
    Set RS = New ADODB.Recordset
    
    strSQL = "Select * from [Rehber] where [ID]=" & ComboBox1.Value
    
    RS.CursorType = adOpenKeyset
    RS.LockType = adLockOptimistic
    RS.ActiveConnection = adoCN
    RS.Source = strSQL
    
    RS.Open
    
    RS("Ad") = TextBox6
    RS("Soyad") = TextBox7
    RS("Tel_No") = TextBox8
    RS("Adres") = TextBox10
    
    RS.Update
    
    If RS.State = 1 Then
        RS.ActiveConnection.Close
    End If
    
    MsgBox "İşlem tamamlandı!...", vbInformation, "Telefon Defteri..."
    If adoCN.State = 1 Then adoCN.Close
    Set RS = Nothing
    
    Call RefreshForm
ExitHere:

    ComboBox1.Text = ""
    TextBox6 = ""
    TextBox7 = ""
    TextBox8 = ""
    TextBox10 = ""
    Set RS = Nothing
    Set adoCN = Nothing
    Exit Sub
    
ErrorHandler:
    MsgBox "Error No: " & Err.Number & vbCrLf & vbCrLf & _
            Err.Description & vbCrLf & vbCrLf & _
            "Source: " & Err.Source, vbApplicationModal, "Telefon Defteri..."
    GoTo ExitHere:
End Sub
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Access verilerinizi ekli Excel dosyasına aktarıp duruma şöyle biraz baktım ama, kodlarla birlikte düşününce epey vakit harcamak lazım ....

Bence siz ilk önce veri tabanını biraz düzeltmeye çalışın. Alanların veri tiplerini mesela verilere uygun seçin .... Mesela; "ANALİZ" tablosunda "9mm(%)" alanının veri tipi diğer benzerleriyle uyumlu değil. Veya; "NOHUT", "FASÜLYE" .... tablolarında "BRÜT FİYAT" alanı veya "TAHMİNİ MİKTAR" alanları "String" olarak tanımlanmış ??? Tablolardaki alan adlarında "parantez" ve "yüzde" karakterlerini kullanmayın...... Tabloların birçoğu da benzer yapıda olduğu için, aslında ayrıştırıcı alanlar kullanılarak bunlar birleştirilebilir. SQL sorgularında da problem çıkmaz.

Kısaca baktığımda gördüğüm belli başlı şeyler bunlar. Başkaları da vardır muhtemelen....

Sonra; siz herşeyi "Seri Numarası" üzerinden yapacağınızı diyorsunuz ama, örneğin "ANALİZ" butonuna bağlandığınız makrodaki SQL sorgusunda "KİMLİK" alanını kullanmaya çalışmışsınız ama UserForm üzerinde bununla ilgili bir TextBox ... falan bir nesne yok.

Bir de; şu TextBox'ların formatlanması olayı var .... Bence, Access dosyasındaki alanların veri tiplerini amaca uygun olarak düzgün bir şekilde seçtikten sonra, projenin tam olarak çalışacağına ikna olana kadar o tip makyaj işleriyle ilgilenmeyin. Makyajın en son yapılmasında fayda var diyor, TV programlarındaki uzmanlar .... malum, karantina döneminde ne denk gelirse onu seyrediyoruz TV'de artık....


Benden bu kadar .... kolay gelsin.

.
 

Ekli dosyalar

Son düzenleme:

furkani

Altın Üye
Katılım
24 Şubat 2020
Mesajlar
64
Excel Vers. ve Dili
Microsoft Office Standard 2019
Altın Üyelik Bitiş Tarihi
26-04-2025
Haluk Bey teşekkürler, access veri güncellemesini update metodu ile çözdüm.
En başta bahsettiğim ikinci ve son problem şu; accessden veri çağırırken boş hücrelerde hata veriyor (Invalid use of null). Aşağıda yer alan kodlarda nasıl bir düzenleme yapmam konusunda yardımcı olacak arkadaşlara şimdiden teşekkürler.

Kod:
Private Sub CommandButton3_Click()

Dim baglan As New Connection
Dim RS As New Recordset

baglan.Open "Provider=Microsoft.Ace.Oledb.12.0;data source=C:\Users\furkan.ipek\OneDrive\Masaüstü\denemedata.accdb;" & ";Jet OLEDB:Database Password=5858"
RS.Open "select * from NOHUT WHERE SERİNO ='" & Me.TextBox2.Text & "'", baglan, adOpenKeyset, adLockPessimistic

Me.ComboBox1.Text = RS.Fields(1)
Me.TextBox21.Text = RS.Fields(2)
Me.TextBox1.Text = RS.Fields(3)
Me.ComboBox3.Text = RS.Fields(5)
Me.ComboBox4.Text = RS.Fields(6)
Me.TextBox3.Text = RS.Fields(7)
Me.TextBox4.Text = RS.Fields(8)
Me.TextBox5.Text = RS.Fields(9)
Me.TextBox6.Text = RS.Fields(10)
Me.TextBox7.Text = RS.Fields(11)
Me.TextBox8.Text = RS.Fields(12)
Me.TextBox9.Text = RS.Fields(13)
Me.TextBox12.Text = RS.Fields(14)
Me.TextBox19.Text = RS.Fields(15)
Me.TextBox13.Text = RS.Fields(16)
Me.TextBox14.Text = RS.Fields(17)
Me.TextBox15.Text = RS.Fields(18)
Me.TextBox16.Text = RS.Fields(19)
Me.TextBox17.Text = RS.Fields(20)
Me.TextBox18.Text = RS.Fields(21)

RS.Close
baglan.Close

End Sub
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Şöyle olabilir....

Kod:
ComboBox1.Text = IIf(Not IsNull(RS.Fields(1)), RS.Fields(1), "")
.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,249
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sorgu satırınızı aşağıdaki gibi düzenleyerek boş olmayan kayıtlara odaklanabilirsiniz.

C++:
RS.Open "select * from NOHUT WHERE SERİNO ='" & Me.TextBox2.Text & "' And SERİNO Is Not Null", baglan, adOpenKeyset, adLockPessimistic
 

furkani

Altın Üye
Katılım
24 Şubat 2020
Mesajlar
64
Excel Vers. ve Dili
Microsoft Office Standard 2019
Altın Üyelik Bitiş Tarihi
26-04-2025
İki yolda ayrı ayrı işe yaradı. Çok teşekkür ederim, hayırlı iftarlar.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Kodunuza göre; önerdiğim IIF bloğunu yaklaşık 20 kere kullanmanız gerekiyor...

Bunun yerine; 8 . mesajda eklediğim "Telefon Defteri" projesinde olduğu gibi, Access dosyasında gerekli düzenlemeler yapılsa .... zaten ilk veri girişinde boş bırakılması istenmeyen alanlar hakkında kullanıcı otomatik olarak uyarılır ve boş bırakması engellenir. İlk veri girişinde boş bırakılması gereken alanlar eğer varsa, bu alanları sözkonusu düzenlemeden muaf tutabilirsiniz tabii...

Bu sayede, işin veri görüntüleme kısmına geçtiğinizde; bir sürü IIF bloğundan kurtulmuş olursunuz.

Bence o "Telefon Defteri" projesini biraz daha inceleyin ..... Örneğin, "Ad" kısmını doldurup, diğerlerini boş bırakarak kaydetmeye çalışın .... Kodlarda herhangibir IF bloğu olmamasına rağmen, kodlar sizi otomatik olarak uyaracaktır.

.
 
Katılım
9 Eylül 2010
Mesajlar
867
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Haluk hocam dosya için çok teşekkürler. Bu dosya üzerinden kendim yeni bir proje oluşturmaya çalışıyorum. Sormak istediğim bu userform açılışta excel gözükmese ve ben bu dosyayı ağda paylaşsam ağ üzerinden çoklu kullanıcı olarak accese veri kaydetmede bir sorun yaşar mıyız?
Ve exceli açışta 2. ve daha sonraki kullanıcılar açınca salt okunur uyarısını pasif edebilir miyiz
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@tukayf ;

Çoklu kullanıcılar aynı anda veri kaydetmeye çalıştığında birşeyler yolunda gitmeyecektir. Daha önce bir denemem olmadığı için birşey söylemiyorum ama, muhtemelen Access tablosuna ilk ulaşan kullanıcı başarılı bir şekilde bağlandıktan sonra tabloyu diğer kullanıcılara kilitlemek falan gerekecektir..... Google Sheets'de JScript ile çalışırken böyle yapılıyor.

VBA'de muhtemelen RS.LockType ile birşeyler yapmak gerekiyor ama emin değilim. Bu konuda @Zeki Gürsoy daha iyi birşeyler söyleyebilir.

Bu arada, Şark hizmeti bitti galiba .... :)

.
 
Katılım
9 Eylül 2010
Mesajlar
867
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Yanıt için çok teşekkürler hocam. Yarın büroda deneyip sonuçları paylaşırım.
Evet çok şükür bitirip döndük artık. Bundan sonra Muğla'ya yerlesene kadar Ankara'dayız.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@tukayf; Ankara'ya hoşgeldin...

Excel'deki Telefon defteriyle ilgili UserForm'u Word VBA'e kopyaladım, hem Excel'den hem de Word'den Access dosyasına bağlanıp, işlem yaptım. Bir sorun olmadan, her 2 taraftan da Access'e kayıt yapma, silme, güncelleme işleri gerçekleşti. Belki ihtiyaçlar doğrultusunda biraz revizyon yapmak gerekebilir. Çünkü bir taraf veri tabanında değişiklik yaptığında, kendisi bir işem yapana kadar diğer tarafın değişikliğini anında göremiyor, . Artık onu da geliştirmek isteyenler kendilerinin uğraşması gerekiyor....

.
 
Son düzenleme:
Katılım
9 Eylül 2010
Mesajlar
867
Excel Vers. ve Dili
2016&2019&2021 TR
Altın Üyelik Bitiş Tarihi
29-09-2023
Hoşbulduk hocam. Yardımlarınız için teşekkürler. Umarım çok büyük sorun çıkarmaz. Şimdilik anlık sorgulama yapacağımız işlerde gerek duymayacagiz. Hafta içi sorun çıkarırsa kesinlikle haberiniz olur 🤣
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,349
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Üst