[SORGU] Tablo Bölme Geçici tablo oluşturma Verileri dağıtma
#1
access-sql-18 
Merhaba, yine bana acayip gelen bir konuyla soruyorum.

VT bölme bolca var ama ben tablo bölmek istiyorum. Şöyle ki: Kalıcı ya da geçici tablolara ihtiyacım var. Access altında geçici tablo hafızada oluşturulup nasıl kapatılır? bu işlem için özel komut var mı yoksa önce yaratılıp sonra silme yöntemi mi kulanılır?

Kalıcı olarak ise diyelim 48 kayıtlı bir tablom var. Bunu aynı yapıya sahip üç farklı tabloya verilerini dağıtmak istiyorum. Nasıl bir ekleme sorgusu ya da başak bir şey lazım?

Verileri dağıtırken ana tablo diyelim alfabetik oalrak sıralanmışsa tablolara sırayla verileri gödnermesi lazım. Yani önce birinci tabloya 16 tane atıp ikinci 16 taneyi 2. tabloya atmayacak. Teker teker göndermesi gerekiyor. Her birine ardışık sayılarla veri eklemeli. birinci tabloya 1.-4.-7.-10.-13.-16. kayıt gibi. İkinci tabloda ise 2-5-8-11. üçüncü tabloda ise 3-6-9-12-15. gibi kayıtlar olmalı. İStenen sayıda atlayıp N. kaydı eklmeli.

Teşekkürler. Eek


Eklenti Dosyaları
.zip   TabloBolmeEklemeME.zip (Boyut: 47,55 KB / İndirilme: 151)
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#2
Merhaba Mehmet bey..

Son zamanlarda denk geldiğim güzel sorulardan biri.. Wink

Alttaki prosedür..:
  • Tablonun bölünüp bölünmeyeceğini sorar.
  • Geçici tablolarda veri varsa silinip silinmeyeceğini sorar.
  • Kaç kayıt aralığında dağıtmak istediğiniz sorar.
  • Aralık dışında kalmış, dağıtılmayan kayıt varsa uyarır.
  • Bu kayıtları eğer isterseniz hangi geçici tabloya aktarmak istediğiniz sorar.
  • Ve vaat ettiklerinin hepsini yapar.. Dd

Formda bir düğmede kullanınız..:

