ADO ile kayıt eklemeyi nasıl yapmam gerekir?

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,552
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Forum dostları ve değerli hocalarım;

İyi akşamlar. Oturduğum apartmanda hesap işleri inceleme ve denetimi, bu yıl da üzerimde kaldı.

Ekteki dosyanın "Gelirler" tablosuna, tablonun 1-43. satırlarındaki gibi sabit bilgileri, Aidat Avansı "AvAid" için 12 ay boyunca 516 satırı; Yakacak Avansı "AvYak" için 387 satırı, Demirbaş Avansları "AvDem"i için 215 satırı her ay tek tek girmek zorunda kalıyorum.

ADO ile Aidat, Yakacak ve Demirbaş avans kayıtlarını otomatik olarak tabloya aktarmak, işlerimi oldukça kolaylaştıracak...

Bu konuda yardımlarınızı bekliyorum. İlginiz ve katkılarınız için öncelikle teşekkürler eder, sevgi ve saygılarımı sunarım.
 
Son düzenleme:
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın assenucler,

ADO ile eklemek sorun değil ama sizin tablo yapınızda sorun var. Diğer bilgileri nasıl giriyorsunuz? Bunun dışında da çözümleriniz olabilir. Tabloları ayırmak, varsayılan değer kullanmak vs.
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,552
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Sn. Modalı;

Değerli hocam, nasıl bir yapı önerirsiniz?

Değindiğiniz konu hakkında, yetersiz bilgimle şu an bir fikir yürütmem mümkün değil.

Bilgi girişleri şu şekilde: İşletme projesi ile bütçelenen bir yıllık giderlerden, bir aya düşen miktar; her bir daire ya da dükkan ayrı bir bağımsız bölüm kabul edilerek, önce:

1- 65 YTL. tutarındaki aidat, Gelirler tablosuna BorçTarihi (Son Ödeme Tarihi) itibariyle "Ödeyeceği" alanına kaydedilmek suretiyle ilk kayıt oluşturuluyor. Daha sonra ödeme tarihi itibariyle de "Ödediği" alanına ikinci bir kayıt yapılıyor.

2- Yukarıdakine benzer şekilde Yakıt Giderleri, doğalgaz faturasının son ödeme tarihi dikkate alınarak "Ödeyeceği" alanına yazılarak ilk kayıt yapılıyor, daha sonra ödeme yapanlara makbuz kesilerek, kesilen makbuzdaki tahsil tarihine göre "Ödediği" alanına ikinci kayıt yapılıyor.

3- Demirbaş giderleri de, kararlaştırılan vade tarihine göre ilk olarak "Ödeyeceği" alanına, daha sonra da makbuz yada banka ekstresine göre "Ödediği" alanına ikinci kaydı yapılıyor.

Yolladığım dosyanın "Gelirler" tablosunda her iki kayıt işlemini, işlem sayısı az olsun diye, bilerek aynı satırda gösterdim.

Değerli hocam, eğer tablo yapısını değiştirmem gerekiyorsa, bu konudaki önerilerinizi öğrenmek isterim.

İyi akşamlar. Sevgi ve saygılar.
 
Son düzenleme:

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,552
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Lütfen yanıt ricasıyla;

Forum dostları ve hocalarım;

Hayırlı pazarlar. Gününüz aydın, keyfiniz yerinde ve neşeniz bol olsun.

Şu ana dek, ben kopyala yapıştır yaparak ve daha sonrada bir takım düzeltmeler yoluyla bir sonuca ulaşıyorum. Ancak, ADO yada başka bir yöntemle de yapılabilir mi? Merak ediyorum.

Sayın modalı dışında hiç bir yanıt alamadım. Anlaşılan konu forumdaşların ve hocalarımın dikkatini çekmedi...

Sevgi ve saygılar.
 
Son düzenleme:

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,552
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Merhabalar;

Günaydın. Olumlu olumsuz bir yanıt verecek, kimse yok mu?
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın assenucler,

Aşağıdaki bilgileri forumda bulunan ve Gülsüm tarafından eklenen kod deposu uygulamasından alıntıdır.

Bir de 0 olan alanların görünmemesi ile ilgili geri bildirim alamadım.


