Revizyonlu Kopyala Yapıştır Uygulaması

1 2
27/08/2018, 21:32

notrino

Merhabalar,

Ekli örneğimde gerçekleştirmek istediğim birşey var. Bununla ilgili daha önce gönderdiğiniz şu kodu;
Kod:
Dim GRevizyon As Integer

If IsNull(Me.revizyon) Or Me.revizyon = "" Then

Me.revizyon = "R1"

Else

GRevizyon = Val(Mid(Me.revizyon, 2, Len(Me.revizyon)))

Me.revizyon = "R" & GRevizyon + 1

End If

ve şu kodu;

Kod:
Dim AccessTr_EskiKimlik As Integer
Dim AccessTr_EskiAlan As String

AccessTr_EskiKimlik = Me.Kimlik
AccessTr_EskiAlan = Me.alan1

DoCmd.GoToRecord , , acNewRec

Me.alan1 = AccessTr_EskiAlan

DoCmd.RunCommand acCmdSaveRecord

DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Tablo2 ( alan2, Kimlik ) SELECT Tablo2.alan2, " & Me.Kimlik & " FROM Tablo2 WHERE (((Tablo2.Kimlik)= " & AccessTr_EskiKimlik & "));"
DoCmd.SetWarnings True

birbirleriyle sentezleyerek çeşitli şekillerde kullandım ama istediğimi elde edemedim. İstediğim şey şudur;

Düğmeye basıldığında "alt formda" yeni kayıt açılacak, bu yeni kayıtta revizyon değerleri R1 olacak, ALAN2 değerleri aynen gelecek. (ben ALAN2 de gerekli değişiklikleri manuel yapacağım) Daha sonra düğmeye tekrar bastığımda yine "alt formda" yeni kayıt açılacak bu kez revizyon değerleri R2 olacak ve ALAN2 deki son yapılan değişiklikler ne ise onlar kopyalanıp yapıştırılacak. Yani her düğmeye basışım, "alt formdaki" yeni kayıtta revizyon değerini 1 arttırırken ALAN2 değerlerinin son  hallerini kopyalayıp yapıştıracak.Örnek;

R0......Dede
R0....Nene
R0....Hala
olsun. Düğmeye basınca "alt formdaki" yeni kayıtta;
R1....Dede
R1....Nene
R1...Hala

gelecek. Devamında ben bu ALAN2 değerlerini manuel değiştirdiğimde yani;

R1.....Enişte
R1....Amca
R1....Dayı

yaptığımda tekrar düğmeye basarsam "alt formdaki" yeni kayıtta;

R2....Enişte
R2....Amca
R2....Dayı

gelmeli.
Gönderdiğiniz kodları nasıl organize edersem edeyim yeni kayda hep 3-6-9-12 şeklinde eski verilerle birlikte katlayarak veri kopyaladı. Bir de revizyon değerlerinde hep ilk kaydın revizyonunu bir arttırdı, son kaydı baz aldıramadım. Bunda sizin hatanız yok tabiki, ben senaryonun bu hale geleceğini öngöremediğimden basit örnekler üzerinden sizden çözüm istemiştim.

Bu arada Tablo ilişkilerinde bir değişiklik yapmamalıyım. Çünkü "ANA FORM" yeni bir kayıt açarsam aynı senaryolar bu kayıt içinde diğerinden bağımsız olarak işlemeli.
Teşekkürler..
28/08/2018, 19:49

ozanakkaya

Butonun tıklandığında olayına aşağıdaki kodu ekleyiniz.

Dim GEskiKimlik As Integer
Dim GEskiAlan As String
Dim db As Database
Dim rs As DAO.Recordset
Dim rstRecords As Recordset

GEskiKimlik = Me.Kimlik1
GEskiAlan = Me.alan1

Set db = CurrentDb
Set rstRecords = CurrentDb.OpenRecordset("SELECT TOP 1 Kimlik1, revizyon, Val(Mid([revizyon],2,Len([revizyon]))) AS GSayi FROM Tablo2 GROUP BY Kimlik1, revizyon, Val(Mid([revizyon],2,Len([revizyon]))) ORDER BY Val(Mid([revizyon],2,Len([revizyon]))) DESC;")

rstRecords.MoveFirst

GSonSayi = rstRecords!GSayi
GSonVeri = "R" & GSonSayi + 1

DoCmd.GoToRecord , , acNewRec

Me.alan1 = GEskiAlan

DoCmd.RunCommand acCmdSaveRecord

DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Tablo2 ( alan2, Kimlik1, revizyon ) SELECT Tablo2.alan2, " & Me.Kimlik1 & ", '" & GSonVeri & "' FROM Tablo2 WHERE (((Kimlik1)= " & GEskiKimlik & "));"
DoCmd.SetWarnings True


