Excel - Mdb ilişki kurma hakkında

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Arkadaslar iyi hafta sonları,

Access ile çalışmam gerekti ve bu konuda bilgi sahibi değilm.Eğer vakit ayırırsanız bir çalışma hazırlamama yardımcı olurmusunuz.

"\\WordPro\Cyber\Nos\Kg\PRg\340.mdb"

Yukarıdaki *.mdb dosya için hazırlamayı düşündüğüm 2 çalışma yapmak istiyorum.(arayüz olarak *.xls dosyası kullanmak istiyorum )

Planlanan 1. çalışma :Rastgele ( Table adı REHBER ) 100 veya 200 ( sayısını kendımızın belirleyebilceği ) veri çekmek istiyorum.*.mdb dosyasından bu veriler çekilirken ( E kolonumu demem lazım tam bilemiyorum yada 5 kolon mu ) çektiği verilerin 5 kolondaki satılarına *.mdb dosyasının içerisine "alındı" yazdırmak istiyorum.Daha sonra yapacagım calismalarda tekrar rastgele veri almak istedğimde "alındı" lar harıcınde veri çekmek istiyorum.

Mümkümmüdür mümkün ise bir örnek çalışma paylaşabilirmisiniz.

Planlanan 2. çalışma : C kolonu (mu demen gerekir yada 3 kolon mu bilemiyorum) içinde Rkb , Rtb ,Acd geçen ( Kendımızın Tanımlayabilceği dongu kurulabilcek bir mantıkta listbox'a eklendikten sonra aratılacak ürün kodlarını )

Excele aktarmak istiyorum

Bu iki çalışmayı da aynı anda kullanabilmem mumkummudur.Yoksa sadece bagımsız mı çalışıtırabilirim.

Umarım anlatabilmişimdir.

Bu konuda örnek çalışmalarınızla bana ışık tutabilirmisiniz.
 
Son düzenleme:

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
İyi hafta sonları,

Açmış oldugum konu hakkında bilgi sahibi olan yada benzer bir çalışması olan arkadaslar konu hakkında bilgi paylaşabilirmisiniz.

Teşekkurler.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
340.mdb adlı dosyanın "RAKKAS" adlı tablosu ile ilgilendiğimizi varsayalım.

"RAKKAS" adlı table'in yapısı şu şekilde olsun ...

Sutun1 : Veri tipi, Önemli Değil
Sutun2 : Veri tipi, Önemli Değil
Sutun3 : Veri tipi, Önemli Değil
Sutun4 : Veri tipi, Önemli Değil
Sutun5 : Veri Tipi : Metin (En az 6 karakteri alacak şekilde)
Sutun6 : Veri tipi, Önemli değil
......
......

Bu şekilde bir yapı ile; aşağıdaki Excele_Getir makrosunu çalıştırırsanız, aktif Çalışma kitabının görünen sayfasının ilk hücresinden itibaren, rastgele çekilen kayıtları görebilirsiniz.

Kod:
Option Explicit
[COLOR=darkgreen]'Önce projenize, Microsoft Activex Data Object X.X referansını ekleyiniz.[/COLOR]
Sub Excele_Getir()
[COLOR=darkgreen] 'Siz bu parametreyi kendinize göre ayarlayınız.[/COLOR]
[COLOR=darkgreen] 'veya bir inputbox'dan da alabilirsiniz.[/COLOR]
    MDB_Dosyadan_Rastgele_Veri_Cek (100) [COLOR=darkolivegreen]'100 sayısı çekilecek kayıt sayısını belirler.[/COLOR]
End Sub
Yukarıdaki kod, aşağıdaki özel prosedürü çalıştırır. Siz bu kısmı kendinize adapte ediniz.

Kod:
Private Sub MDB_Dosyadan_Rastgele_Veri_Cek(lCekilecek_Kayit_Sayisi As Long)
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sql As String
    Dim iStr As Integer
    Dim lKayitNo As Long
    Dim j%, x%
[COLOR=darkgreen] 'Çekilecek kayıt sayısının kontrolü[/COLOR]
    If lCekilecek_Kayit_Sayisi = 0 Then
        MsgBox "Rastgele çekilecek kayıt sayısı belirlenmedi", vbCritical, "Uyarı"
        Exit Sub
    End If
 
[COLOR=darkgreen] 'Veritabanına yeni bir bağlantı yaratılıyor[/COLOR]
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                          "Data Source=\\WordPro\Cyber\Nos\Kg\PRg\340.mdb;" & _
                          "User Id=admin;" & _
                          "Password=;"
    cn.Open
 
[COLOR=darkgreen] 'Excel sayfasına yazma için başlangıç satırı[/COLOR]
    iStr = 1
 
[COLOR=darkgreen] 'Sorgu cümleciği yapılandırılyor[/COLOR]
    sql = "SELECT * FROM RAKKAS WHERE Sutun5 IS NULL OR Sutun5<>" & "'Alındı'"
 
[COLOR=darkgreen] 'Yeni bir RecordSet (Kayit listesi) nesnesi oluşturuluyor[/COLOR]
    Set rs = New ADODB.Recordset
 
[COLOR=darkgreen] 'Recordset sorguya göre dolduruluyor[/COLOR]
    rs.Open sql, coN, adOpenKeyset, adLockOptimistic
 
[COLOR=darkgreen] 'Eğer Recordsetteki kayıt sayısı 0 ise[/COLOR]
    If rs.RecordCount = 0 Then
        MsgBox "Tüm kayıtlar daha önce alındı", vbCritical, "Uyarı"
        GoTo cikis
    End If
 
[COLOR=darkgreen] 'Eğer Recordsetteki kayıt sayısı, çekilecek kayıt sayısından büyük veya eşitse[/COLOR]
    If rs.RecordCount >= lCekilecek_Kayit_Sayisi Then
 
        For j = 1 To lCekilecek_Kayit_Sayisi
 
[COLOR=darkgreen]         'Sorguyu yenile[/COLOR]
            rs.Requery
 
[COLOR=darkgreen]         'Recorsetteki kayıtsayısın göre Rassal bir sayı üret[/COLOR]
            Randomize: lKayitNo = CLng(Rnd() * rs.RecordCount)
            If lKayitNo = 0 Then lKayitNo = lKayitNo + 1
 
[COLOR=darkgreen]         'Recordset cursor'ını, rassal sayıya göre belirlenen index'e yerleştir[/COLOR]
            rs.Move (lKayitNo - 1)
 
[COLOR=darkgreen]         'Cursor'ın üzerinde bulunduğu kaydı, sayfaya aktar[/COLOR]
            For x = 0 To rs.Fields.Count - 1
                Cells(iStr, x + 1) = rs.Fields(x).Value
            Next
 
[COLOR=darkgreen]         'Excel sayfasına yazdırılan kaydı, VT'de Alındı olarak işaretle[/COLOR]
            rs.Update "SUTUN5", "Alındı"
 
[COLOR=darkgreen]         'Sonraki kaydı sayfaya yazmak için yeni bir satır oluştur[/COLOR]
            iStr = iStr + 1
 
        Next j
 
[COLOR=darkgreen] 'Eğer Recordsetteki kayıt sayısı, çekilecek kayıt sayısından azsa[/COLOR]
    Else
[COLOR=darkgreen]     'Recordset'tekitüm kayıtları getir[/COLOR]
        Do Until rs.EOF
[COLOR=darkgreen]         'Sayfaya yazma[/COLOR]
            For x = 0 To rs.Fields.Count - 1
                Cells(iStr, x + 1) = rs.Fields(x).Value
            Next
[COLOR=darkgreen]         'Yeni satır oluşturma[/COLOR]
            iStr = iStr + 1
 
[COLOR=darkgreen]         'Alınan kaydı işaretleme[/COLOR]
            rs.Update "SUTUN5", "Alındı"
 
[COLOR=darkgreen]         'bir sonraki kayda geçme[/COLOR]
            rs.MoveNext
        Loop
 
    End If
cikis:
 
    cn.Close:   rs.Close
    Set cn = Nothing
    Set rs = Nothing
End Sub
 
Son düzenleme:

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Ferhat hocam iyi geceler,

Yar&#305;n sabah kodlar&#305; deneyece&#287;im.&#350;imdiden te&#351;ekkurler.
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Ferhat Bey,

Kod:
'Recordset sorguya g&#246;re dolduruluyor
    rs.Open sql, [b]coN[/b], adOpenKeyset, adLockOptimistic
Yukar&#305;daki kodda hata al&#305;yorum.

HATA:Veriable Not Defined

Acaba coN diye bir de&#287;i&#351;kenin yukar&#305;da tan&#305;mlanmamas&#305;m&#305;d&#305;r.Yada de&#287;ilse Nas&#305;l d&#252;zeltebiliriz.

Te&#351;ekkurler
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Evet dedi&#287;iniz gibidir. Ben size uyarlarken, coN ad&#305;n&#305; de&#287;i&#351;tirmeyi unutmu&#351;um. Do&#287;rusu &#351;u &#351;ekilde :

rs.Open sql, cn, adOpenKeyset, adLockOptimistic
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Ferhat Bey,

A&#351;ag&#305;daki hatay&#305; almaktay&#305;m;

Run-Time error '-214217904 ( 80040e10 )';

No value given for one more required parameters


Bu konuda da yard&#305;mc&#305; olabilirmisiniz.

Te&#351;ekkurler.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Sn.Rakkas

Bu hatayla daha &#246;nce hi&#231; kar&#351;&#305;la&#351;mad&#305;m ama hatan&#305;n hangi sat&#305;rda olu&#351;tu&#287;unu belirtirseniz, sorununuzun daha a&#231;&#305;k olaca&#287;&#305;na eminim.

&#304;ki nedenden kaynaklanabilece&#287;ini d&#252;&#351;&#252;n&#252;yorum. Ya connection'da (ba&#287;lant&#305;'da) ya da record set (kay&#305;t k&#252;mesi) olu&#351;turmada bu hata ile kar&#351;&#305;la&#351;abilirsiniz.
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Ferhat hocam iyi geceler,

Evet dedi&#287;iniz gibi Record ( Id ) verilmedi&#287;inden olsa gerek Id verince sorun &#231;&#246;z&#252;ld&#252;.

Tekrar tekrar te&#351;ekkurler.
 
Üst