Hücredeki Verilerden Başka Hücreye Aktararak Eski Hücreden Aktarılan Veriyi Silme

1 2
10/10/2021, 21:38

sfenksturk

iyi akşamlar arkadaşlar, hücre içerisinde çalışanlara ait bilgiler var, ben bu bilgilerden en başta bulunan çalışanın mesleğini ayrı bir Meslek isimli sütununa aktarmak ve eski hücreden meslek kısmını silerek başlangıcın Tc:'den itibaren olmasını istiyorum.

MUHASEBECİ/ Tc:98765432110 VELİ YARDIMCI MEHMET/FATMA, 19810203, ADRES: UYGULAMA SOK. şeklinde hücredeki bilgilerden en başta bulunan Meslek kısmını başka bir hücreye aktararak eski hücreden mesleğin silinmesini istiyorum.

yani eski hücre Tc:98765432110 VELİ YARDIMCI MEHMET/FATMA, 19810203, ADRES: UYGULAMA SOK. şeklinde olacak ve meslek başka hücreye aktarılacak. Access Sql bilgimle bunu yapabilecek durumda olmadığımdan yardımlarınıza ihtiyacım var.

teşekkür ederim.
11/10/2021, 10:27

berduş

eğer ilk "/" işaretinden önceki veri her zaman meslekse instr(metin,"/") fonksiyonuyla "/"nin konumu bulunup o kısım kesilebilir ama çalışmanızın yapısı göz önünde bulundurulduğunda hata yapmaya çok müsait.
11/10/2021, 11:34

userx

Sayın @berduş hocamın verdiği kodu kullanarak aşağıdaki şekilde iki aşamalı bir sorguyla sanırım sorunuza cevap bulunabilir.

Function TcAl(Mtn As String) As String
On Error Resume Next
Mtn = Trim(Mtn)
xBas = InStr(Mtn, ("/ T"))
TcAl = Left(Mtn, xBas - 1)
End Function
'_______________________________
Function TcAl1(Mtn As String) As String
On Error Resume Next
Mtn = Trim(Mtn)
xBas = InStr(Mtn, ("/ T"))
TcAl1 = Left(Mtn, xBas)
End Function
'_______________________
Private Sub degistir()
DoCmd.RunSQL "UPDATE Tablo1 SET Tablo1.meslek = TcAl([Tablo1]![bilgiler]);"
DoCmd.RunSQL "Update Tablo1 SET Bilgiler = REPLACE(bilgiler, TcAl1([Tablo1]![bilgiler]),'' ) WHERE Kimlik = [Kimlik];"
End Sub
11/10/2021, 13:59

berduş

@userx hocam yabancı uyruklular TC alanı olmadığı için ("/ T") sorun çıkarabilir sadece ("/") yazılması daha uygun olur gibi
aşağıdaki fonksiyonları modüle ekleyip güncelleme için MslkGuncelle yordamını çağırmayı dener misiniz?
Sub MslkGuncelle()
    CurrentDb.Execute "UPDATE Tablo1 SET Tablo1.meslek = MeslekAl([Tablo1]![bilgiler]), Tablo1.bilgiler = KAlan([Tablo1]![bilgiler]);"
End Sub
'_______________________________
Function MeslekAl(Mtn As String) As String
MeslekAl = ""
SonH = InStr(Mtn, "/")
    If SonH > 0 Then MeslekAl = Left(Mtn, SonH - 1)
End Function
'_______________________________
Function KAlan(Mtn As String) As String
SonH = InStr(Mtn, "/")
    KAlan = Trim(Mid(Mtn, SonH + 1))
End Function
11/10/2021, 15:11

userx

Sayın @berduş bu şekilde ben de düşündüm ancak kod yanlışlıkla ya da deneme amaçlı da olsa tekrar çalıştırılırsa işlem tekrarlanır. Sanırım bu da istenmeyecek bir durum.
11/10/2021, 15:25

berduş

(11/10/2021, 15:11)userx yazdı: kod yanlışlıkla ya da deneme amaçlı da olsa tekrar çalıştırılırsa işlem tekrarlanır.
o konuda kesinlikle haklısınız.
birinden birinde bir sorun çıkacak maalesef
belki Dlookup tc'den önce / var mı yada meslek alanı boş mu diye kontrol edilip çalıştırılabilir

maalesef bu tür yapılarda doğrudan kişi kontrolü şart
1 2