rstRecords.Close

db.Close

Set rstRecords = Nothing
Set db = Nothing
28/08/2018, 20:01

notrino

Merhaba Ozan Bey,

Teşekkürler yanıt için. Ancak butona her basışımda Ana Formda da yeni kayıt açıyor. Ben sadece alt formda yeni kayıt açmasını ve yazdığım senaryoların işlemesini istemiştim.
29/08/2018, 10:53

ozanakkaya

(28/08/2018, 20:01)notrino yazdı: Merhaba Ozan Bey,

Teşekkürler yanıt için. Ancak butona her basışımda Ana Formda da yeni kayıt açıyor. Ben sadece alt formda yeni kayıt açmasını ve yazdığım senaryoların işlemesini istemiştim.

(27/08/2018, 21:32)notrino yazdı: Gönderdiğiniz kodları nasıl organize edersem edeyim yeni kayda hep 3-6-9-12 şeklinde eski verilerle birlikte katlayarak veri kopyaladı.

Yazdıklarınız birbiri ile çelişiyor. Tablo1'e yeni kayıt eklenmeyecek ise butonu tıkladığınızda alt forma yeni kayıt eklenecektir. Bu üst mesajda belirttiğiniz şekilde 3-6-9 şeklinde olacaktır.
Örnek uygulamanızdaki Tablo2'de 3 adet kayıt var. Formdaki butona ilk tıklamada ne olmasını istiyorsanız Tablo 2'ye o kayıtları ekleyin. Butona tıkladığınızda Tablo2'ye eklenecek yeni kayıtlarda Kimlik1 ve revizyon alanlarında ne yazacak? Buton 2. kez tıklandığında bu alanlarda ne yazacak?
29/08/2018, 11:20

notrino

Merhaba Ozan Bey,

Sanırım biraz karışık ifade ettim. Şöyle ifade edeyim;

Ana Formda Kimlik=1,  Alan1=A olsun

Alt formda da
R0...Dede
R0...Nene
R0...Hala

olsun.

Düğmeye bastığımda Ana formdaki kayıt sayısı artmasın
Ama alt formda;
R1...Dede
R1....Nene
R1...Hala oluşsun.

Bu aşamadan sonra eğer değerleri değiştirirsem, yani;
R1....Anne
R1....Baba
R1.....Kardeş

şeklinde manuel değiştirirsem ve sonra butona basarsam;
R2.....Anne
R2....Baba
R2....Kardeş şeklinde alt formda yeni kayıtlar oluşmalı.

Yani alt formda yeni kayıt açıldığında son revizyon değerinin karşısındaki kayıtlar aynen kopyalanırken, revizyon değeri de 1 arttırılmış olacak. Eğer ben ana formda yeni kayıt istersem, klasik gezinti düğmeleri ile yeni kayıt oluşturacağım.
29/08/2018, 11:56

ozanakkaya

Kodları aşağıdaki ile değiştirerek deneyiniz

Dim GEskiKimlik As Integer
Dim GEskiAlan As String
Dim db As Database
Dim rs As DAO.Recordset
Dim rstRecords As Recordset

GEskiKimlik = Me.Kimlik1
GEskiAlan = Me.alan1

Set db = CurrentDb
Set rstRecords = CurrentDb.OpenRecordset("SELECT TOP 1 Kimlik1, revizyon, Val(Mid([revizyon],2,Len([revizyon]))) AS GSayi FROM Tablo2 GROUP BY Kimlik1, revizyon, Val(Mid([revizyon],2,Len([revizyon]))) ORDER BY Val(Mid([revizyon],2,Len([revizyon]))) DESC;")

rstRecords.MoveFirst

GSonSayi = rstRecords!GSayi
GSonVeri = "R" & GSonSayi + 1

Me.alan1 = GEskiAlan

DoCmd.RunCommand acCmdSaveRecord

DoCmd.SetWarnings False

DoCmd.RunSQL "INSERT INTO Tablo2 ( Kimlik1, revizyon, ALAN2 ) SELECT Kimlik1, 'R' & Val(Mid([revizyon],2,Len([revizyon])))+1 AS revizyo, ALAN2 FROM Tablo2 GROUP BY Kimlik2, Kimlik1, 'R' & Val(Mid([revizyon],2,Len([revizyon])))+1, ALAN2, Val(Mid([revizyon],2,Len([revizyon]))), revizyon HAVING (((revizyon) = '" & "R" & GSonSayi & "')) ORDER BY Kimlik2, Val(Mid([revizyon],2,Len([revizyon]))) DESC;"

DoCmd.SetWarnings True

Me.Tablo2_alt_formu.Requery

rstRecords.Close

db.Close

Set rstRecords = Nothing
Set db = Nothing
1 2