Bir Access 2000 dosyasını ilk oluşturduğunuzda referanslar listesinde geçerli olarak ADO (Microsoft Activex Data Objects 2.x Library) seçili geliyor. Office 2000 ilk kurulduğunda 2.1 sürümü görünüyor. Bu yazının yazıldığı sıralarda ADO'nun 2.5 sürümü epey yaygındı. (Fakat yazının yazıldığı bilgisayar her nasılsa bu yaygınlık alanı içerisinde yer almıyor.)
ADO, Microsoft'un sitesinden ücretsiz yüklenebiliyor. Veyahut MS'nin bazı kurulum paketlerinin içinde ADO'nun kurulum dosyası çıkabiliyor. Visual Studio 6.0 Service Pack 4 kurulum dosyaları arasında yer alıyor bu dosya. (PC Magazine Offline Ekim 2000 CD'sinde Visual Studio 6 SP4'ü bulabilirsiniz.)
ADO'nun kurulum dosyasının adı MDAC_TYP.EXE ve dosyanın büyüklüğü 8 mb. civarında. ADO kullandığınız projenizi dağıtmak istediğinizde bu kurulum dosyasını da vermeniz gerekebileceğini unutmayın. Tabii ki ücretsiz ve sınırsız dağıtılabilir.
'ADO da ne' diyenler için ADO'nun farklı uygulama geliştirme araçları tarafından ortak kullanılabilen bir veritabanı modülü olduğunu söyleyebilirim. Yaygın sistemlerin hemen hepsi diğer ortak modülleri kullanabildikleri gibi ADO'yu da kullanabilirler. ADO bize bir yerdeki veritabanına ulaşabilmemiz için kolaylıklar sağlıyor ve bizi bir yığın işten kurtarıyor. DAO' nun da (Data Access Objects) hakkını yemeyelim. ADO kadar yetenekli olmasa da veri işlemleri daha önce onunla yapılıyordu.
ADO'nun en büyük yeteneklerinden biri Internet veya yerel ağ ortamında bile SQL Server sunucusuna kolaylıkla bağlanabilmesi. Aynı makine üzerindeymiş gibi SQL Server'a istediğiniz birçok şeyi yaptırabiliyorsunuz. Fakat bu yazının konusu, DAO yerine ADO kullanmamız konusunda ısrar eden Access 2000'de ADO'nun nasıl kullanıldığı.
ADO gibi başka modeller de olduğunu hatırlatayım. Kısaca RDS, MSDE şeklinde adlandırılan benzer sistemler mevcut. İleriye dönük ve büyük projeler hazırlıyorsanız tez elden ADO'ya geçmenizi öneririm.
ADO İLE BAŞLANGIÇ
DAO'nun kolay nesnelerine yeterince alışmıştık.
Dim DB as Database
Dim Rs as Recordset
Set DB= CurrentDB()
Rs.FindFirst
Rs.FindNext
...
şeklindeki deyimler neredeyse tamamen değişti. Access'te, ASP'de ya da herhangi bir VBA platformunda ADO'yu aşağıda anlatıldığına benzer şekillerde kullanabilirsiniz.
ADO ile bir tabloyu kullanmak için aktif proje dosyasının Connection nesnesine bir başvuru yapılıyor.
Dim rs As New ADODB.Recordset
rs.Open "Table1", CurrentProject.Connection
Bir tabloyu ya da veri kümesini açmak ve kullanmak için eskiden olduğu gibi birçok alternatif var. Ama ADO'da bu alternatifleri biraz daha iyi bilmemiz gerekiyor.
KAYIT DEĞİŞİKLİKLERİ
Kayıt ekleme yapılabilmesi için tablo açılırken adLockOptimistic parametresi kullanılmalı.
rs.Open "Table1", CurrentProject.Connection, _
adOpenKeyset, adLockOptimistic
rs.AddNew
rs("Field1") = "Test"
rs("Field2") = 1234
rs.Update
Kayıt silme eskisi gibi:
rs.Delete
Kayıt değiştirmek için ise ADO'nun DAO'ya göre bir farkı var. Değişikliği yapmadan önce artık Edit metodu kullanılmıyor ve doğrudan değişikliğe geçiliyor.
rs.Open ...
rs("Field1") = "Test"
rs("Field2") = 1234
rs.Update
ADO İLE SQL KODU ÇALIŞTIRMAK
Artık Database nesnesi yerine Connection nesnesi kullanılıyor. Aktif dosyaya ulaşmak için CurrentProject.Connection deyimini kullanarak bir SQL kodunu çalıştırmayı (Execute) deneyin.
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
conn.Execute "UPDATE Table1 SET ad = 'deneme' WHERE (ID='1');"
ya da
CurrentProject.Connection.Execute "UPDATE Table1 SET ad = 'deneme' WHERE (ID='1');"
SQL İLE ARAMA YAPMAK
SQL kodu içinde arama yapmak için WHERE dışında LIKE deyiminin de kullanılabileceğini biliyorsunuzdur. Eskiden LIKE deyiminde metin alanlarında ayrıntılı arama için * işareti kullanılırdı. Şimdiyse bunun yerine % işareti kullanılıyor. (SELECT deyiminin yanında * işareti kullanılır. Bu değişiklik sadece LIKE deyimi için geçerli.)
Şu deyim ile bir SQL kodunu kayıt değişiklikleri yapılabilecek şekilde açabilirsiniz:
rs.Open "SELECT * FROM Table1 WHERE (AdiSoyadi Like 'A%'));", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
En sondaki adLockOptimistic deyimini adLockReadOnly yaparsanız kayıt kümesi sadece okunur olacaktır.
LIKE deyiminin yanındaki 'A%' ifadesi ile AdiSoyadi alanında 'A' ile başlayan kayıtlar seçiliyor. Değiştirip '[A-K,U-Z]%' şeklinde kullanmanız da mümkün. Yani hem A-K arası, hem de U-Z arası değerlerin olduğu kayıtlar elde ediliyor.
LIKE deyiminden sonra bir de şunu yazmayı deneyin:
'%A_[M,T]%'
Bu şekilde yapıldığında herhangi bir yerinde 'A' ve yanında herhangi bir karakter olup onun yanında da 'M' veya 'T' olan değerlerin bulunduğu kayıtlar listelenecektir. Mütevazi LIKE deyiminin eskiden kalma daha birçok yeteneği var. Buna ilk olarak Word6.0'da şahit olmuştum. LIKE ile ilgili arama yeteneklerini bir de Word2000'in Bul/Değiştir sayfasında görmelisiniz.
TABLO YA DA KAYIT KÜMESİ ÜZERİNDE ARAMA YAPMAK
Kayıt kümesinde arama yapmaktan kasıt, SQL kodu kullanmadan, elde ettiğimiz kayıt kümesi (RecordSet) açıldıktan sonra arama yapılması. Eskiden FindFirst, FindNext gibi komutlar kullanıyorduk. Bu komutların tümü Find adlı yeni komut altında toplanmış. Find komutu değişik parametreler alarak eski komutların işini yapabiliyor. Fakat alışkanlıklarımızı değiştirmeye zorlayarak.
Arama işlemini başlatmadan önce tabloda kayıt olup olmadığı kontrol ediliyor. Zira kayıt yoksa MOVEFIRST komutu hata verir. Zaten herhangi bir anda ilk kaydı bulmak için tablonun başına gidilmesi gerekli.
İlk kaydı bul (FindFirst):
rs.MoveFirst
rs.Find "Kriter", 0, adSearchForward
Sonrakini bul (FindNext):
rs.Find "Kriter", 1, adSearchForward
Öncekini bul (FindPrevious):
rs.Find "Kriter", 1, adSearchBackward
Son kaydı bul (FindLast):
rs.MoveLast
rs.Find "Kriter", 0, adSearchBackward
DAO'da kayıt bulunamadığında RecordSet nesnesine ait NoMatch özelliği kullanılabilirken ADO'da böyle bir özellik yok. Aradığınız kaydın bulunup bulunamadığını anlamak için, eğer ileri doğru arama yapıyorsanız kümenin sonunda (rs.EOF=True ? ) olup olmadığınızı, geri doğru arama yapıyorsanız kümenin başında (rs.BOF=True ? ) olup olmadığınızı kontrol etmelisiniz.
BOŞ KAYITLAR GELSİN
NULL deyimi boş değerleri yani 'hiçbir şey'i ifade ediyor. Eskiden bir veri alanının değerinin boş olup olmadığını bulmak için 'VeriAlani1 IS NULL' yazılıyordu. Ya da boş olmayan kayıtlar 'VeriAlani1 IS NOT NULL' ile listelenebiliyordu. ADO'nun SQL kodlarında ise bu deyimle beraber eşitlik işaretleri kullanılıyor.
'VeriAlani1 = NULL'
'VeriAlani1 <> NULL'
Son olarak NEW ya da CREATEOBJECT deyimi ile oluşturduğunuz Connection ve Recordset nesnelerini NOTHING ile silmeyi unutmayın.
Set rs = Nothing
Set conn = Nothing
ADO o kadar ayrıntılı ki tam olarak anlatana kadar neredeyse bir dergi dolusu yazı çıkar.
Eğer projenizde kod yazmıyorsanız ya da yazdığınız kodlarda ADO'yu kullanmıyorsanız referanslar listesinden ADO'yu kaldırabilirsiniz. Herhangi bir modül sayfası açıkken Tools/References (Araçlar/Başvurular) menüsünü kullanarak.
Bir tabloyu sadece okunabilir olarak açmak:
rs.Open "Table1", CurrentProject.Connection, adOpenKeyset, adLockReadOnly
Bir tabloyu kayıt ekleme, silme ya da değiştirme için açmak:
rs.Open "Table1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Sadece okunabilir bir SQL kodu açmak:
rs.Open "SELECT * FROM Table1 WHERE ...", CurrentProject.Connection, adOpenKeyset,
adLockReadOnly
Kayıt eklenebilecek, silinebilecek ya da değiştirilebilecek şekilde bir SQL kodu açmak:
rs.Open "SELECT * FROM Table1 WHERE ...", CurrentProject.Connection, adOpenKeyset,
adLockOptimistic
Dim rs as New ADODB.Recordset
rs.Open "Kisiler", CurrentProject.Connection, _
adOpenKeyset, adLockOptimistic
If rs.EOF = True Then
MsgBox "Tabloda kayıt yok."
Else
rs.MoveFirst
rs.Find Kriter, 0
'Eski FindFirst ile aynı.
If rs.EOF = True Then
MsgBox "Kayıt bulunamadı."
Else
'Tüm kayıtları sırayla bul ve mesaj göster.
Do While Not rs.EOF
MsgBox "Kayıt bulundu." & vbCr & vbCr & _
rs("ID") & " " & rs("Ad") & " " & rs("Soyad")
'Sonraki kayıttan itibaren tekrar ara.
rs.Find Kriter, 1
Loop
End If
End If
rs.Close
Set rs = Nothing
 
