PDA

Orijinalini görmek için tıklayınız : (MDB ve EXCEL) MDB ve Excel İlişkisi



17.04.2006, 15:09
Set baglan = New ADODB.Connection
baglan.Open "Driver={Microsoft Excel Driver (*.xls)}; DBQ=" & "C:\ExceldenExcele\Veritabani.xls;Readonly=True"
Set kayit = New ADODB.Recordset
Nsql = "SELECT * FROM [Veritabani$]"
kayit.Open Nsql, baglan, 1, 3
kayit.MoveFirst

ListBox1.Clear
Do While Not kayit.EOF
ListBox1.AddItem kayit!AdiSoyadi
kayit.MoveNext
Loop

Set kayit = Nothing
baglan.Close


Set kayit = New ADODB.Recordset
Nsql = "SELECT * FROM [Veritabani$] Where AdiSoyadi='" & TextBox1 & "'"
kayit.Open Nsql, baglan, 1, 3

Set adoCN = CreateObject("ADODB.Connection")

DatabasePath = "\\10.1.2.11\ortakdosyalar\GörevTakip2.mdb"

If Dir(DatabasePath) = "" Then
MsgBox DatabasePath & " bulunamadı, programdan çıkılacak !", vbCritical, "Acente2006"
GoTo SONLAN
Unload Me
End If
adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
adoCN.ConnectionString = DatabasePath
adoCN.Open
Set RS = CreateObject("ADODB.recordset")
On Error GoTo yok:

strSQL = "SELECT * FROM [tbl_g_ambar] ORDER BY No"

RS.Open strSQL, adoCN, 2, 3
RS.MoveFirst

Do While Not RS.EOF
lst_gorev.AddItem RS("No")
RS.MoveNext
Loop
Ben Access veritabanı ile Excel userform arasında okuma-yazma yapacağım.

1. Yukarıdaki kodlardaki Nsql ve strSQL satırlarını açıklarmısınız ?
2. Accesse kayıt yaparken son satıra kayıt nasıl yapılıyor ?
3. Do While Not RS.EOF ne demek ?
4. adoCN.Provider = "Microsoft.Jet.OLEDB.4.0" anlamı nedir ?
5. baglan.Open "Driver={Microsoft Excel Driver (*.xls)}; DBQ=" & "C:\ExceldenExcele\Veritabani.xls;Readonly=True" bu satırı açıklarmısınız ?
6. RS.Open strSQL, adoCN, 2, 3 burada 2.sütundan başlayıp 3 sütun yani 2-3-4. sütunlar için mi işlem yap deniyor ? Eğer ben 2-6-10. sütunlar için işlem yapmak istesem nasıl bir şey yazmam gerek ?
7. Bir önceki soru ile bağlantılı olrak, veritabanına kayıt ederken veya kayıt okurken farklı bişey mi yazacağım?
8. Birebir aynı olan bir çok veritabanından veri alıp göndereceğim. Her biri için tektek kod mu yazmam gerek. Bunu bir Makro ile nasıl yapabilirim.
9. Kayıt yaparken bazı sütunlar otomatik tarih ve saat olarak doldurulacak. Yani userform üzerinden böyle bir veri girilmeyecek. Kayıt Et dediğimde ilgi sütunlarla beraber tarih-saat sütunları da kendiliğinden nasıl yazılacak? Ayrıca bu tarih-saat veritabanının tutulduğu bilgisayarla aynı olmalı.
10. Aynı Access dosyasını bir çok kullanıcı veritabanı olrak kullanacak. Her bir kullanıcı farklı tablolara kayıt yapacak. Ancak kayıt numaraları sıralı olmak zorunda. Yani A kullanıcısın yaptığı 155 nolu kayıttan sonra B kullanıcısı yeni kayıt yaptığında 156 nolu olarak kaydedilsin istiyorum. Bunu nasıl çözerim ?

Tüm sorularımı aynı başlık altında toplayayım dedim. Eğer karışık görünecekse tek tek de sorabilirim.

Muhammet AYTAŞ
17.04.2006, 18:09
Tüm sorularımı aynı başlık altında toplayayım dedim.

Mrb, En iyisini yapmışsınız.
Şu an paydos etmek üzereyim.
Eğer zaman ayıran başka arkadaş çıkmazsa evden yardımcı omaya çalışırım.

17.04.2006, 18:18
Muhammed Hocam, ilginiz için teşekkürler.
Aslında sorularım çok da belki bunları anlayınca ben bir kısmını kendim de anlarım dedim. Bu arada internetten bazı SQL komutları felan da buldum. Tabi anlamak da zorluk çekiyorum.
29 Kasım 2004 de M.Temel hocamla ilk görüşmem de exceli bildiğimi ama bir yerde takıldım yapamadım anlamında bir şeyler söylemiştim. O tarihten bu yana çok şeyler öğrendim sizlerin sayesinde. Ve şimdi diyorum ki; "ben exceli bilmiyorum"

Şu anda peşinen diyorum. Ben access, mdb-excel ilişkisini, Sql komutlarını bilmiyorum.