Visual Basic
  1. 'Ado refranıs ekleyin..
  2.  
  3. If MsgBox("Ana tablo bölünecek.. Evet mi?", vbYesNo) = vbYes Then
  4. If MsgBox("Geçici tablolarda veri varsa silinsin mi?", vbYesNo) = vbYes Then
  5. CurrentDb.Execute "delete from anatablo1"
  6. CurrentDb.Execute "delete from anatablo2"
  7. CurrentDb.Execute "delete from anatablo3"
  8. End If
  9. Dim rs As New ADODB.Recordset
  10. Dim aa, bb, ff, ZiplamaSayisi As Integer
  11. ZiplamaSayisi = InputBox("Kayıtların bölünme aralığı nedir?", , 3)
  12.  
  13. 'AnaTablo1
  14. rs.Open "AnaTablo", CurrentProject.Connection, 1, 3
  15. aa = 0
  16. bb = ZiplamaSayisi
  17. CurrentDb.Execute "insert into AnaTablo1 ( KisiAd, KisiSoyad, KisiBirim )" _
  18. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  19.  
  20. For i = 1 To DCount("*", "anatablo")
  21. If aa / bb = 1 Then
  22. CurrentDb.Execute "insert into AnaTablo1 ( KisiAd, KisiSoyad, KisiBirim )" _
  23. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  24. bb = bb + ZiplamaSayisi
  25. End If
  26. aa = aa + 1
  27. rs.MoveNext
  28. Next
  29. rs.Close
  30. Set rs = Nothing
  31.  
  32.  
  33. 'AnaTablo2
  34.  
  35. rs.Open "AnaTablo", CurrentProject.Connection, 1, 3
  36. aa = 0
  37. bb = ZiplamaSayisi + 1
  38.  
  39. For i = 1 To DCount("*", "anatablo")
  40. If aa = 1 Then CurrentDb.Execute "insert into AnaTablo2 ( KisiAd, KisiSoyad, KisiBirim )" _
  41. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  42. If aa / bb = 1 Then
  43. CurrentDb.Execute "insert into AnaTablo2 ( KisiAd, KisiSoyad, KisiBirim )" _
  44. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  45. bb = bb + ZiplamaSayisi
  46. End If
  47. aa = aa + 1
  48. rs.MoveNext
  49. Next
  50. rs.Close
  51. Set rs = Nothing
  52.  
  53.  
  54. 'AnaTablo3
  55.  
  56. rs.Open "AnaTablo", CurrentProject.Connection, 1, 3
  57. aa = 0
  58. bb = ZiplamaSayisi + 2
  59.  
  60. For i = 1 To DCount("*", "anatablo")
  61. If aa = 2 Then CurrentDb.Execute "insert into AnaTablo3 ( KisiAd, KisiSoyad, KisiBirim )" _
  62. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  63. If aa / bb = 1 Then
  64.  
  65. CurrentDb.Execute "insert into AnaTablo3 ( KisiAd, KisiSoyad, KisiBirim )" _
  66. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  67. bb = bb + ZiplamaSayisi
  68. End If
  69. aa = aa + 1
  70. rs.MoveNext
  71. Next
  72. rs.Close
  73. Set rs = Nothing
  74. End If
  75.  
  76. 'boşta kalan kayıtlar..
  77. srg = "select AnaTablo.KisiAd, AnaTablo.KisiSoyad, AnaTablo.KisiBirim " _
  78. & "from AnaTablo left join (select KisiAd ,KisiSoyad from AnaTablo1 " _
  79. & "union select KisiAd,KisiSoyad from AnaTablo2 union " _
  80. & "select KisiAd,KisiSoyad from AnaTablo3) as Sorgu1 " _
  81. & "on (AnaTablo.KisiAd = Sorgu1.KisiAd) AND (AnaTablo.KisiSoyad = Sorgu1.KisiSoyad) " _
  82. & "where Sorgu1.KisiAd Is Null and Sorgu1.KisiSoyad Is Null "
  83.  
  84. rs.Open srg, CurrentProject.Connection, 1, 3
  85. If rs.RecordCount > 0 Then
  86.  
  87. If MsgBox(rs.RecordCount & " kayıt boşta kaldı.. Bunları bir tabloya atayım mı?", vbYesNo) = vbYes Then
  88. ff = InputBox("Hangi tabloya atayım?" & vbCrLf & "1) AnaTablo1" _
  89. & vbCrLf & "2) AnaTablo2" & vbCrLf & "3) AnaTablo3", , 1)
  90. Select Case ff
  91. Case 1
  92. tbl = "AnaTablo1"
  93. Case 2
  94. tbl = "AnaTablo2"
  95. Case 3
  96. tbl = "AnaTablo3"
  97. End Select
  98.  
  99. For i = 1 To rs.RecordCount
  100. CurrentDb.Execute "insert into " & tbl & " (KisiAd, KisiSoyad, KisiBirim )" _
  101. & " select " & "'" & rs(0) & " ' , '" & rs(1) & " ', '" & rs(2) & " ' "
  102. rs.MoveNext
  103. Next
  104.  
  105. rs.Close
  106. Set rs = Nothing
  107. End If
  108. End If





  Alıntı
Bu mesajı beğenenler:
#3
Taruz, hangi aralık yaptın sen bunu? !!!! Wink Bravo!!
Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#4
merhaba,

boşta kayıt kalmıyor aslında istediğimde zaten. diyelim iki kayıt arttıysa ilkini birinci geçici tabloya diğerini üçüncü tabloya eklmesi gerekiyor. eğer tek kayıt kaldıysa ilk tabloya atamalı. ,


farzedelim 5 tabloya bölecekse bu sefer de 4 artsın eşit dağılım sonucu. Birinciden dördüncüye kadar dağıtıyor ve sonuncusu boş kalıyor. Ona göre ayarlayabilirseniz çok memnun olurum.

Çok fazla gelebilir istek ama hepsini tek fonksiyonda parametreli yapılsa sorun çıkar mı mantık yapısında? Örneğin TabloBol(3,tablo1,tablo2,tablo3)

Eve dönünce tadına bakacağım, çok sağolun.Rolleyes
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#5
Olayı dediğiniz şekilde geliştirdim.. Şöyle ki..:

Eğer isterseniz kalanlar seçeceğiniz tek bir tabloya aktarılır.. Yok eğer istemezseniz kalan kayıtlar sırayla diğer tablolara aktarılır..

Prosedürü fonksiyona aldım.. 5 parametre var.. Atlama sayısı, Ana tablo, 1. geçici tablo, 2. geçici tablo ve 3. geçici tablo..:

Visual Basic
  1. Call TabloBol(5, "anatablo", "anatablo1", "anatablo2", "anatablo3")



Fonksiyonda kullandığım tablo adları, alan adları vb. (sorgular dahil) tanımlamaları bu değişkenlerden alınıyor.. (Sadece bu yapı için bile güzel bir örnek)