Katılım
16 Kasım 2005
Mesajlar
1,090
Excel Vers. ve Dili
Access 2002
s&#252;per anlat&#305;m eme&#287;inize sa&#287;l&#305;k hocam..
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,552
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Altın Üyelik Bitiş Tarihi
29-05-2025
Sn. Modalı hocam;

Formda 0 kalanlı işlemle ilgili soruma verdiğiniz ayrıntılı yanıta rağmen, doğru sonuca ulaşamayınca, mahcup oldum ve size yazmaya cesaret edemedim.

Aslında dediklerinizi ilk metin kutusu için yaptıktan sonra, diğer metin kutularına tıklayıp biçim yapıştır yapmak isteyince, sırasıyla tıkladığım 2.,3., vb. metin kutu denetimlerinde kilitlenme oldu ve biçim yapıştırıcısı çalışmadı.

Yanıtta geciktiğim için kusura bakmayınız, hocam.

Bizim gibi amatörler, sitemiz büyük bir kütüphane olmasına karşın; neyi, ne zaman ve nasıl kullanacağımızı bilemiyoruz veya karıştırıyoruz. Sizin gibi değerli hocalarımızı önemsiz konular için dahi boşu boşuna uğraştırıyoruz.

Verdiğiniz yanıt ile beni mest ettiniz, en içten teşekkürlerimi, sevgi ve saygılarımı sunarım.
 
Üst