Forumdaki Access-ADO-Sql konularını 2 gündür allak bullak ettim. Yardımcı olacak herkese teşekkür ederim.

Saygılarımla.

M. Temel Korkmaz
17.04.2006, 18:41
Burada 2 husus var.

1. Husus: Ben bu yazılanları açıklarsam sayfalar tutar. Yani bana göre sorular değil bunlar.

2. Husus: Siz zaten Access ile ilgili bir şey sormamışsınız aslında. Excel ve MDB ilişkisi söz konusu.

Haydi hayırlı olsun. Kusuruma bakmazsınız umarım.

17.04.2006, 19:04
Kusuruma bakmazsınız umarım.
Asıl siz kusura bakmayın.
Daha neyi bilmediğimi bile ifade edemiyorum.

Salih Koca
17.04.2006, 20:34
Merhaba Ömer Faruk hocam.

Muhammed hocamın da belirttiği gibi her biri başlıbaşına çok uzun cevaplar gerektiren sorular. Ben bildiğim kadarıyla kısa yanıtlar vermeye çalışacağım.


1. Yukarıdaki kodlardaki Nsql ve strSQL satırlarını açıklarmısınız ?
Dikkat ederseniz bunların her ikisi de string türünden değişkenler. Ve vermiş olduğunuz iki kodda farklı isimlerle kullanılmışlar, yani her ikisi de aynı şey. Yaptığı işe gelince; veritabanına bağlanırken sizin belirttiğiniz kritere göre kayıtları seçiyor.
Nsql = "SELECT * FROM [Veritabani$]" satırı ile Veritabani isimli tabloda bütün alanlardaki bütün verilerin seçileceği (sonuç kümesine ekleneceği) belirtiliyor. Access'de tasarım görünümünde sorguları karıştırırsanız bu kodların demek istediklerini daha iyi anlarsınız.


2. Accesse kayıt yaparken son satıra kayıt nasıl yapılıyor ?
Sanıyorum burada yanlış bir tasviriniz var. Access'de son satır var ise bu satıra ait veri de vardır, dolayısı ile bu satır doludur. Yeni bir kayıt eklemeyi kastediyorsanız bu durumda kayıt eklemeye ilişkin komutu kullanmalısınız ki bu Add komutudur. Sayın hocamın örneklerinde bu şekilde olanları da bulabilirsiniz.


3. Do While Not RS.EOF ne demek ?
EOF teriminin açılımı "End Of File"dir ki Türkçesi Dosya Sonu demektir. Ascii kümesinde yer alan bir karakterdir ve veri kümesinin bittiğini, yani dosyanın sonuna gelindiğini belirtir. Sizin verdiğiniz kodda şu şekilde denilmektedir : Eğer dosyanın sonuna gelmediysen (hala son kayıdı geçmediysen) devam et.


4. adoCN.Provider = "Microsoft.Jet.OLEDB.4.0" anlamı nedir ?
ADO bağlantı sağlayıcınızın türü belirtiliyor. Jet, MS'e özgü bir bağlantı sağlama yolu.


5. baglan.Open "Driver={Microsoft Excel Driver (*.xls)}; DBQ=" & "C:\ExceldenExcele\Veritabani.xls;Readonly=True" bu satırı açıklarmısınız ?

6. RS.Open strSQL, adoCN, 2, 3 burada 2.sütundan başlayıp 3 sütun yani 2-3-4. sütunlar için mi işlem yap deniyor ? Eğer ben 2-6-10. sütunlar için işlem yapmak istesem nasıl bir şey yazmam gerek ?
:roll:


7. Bir önceki soru ile bağlantılı olrak, veritabanına kayıt ederken veya kayıt okurken farklı bişey mi yazacağım?
Evet yapmak istediğiniz her işlem için faklı komut kullanacaksınız. Update, Delete, Add vb...


8. Birebir aynı olan bir çok veritabanından veri alıp göndereceğim. Her biri için tektek kod mu yazmam gerek. Bunu bir Makro ile nasıl yapabilirim.
İlk sorunuzda yer alan metinsel ifadeyi parametrik hale getirerek yapabilirsiniz.

9. Kayıt yaparken bazı sütunlar otomatik tarih ve saat olarak doldurulacak. Yani userform üzerinden böyle bir veri girilmeyecek. Kayıt Et dediğimde ilgi sütunlarla beraber tarih-saat sütunları da kendiliğinden nasıl yazılacak? Ayrıca bu tarih-saat veritabanının tutulduğu bilgisayarla aynı olmalı.
Anlamadım.

10. Aynı Access dosyasını bir çok kullanıcı veritabanı olrak kullanacak. Her bir kullanıcı farklı tablolara kayıt yapacak. Ancak kayıt numaraları sıralı olmak zorunda. Yani A kullanıcısın yaptığı 155 nolu kayıttan sonra B kullanıcısı yeni kayıt yaptığında 156 nolu olarak kaydedilsin istiyorum. Bunu nasıl çözerim ?
Access zaten size bu imkanı sağlıyor. Veritabanınızı Access ile açıp bağlanacak kullanıcıları ve parolalarını tanımlayıp her bir kullanıcı düzeyinde yetkilendirme yapabilirsiniz.