Visual Basic
  1. 'Referanslardan Ado gerekli.. Taruz..
  2. Public Function TabloBol(ZiplamaSayisi As Integer, tablo, tablo1 As String _
  3. , tablo2 As String, tablo3 As String)
  4. On Error GoTo Komut0_Click_Error
  5. If ZiplamaSayisi = 2 Then
  6. MsgBox "3'ün altına bu iş yapılmaz.."
  7. Exit Function
  8. End If
  9. If MsgBox("Ana tablo bölünecek.. Evet mi?", vbYesNo) = vbYes Then
  10. If MsgBox("Geçici tablolarda veri varsa silinsin mi?", vbYesNo) = vbYes Then
  11. CurrentDb.Execute "delete from " & tablo1 & ""
  12. CurrentDb.Execute "delete from " & tablo2 & ""
  13. CurrentDb.Execute "delete from " & tablo3 & ""
  14. End If
  15. Dim rs As New ADODB.Recordset
  16. Dim aa, bb, ff As Integer
  17.  
  18.  
  19. 'AnaTablo1
  20. rs.Open tablo, CurrentProject.Connection, 1, 3
  21. aa = 0
  22. bb = ZiplamaSayisi
  23. CurrentDb.Execute "insert into " & tablo1 & " ( " & rs.Fields(1).Name & "" _
  24. & ", " & rs.Fields(2).Name & ", " & rs.Fields(3).Name & " )" _
  25. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  26.  
  27. For i = 1 To DCount("*", "" & tablo & "")
  28. If aa / bb = 1 Then
  29. CurrentDb.Execute "insert into " & tablo1 & " ( " & rs.Fields(1).Name & "" _
  30. & ", " & rs.Fields(2).Name & ", " & rs.Fields(3).Name & " )" _
  31. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  32. bb = bb + ZiplamaSayisi
  33. End If
  34. aa = aa + 1
  35. rs.MoveNext
  36. Next
  37. rs.Close
  38. Set rs = Nothing
  39.  
  40.  
  41. 'AnaTablo2
  42.  
  43. rs.Open tablo, CurrentProject.Connection, 1, 3
  44. aa = 0
  45. bb = ZiplamaSayisi + 1
  46.  
  47. For i = 1 To DCount("*", tablo)
  48. If aa = 1 Then CurrentDb.Execute "insert into " & tablo2 & " ( " & rs.Fields(1).Name & "" _
  49. & ", " & rs.Fields(2).Name & ", " & rs.Fields(3).Name & " )" _
  50. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  51. If aa / bb = 1 Then
  52. CurrentDb.Execute "insert into " & tablo2 & " ( " & rs.Fields(1).Name & "" _
  53. & ", " & rs.Fields(2).Name & ", " & rs.Fields(3).Name & " )" _
  54. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  55. bb = bb + ZiplamaSayisi
  56. End If
  57. aa = aa + 1
  58. rs.MoveNext
  59. Next
  60. rs.Close
  61. Set rs = Nothing
  62.  
  63.  
  64. 'AnaTablo3
  65.  
  66. rs.Open tablo, CurrentProject.Connection, 1, 3
  67. aa = 0
  68. bb = ZiplamaSayisi + 2
  69.  
  70. For i = 1 To DCount("*", tablo)
  71. If aa = 2 Then CurrentDb.Execute "insert into " & tablo3 & " ( " & rs.Fields(1).Name & "" _
  72. & ", " & rs.Fields(2).Name & ", " & rs.Fields(3).Name & " )" _
  73. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  74. If aa / bb = 1 Then
  75.  
  76. CurrentDb.Execute "insert into " & tablo3 & " ( " & rs.Fields(1).Name & "" _
  77. & ", " & rs.Fields(2).Name & ", " & rs.Fields(3).Name & " )" _
  78. & " select " & "'" & rs(1) & " ' , '" & rs(2) & " ', '" & rs(3) & " ' "
  79. bb = bb + ZiplamaSayisi
  80. End If
  81. aa = aa + 1
  82. rs.MoveNext
  83. Next
  84.  
  85. End If
  86. 'boşta kalan kayıtlar..
  87.  
  88. srg = "select " & tablo & "." & rs.Fields(1).Name & ", " & tablo & "." & rs.Fields(2).Name & "" _
  89. & ", " & tablo & "." & rs.Fields(3).Name & " " _
  90. & "from " & tablo & " left join (select " & rs.Fields(1).Name & "" _
  91. & "," & rs.Fields(2).Name & " from " & tablo1 & " " _
  92. & "union select " & rs.Fields(1).Name & "," & rs.Fields(2).Name & " from " & tablo2 & " union " _
  93. & "select " & rs.Fields(1).Name & "," & rs.Fields(2).Name & " from " & tablo3 & ") as trz " _
  94. & "on (" & tablo & "." & rs.Fields(1).Name & " = trz." & rs.Fields(1).Name & ") " _
  95. & "and (" & tablo & "." & rs.Fields(2).Name & " = trz." & rs.Fields(2).Name & ") " _
  96. & "where trz." & rs.Fields(1).Name & " Is Null and trz." & rs.Fields(2).Name & " Is Null "
  97. rs.Close
  98. Set rs = Nothing
  99. rs.Open srg, CurrentProject.Connection, 1, 3
  100.  
  101. If rs.RecordCount > 0 Then
  102.  
  103. If MsgBox(rs.RecordCount & " kayıt boşta kaldı.. Bunları bir tabloya atayım mı?", vbYesNo) = vbYes Then
  104. ff = InputBox("Hangi tabloya atayım?" & vbCrLf & "1) " & tablo1 & "" _
  105. & vbCrLf & "2) " & tablo2 & "" & vbCrLf & "3) " & tablo3 & "", , 1)
  106. Select Case ff
  107. Case 1
  108. tbl = tablo1
  109. Case 2
  110. tbl = tablo2
  111. Case 3
  112. tbl = tablo3
  113. End Select
  114.  
  115. For i = 1 To rs.RecordCount
  116. CurrentDb.Execute "insert into " & tbl & " (" & rs.Fields(0).Name & "," _
  117. & rs.Fields(1).Name & ", " & rs.Fields(2).Name & " )" _
  118. & " select " & "'" & rs(0) & " ' , '" & rs(1) & " ', '" & rs(2) & " ' "
  119. rs.MoveNext
  120. Next
  121.  
  122. rs.Close
  123. Set rs = Nothing
  124.  
  125. ElseIf MsgBox("Peki, tablolalara paylaştırayım mı?", vbYesNo) = vbYes Then
  126. kk = 0
  127. For i = 1 To rs.RecordCount
  128. kk = kk + 1
  129. If kk > 3 Then kk = 1
  130. tt = Array(tablo1, tablo2, tablo3)
  131. tbl = tt(kk - 1)
  132.  
  133. CurrentDb.Execute "insert into " & tbl & " (" & rs.Fields(0).Name & "," _
  134. & rs.Fields(1).Name & ", " & rs.Fields(2).Name & " )" _
  135. & " select " & "'" & rs(0) & " ' , '" & rs(1) & " ', '" & rs(2) & " ' "
  136. rs.MoveNext
  137. Next
  138.  
  139. rs.Close
  140. Set rs = Nothing
  141.  
  142.  
  143. End If
  144. End If
  145.  
  146. On Error GoTo 0
  147. Exit Function
  148.  
  149. Komut0_Click_Error:
  150.  
  151. MsgBox "Error " & Err.Number & " (" & Err.Description & ") "
  152. End Function





  Alıntı
