Bir tabloda alan adının olup olmadığını kontrol etme

1 2 3
20/01/2011, 01:33

ozanakkaya

Private Sub Komut0_Click()
'---------------------------------------------------------------------------------------
' Procedure : Komut0_Click
' Author : alpeki99 - AccessTr.Net
' Date : 13.01.2011
' Purpose : Mevcut Access dosyası içinde tablo ve alan olup olmadığının kontrolünü yapmaktadır.
'---------------------------------------------------------------------------------------
'
On Error Resume Next
Dim sonuc As Byte
Dim tablo_adimiz, alan_adimiz, alan_ekle_sql As String

tablo_adimiz = "tblDENEME"
alan_adimiz1 = "SHS_NKOILCEKODU"
alan_adimiz2 = "SHS_NKOIL"
alan_adimiz3 = "SHS_NKOILCE"
DoCmd.Close acTable, tablo_adimiz
sonuc = accesstr_tablo_alan(tablo_adimiz, alan_adimiz1)

If sonuc = 3 Then
MsgBox "Böyle bir tablo bulunamadı", vbCritical + vbOKOnly, "AccessTR.Net"
End If

If sonuc = 2 Then
If MsgBox("Tablonuzda böyle bir alan bulunamadı. Bu alanı tablonuza eklemek ister misiniz?", vbCritical + vbYesNoCancel, "AccessTR.Net") = vbYes Then
DoCmd.SetWarnings False
alan_ekle_sql = "ALTER TABLE " & tablo_adimiz & " ADD Column " & alan_adimiz1 & " TEXT(6);"
alan_sil1_sql = "ALTER TABLE " & tablo_adimiz & " DROP Column " & alan_adimiz2 & ""
alan_sil2_sql = "ALTER TABLE " & tablo_adimiz & " DROP Column " & alan_adimiz3 & ""
DoCmd.RunSQL alan_ekle_sql
DoCmd.RunSQL alan_sil1_sql
DoCmd.RunSQL alan_sil2_sql
DoCmd.SetWarnings True
End If
End If

If sonuc = 1 Then
MsgBox ("Tablonuzda SHS_NKOILCEKODU alanı bulunmaktadır.")
End If
End Sub

Public Function accesstr_tablo_alan(ByRef tablo_adi As Variant, ByRef alan_adi As Variant) As Byte
On Error GoTo hata_yakala
Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Dim i As Integer

Set dbs = CurrentDb
Set tdf = dbs.TableDefs(tablo_adi)
For i = 0 To tdf.Fields.Count - 1

If tdf.Fields(i).Name = alan_adi Then

accesstr_tablo_alan = 1
Exit Function

End If

Next i

accesstr_tablo_alan = 2
Exit Function

hata_yakala:
If Err.Number = 3265 Then
accesstr_tablo_alan = 3
End If

End Function

20/01/2011, 01:37

access_delisi

tabloyu aç, SHS_NKOILCEKODU isimli alan varmı yokmu bak, varsa tabloyu kapat. alan adı yoksa SHS_NKOILCEKODU isimli alan ekle ve SHS_NKOIL ve SHS_NKOILCE alanlarını sil. sonra tabloyu kapat.

Bu kadar.

sen en son olarak tabloyu açıp kod çalışmışmı çalışmamışmı, alan ekleyip silmişmi diye zaten bakacaksın. niye uğraşıp uğraştırıyorsun. tabloyu açtığında alan ekleyip sil gitsin.


20/01/2011, 10:06

HSayar

sn sleadgeab, alakanıza teşekkür ederim.
sn. acces delisi bilindiği üzere ihtiyaçlar icadların ortaya çıkmasını sağlar. Bu soru içinde o şekilde oldu. tabloda mevcut olan iki lana adının karşılığını başaka bir tabloda bulup yani alana adına yazması lazım. bunun için ekli alana yapmayı öğrendik. ancak tekrar o iki alanın silinmesi için tablonun açılması lazımdı dediğiniz gibi. kod ile yapılabilitorsa neden elle yapayım anlamıyorum.
20/01/2011, 13:09

alpeki99

Konu çözümlendi mi?
20/01/2011, 14:56

HSayar

evet teşekkürler.
29/03/2013, 12:57

ssdestek

*********************************************************
Merhaba Hocam,
Forumda, bir kullanıcının sorduğu soruya benzer sorum var, onu çözmüşsünüz, benim sorumu da ancak siz çözebilirsiniz diye düşündüm. Çünkü bayağı bilgili biri olması gerekiyor ki çok yere sordum (Microsoft dahil) cevap alamadım.

Access 2010 tr kullanıyorum. Bir tablom, bir sorgum ve bir de formum var.
Tablo ismi: Tablo1,
Sorgu ismi : sorgu1
Form ismi: FormXX
Tablo alan isimleri S1, S2, S3, S4 dır. (Bunları manuel oluşturdum)
FormXX deki Metin kutusu isimi Metin1 dır.
Normalde Sorgu1'i oluştururken sorgunun ALAN bölümüne manuel olarak tıklayarak Tablo1 alan isimlerinden S3 seçtim ve ölçüt kısmını da boş bırakarak kaydettim. Böylece Sorgu1 'ın bir tek alanı var ve S3 oldu.

Fakat Sorgu1 alan ismini belirlerken manuel olarak Tablo1'e tıklayıp seçerek oluşturdum, oysa ben bu alan isminin otomatik olarak FormXX deki Metin1 kutusundan almasını istiyorum. Yani FormXX deki Metin1 kutusuna S3 yazdığımda, Sorgu1 deki ilk alan ismi otomatikman S3 olarak değişsin, Metin1 kutusuna S4 yazdığımda ise Sorgu1 deki alan ismi otomatikman S4 olarak değişsin istiyorum. Şöyle deniyorum ama olmiyor.
Ben bu işlemi, Sorgı1 ALAN kısmına;

ifade1: [Forms]![FormXX]![Metin1]

İfadesini yazıyorum ve çalıştırıyorum, ekrana sadece ALAN ismi bölümünde ifade1 çıkıyor ve alt satırlarında da S3 ‘ler görünüyor, oysa ben görünmesini istediğim S3 değil Tablo1’deki S3 ALAN isminin değerleridir.
Özetle, Sorgu1, ALAN isimlerini FormXX deki Metin kutularına yazılanlardan istiyorum.
Buna nasıl bir çözüm bulabiliriz. Teşekkür ederim.
Not: (ben kod yazmayı bilmiyorum, olabiliyorsa Access ın kendi entegre komutları ile yapabilir miyiz, eğer olamıyorsa son çere olarak kod olsun)

Saygılarımla,
1 2 3