17.04.2006, 20:50
Teşekkürler Salih Hocam.
Anlaşılmayan noktaları izah edeyim dedim.
RS.Open strSQL, adoCN, 2, 3
bu satırın anlamı nedir ? Benzer bazı kodlarda bu satırı
RS.Open strSQL, adoCN, 1, 3 şeklinde gördüm. Farkı anlamadım ?

9 ve 10 u birleştirerek sorayım.
mdb dosyam server üzerinde. Kullanıcılar kendi bilgisayarlarındaki excel dosyasından ulaşacaklar. Program bir kayıt defteri aslında. Kayıt yapılıyorken kaydın tarih ve saatinin doğru yapılabilmesi için servera ait tarih ve saati kullanmak daha doğru olur kanaatindeyim. Bundan ötürü de excel dosyalarından yeni kayıtlar servera gönderilirken, her yeni kaydın ilgili kolonuna o kaydın tarih ve saatini access kendisi otomatik yapabilir mi ?
10.sorudaki GörevNo olayı da bunun benzeri. 10 tablom var diyelim mdb dosyamda. Her kullanıcı kendi tablosuna kayıt yapıyor. Ama her yeni kayıt yapılıyorken, bu tablolardaki görevno sütunlarına bakıp buralardaki sonkayıtların görevnolarından en büyük olanın bir fazlasını yeni kayda vermeli. Access bunu otomatik yapabilir mi? Eğer olmuyorsa ben her kayıttan önce tabloları tarayarak son kayıtların görev nolarından en büyük olanını alıp yeni kaydın görevnosunu hesaplayarak yazdıracam.
İnşallah bu sefer anlatabilmişimdir.

abdi
17.04.2006, 21:40
Sayın Hocam accesde kayıt_tarihi adlı bir alan yaratarak sizin için bu kodu oluşturdum form her açıldığında veya yeni kayıt eklerken bu alan otomatik olarak sistemin saatini yazıyor
bu arada formun kayıt tarihi alanını özelliklerini belirtirken türü metin olarak seçmeyi unutmayın derim ben ve veri uzunluğunu 40 olarak ayarlayın

bunu accesdeki formun vba daki kod sayfasına yazıyoruz

Private Sub Form_Load()
Dim i As String
i = Format(Date, "dd.mm.yyyy ") & Format(Date, "dddd") & Format(Time, " hh:mm:nn")
kayıt_Tarihi.Value = Date

kayıt_Tarihi.Value = i

kayıt_Tarihi.Value = i 'Format(Date, "dd.mm.yyyy") & Format(Date, "dddd") & Format(Time, "hh:mm:nn")
Debug.Print kayıt_Tarihi

End Sub

Kayıt Tarihi adlı alana girildiğinde


Private Sub kayıt_Tarihi_Enter()

i = Format(Date, "dd.mm.yyyy ") & Format(Date, "dddd") & Format(Time, " hh:mm:nn")
kayıt_Tarihi.Value = Date

kayıt_Tarihi.Value = i
End Sub



bi deneyin derim
isterseniz oluşturduğum acces table nı mail atabilirim

Saygılar sunar çalışmalarınızda başarılar Dilerim

Muhammet AYTAŞ
17.04.2006, 22:10
Mrb...
İş çıkışından sonra yemek yiyip PC'ye oturana kadar sorular zaten cevaplarını bulmuş.
İyi de olmuş, bu zahmetten kurtulmuş olduk :roll: .

Sadece Salih Hoca'nın belki de farkında olmadan atladığı 5. ve 6. maddeleri cevaplamaya çalışayım, kalan maddeler zaten cevaplanmış.


5. baglan.Open "Driver={Microsoft Excel Driver (*.xls)}; DBQ=" & "C:\ExceldenExcele\Veritabani.xls;Readonly=True" bu satırı açıklarmısınız ?
Excel ODBC sürücüsüne bağlan, dosya yolu, bağlantıyı SaltOkunur aç, yani sadece okumak için, kayıt eklenemez.


6. RS.Open strSQL, adoCN, 2, 3 burada 2.sütundan başlayıp 3 sütun yani 2-3-4. sütunlar için mi işlem yap deniyor ? Eğer ben 2-6-10. sütunlar için işlem yapmak istesem nasıl bir şey yazmam gerek ?
Hayır.
adoCN=bağlantı nesnesi,
2=> kayıt setinin okunabilme tütü => adOpenDynamic
adOpenDynamic => Ayni anda başka kullanıcılşarın da bağlandığı veritabanında yapılan değişiklikler tüm kullanıcıların kayıt setlerinde güncellenir.
3=> kayıt setinin yazılabilme türü => adLockOptimistic
adLockOptimistic => Kayıt seti kilitli değil, yani veritabanında kayıt ekleme, silme değiştirme gibi işlemler yapabiliriz.

18.04.2006, 08:22
Arkadaşlar, hepinize teşekkür ederim.