Bu mesajı beğenenler: livadi53
#6
Sayın Mehmet Eser;

İyi akşamlar.

Sayın Taruz'un eklediği, sizin ve sayın Berkant Öztürk'ün övgüsünü kazanan yukarıdaki kodun, dosyaya eklenmiş son şeklini rica etsem siteye ekleyebilir misiniz?
Sorunuz ve güzel yanıtı veren üstadıma teşekkürler.

Sevgi ve saygılar.



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  [FORM] Gmaile Etiket Oluşturma Access Ziyaretçisi 73 1.029 15-05-2024, 08:54
Son Mesaj: dsezgin
  Qrbarkod Oluşturma ates2014 5 257 09-04-2024, 10:15
Son Mesaj: ates2014
  Tablodaki Verileri Yan Yana Yazdırmak 10pele 11 148 09-03-2024, 02:52
Son Mesaj: dsezgin
  Ağ Konumundaki Excel Dosyasından Alınan Verileri Güncelleyememe geneclean 2 119 20-02-2024, 14:27
Son Mesaj: dsezgin
  [FORM] QR Kod Oluşturma ebenli 20 4.049 08-02-2024, 13:24
Son Mesaj: BeyTor
  Verileri Güncellemek m_demir 18 359 21-01-2024, 19:59
Son Mesaj: m_demir
  [FORM] 1. Açılır Kutudan Tablo Sütunlarını Seçeyim. 2. Açılır Kutudan Filtreleme Yapayım. ŞabanTR 4 154 10-01-2024, 14:10
Son Mesaj: dsezgin
  Bir Sütuna Girilen Verileri Başka Bir Sütun Ile Karşılaştırıp Hesaplama bilservisci 4 265 08-01-2024, 11:58
Son Mesaj: bilservisci

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi