ADO'da uzman arkadaşlar yardım

Katılım
2 Temmuz 2007
Mesajlar
58
Excel Vers. ve Dili
Excel 2003
Sevgili arkadaşlar ADO konusunda yeni olduğum için, içinden çıkamadığım bir problem konusunda sizlerden yardım rica ediyorum.

Problemim tablodan tabloya koşullu veri aktarma.Forumda ve internet üzerinde bu konuda bir çok arama yaptım fakat benim istediğim sonuca ulaşamadım.

Sorunumu kısaca özetleyecek olursam şöyle.Örnekteki dosyamda göreceğiniz üzere benim 3 ad.Tablom var.Table1 deki bilgileri ADO'yla Table3 göndermek istiyorum. Table1'deki gonder komutu birbirine ilişkilendirilen table2 ve table3 tablolarında yeni kayıt yaratıyor.Benim istediğim ise Table1'deki durumu 2 olan billgileri table3' alt tablosunu göndermek.Üst Tablodaki Table2'deki bilgileri ben kendim gireceğim.Bunun için ADO da koşullu sorgu yaratamadım.Belki derdime derman olur diye bir çok strSql örneğine de baktım fakat bir sonuç elde edemedim.Bu konuda tıkandım.ADO konusunda uzman arkadaşlar yol gösterir yardım ederlerse çok sevinirim.

Teşekkürler.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,049
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba;

Aşağıdaki kodla Table1'deki durumu 2 olan billgileri table3' tablosuna gönderebilirsiniz,

Yalnız Table2 deki idno alanındaki ilişkiyi anlamadım,
bu ilişkiyi anlatırsan onuda çözeriz diye düşünüyorum.

Kod:
Private Sub Gonder_Click()
Dim db As Database
Dim MyRs As Recordset
Dim Rs2 As Recordset
Dim Rs3 As Recordset

Set db = CurrentDb()

Set Rs2 = db.OpenRecordset("Select * from [Table2]")
Set Rs3 = db.OpenRecordset("Select * from [Table3]")
 Set MyRs = db.OpenRecordset("Select * from [Table1] where [Durum]=2")

         If MyRs.RecordCount > 0 Then
                     
             MyRs.MoveFirst
             
                 Do Until MyRs.EOF
                 
                ' ' ' ' ' '  ' ' ' ' ' '   ' ' ' ' ' '   ' ' ' ' ' '
             With Rs3
                
                .MoveLast
                .AddNew
            
                Rs3("MalzmeNo") = MyRs("MalzmeNo")
                Rs3("MalzemeAdı") = MyRs("MalzemeAdı")
                
               .Update
                
             End With
              
                 ' ' ' ' ' '  ' ' ' ' ' '   ' ' ' ' ' '   ' ' ' ' ' '
               With Rs2
                .MoveLast
                  .AddNew
                
                Rs2("Duzenleyen") = "Ali"
                
                .Update
                
               End With
                ' ' ' ' ' '  ' ' ' ' ' '   ' ' ' ' ' '   ' ' ' ' ' '
                  
           MyRs.MoveNext
           
           Loop
   
       End If
  
MyRs.Close
Rs3.Close
Rs2.Close

End Sub
 
Katılım
3 Nisan 2007
Mesajlar
235
Excel Vers. ve Dili
2003 TR
SELECT Table1.Durum, Table1.MalzmeNo, Table1.MalzemeAdı
FROM Table1 INNER JOIN Table3 ON Table1.id = Table3.id
WHERE (((Table1.Durum)=2));
 
Katılım
2 Temmuz 2007
Mesajlar
58
Excel Vers. ve Dili
Excel 2003
Sayın Tamer42 ilginlendiğiniz için çok teşekkür ederim.Vermiş olduğunuz komutlar benim işimin %90 halletti. Ama bir yerde eksik var.Table2 ile Table3 tabloları birbiriyle ilişkili.Table1deki bilgileri Table2 ve Table3 gonderdikten sonra Form2'yi açtığım zaman altformda Table1'den göndermiş olduğumuz bilgileri göremiyorum.Bunun sebebinin ise birbiriyle ilişkili olan idno'ların aynı olmamasından kaynaklanıyor.Table2'deki idno ile Table3'deki id2 aynı olmaları gerekiyor.Ben ilk göndermiş olduğum komutlarda bunu belirtmiştim.Eğer Table2'deki ve Table3'deki idno ve id2 eşitlersek tablolar birbirine bağlanacak ve ben form2'yi açtığım zaman altformda göndermiş olduğum bilgileri görücem.

Teşekkürler.
 
Katılım
2 Temmuz 2007
Mesajlar
58
Excel Vers. ve Dili
Excel 2003
Kendimce aşağıdaki komutları yazınca istediğim oldu fakat mantık doğrumu değilmi bilmiyorum.Bu komutlarla devam edeyimmi başka tavsiyesi olan arkadaşlar varmı?

Teşekkürler.


Private Sub Gonder_Click()
Dim rs As New ADODB.Recordset
Dim db As Database
Dim MyRs As Recordset
Dim Rs3 As Recordset

rs.Open "Table2", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.AddNew
rs("Duzenleyen") = "Ali"
rs.Update



Set db = CurrentDb()

Set Rs3 = db.OpenRecordset("Select * from [Table3]")
Set MyRs = db.OpenRecordset("Select * from [Table1] where [Durum]=2")

' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '

If MyRs.RecordCount > 0 Then

MyRs.MoveFirst

Do Until MyRs.EOF

' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
With Rs3

.MoveLast
.AddNew

Rs3("MalzmeNo") = MyRs("MalzmeNo")
Rs3("MalzemeAdı") = MyRs("MalzemeAdı")
Rs3("id2") = rs("idno")
.Update

End With

MyRs.MoveNext

Loop

End If

MyRs.Close
Rs3.Close
rs.Close

End Sub
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın jeday_jey,

Aynı form içinde hem DAO hem de ADO kullanıyorsunuz. Bu sorunlara neden olur:

ADO ile tablo açmak:

Kod:
Dim rs As New ADODB.Recordset
Dim rs1 As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset

rs.Open "Table1", CurrentProject.Connection,adOpenKeyset, adLockOptimistic
rs1.Open "SELECT * FROM Table3;", 
rs2.Open "SELECT * FROM Table1 WHERE [Durum]=2;",

Diğer kodlarda hata yok sanırım.

En alta ise:

Kod:
rs.Close
rs1.Close
rs2.Close
 
Set rs= Nothing
Set rs1= Nothing
Set rs2= Nothing
Nothing li satırları yazmasanızda olur. Ancak bu işlem bilgisayar hafızasına kaydedilen verileri siliyor.

İyi çalışmalar
 
Katılım
2 Temmuz 2007
Mesajlar
58
Excel Vers. ve Dili
Excel 2003
Sayın modalı cevabınız için teşekkürler.Daha işin başında olduğumdan dolayı gördüğünüz üzere DAO ve ADO komutlarını bir birinden ayıramıyorum :( öğreneceğiz inşallah. Ben sizin tavsiyeniz doğrultusunda komutlarımı düzenledim fakat başarılı olamadım.Örneği ekledim rica etsem sizden kodları kontrol edebilirmisiniz.

Birde Table2'le Talble3 birbiriyle ilişkilendirdim.Ama onları formda da ilşkili şekilde görebilmem gerekiyor.İlk gönderdiğim komutta bunu yapabildim fakat birazı ADO birazı DAO olması benim içime sinmedi.

teşekkürler.
 
Katılım
2 Temmuz 2007
Mesajlar
58
Excel Vers. ve Dili
Excel 2003
Sayın modalı göndermiş olduğunuz komutları ilk başta yapamamıştım.Hatta bu konuda size mesaj attım fakat iptal etmeye çalıştım umarım başarılı olabilmişimdir. Derin nefes alarak bir fincan yeşil çay içip sakinleştikten sonra herşeyi baştan gözgezdirdim ve hatalarımı teker teker bulup düzelltim. ADO konusunda benim gibi acemi arkadaşlarında faydalanabilmesi için çalışmam ektedir.

Umarım başka problemlerle karşılaşmam :)

Herkese yardımlarından dolayı teşekkür ederim

Saygılarımla
 
Katılım
16 Kasım 2005
Mesajlar
1,090
Excel Vers. ve Dili
Access 2002
örnegin son halini eklediğiniz için teşekkürler sayın jeday_jey


kolay gelsin.
 
Üst