İlk açılışta tablo alanlarının kontrol edilmesi

Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Merhaba
Diyelim ki bir formumuz var. Ana form gibi. Bu form açılırken, tablolardan birinin -mesela sokak isimli tablonun- içine sonradan eklenmesi gereken bir alanı kontrol edebilir mi?. Eğer o alan varsa -Dikkat değer değil alanın kendisine bakacak- geçecek ama alan yoksa Bir komut düğmesi görünür olacak ve bu komut düğmesi SQL kodlarıyla bu tabloya caddeid adlı bir alan ekleyecek. Dediğim gibi alan varsa birşey yapmayacak. Yoksa komut görünür olacak.

Burada benim tek sorunum ana form açıldığında bu formun denetim kaynağı olmayan bir tablonun bir alanının var olup olmadığına nasıl bakılacak? Bundan sonrası sorun değil. Sql kodları ve if then ile halledebilirim.

Şimdiden teşekkürler..
 
Katılım
19 Eylül 2008
Mesajlar
331
Excel Vers. ve Dili
2003
sayın mehmetdemiral
Dim fld As Field
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("tablonun adı")
For Each fld In rs.Fields
Debug.Print fld.Name
Next
rs.Close

kodu ile istediğin tablonun alanlarına ulaşabilirsin sonrası kolay alan isimlerini yeni isimle karşılaştır
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın mehmetdemiral,

Tablo alan adlarını aşğıdaki kodlarla alabilirsiniz:

Kod:
Dim adoField As ADODB.Field
Dim rst As New ADODB.Recordset

rst.Open "TabloAdı", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly, adCmdTable
For Each adoField In rst.Fields
       Debug.Print "   " & adoField.Name
    Next adoField
Alan eklemek için ise:

Kod:
Dim cmd As New ADODB.Command

   With cmd
     .ActiveConnection = cn  'cn is a variable I set to my active connection
     .CommandType = adCmdText
     .CommandText = "ALTER TABLE " & tableName & " ALTER COLUMN " & columnName & " TEXT (" fieldLength & ")"
     .Execute
   End With
İyi çalışmalar
 
Son düzenleme:
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Teşekkürler. Aynı anda iki cevap birden gelmiş. Aslında ikisi de aşağı yukarı aynı çözümü öneriyor. Teşekkürler.. Hemen deniyorum.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın mehmetdemiral,

sn. adnanyurdakul ın cevabı DAO ya benim cevabım ADO ya dayanıyor. Sizin uygulamada hangi referans daha üstte ise onu kullanın derim. Sonradan hata oluşuyor.

İyi çalışmalar
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Evet, Dao ve Ado referanslarının sıralamasının işi çok değiştirdiğini ben de birçok kereler diğer arkadaşlara anlatmıştım.

Sayın modalı, yukardaki kodların çıktısını nerede görmeliyim? Ana formum üzerine bir metin kutusu koyup "caddeid" adlı alanın olup olmadığını kontrol ettirmek istiyorum. Tablomda 4 adet alan var. Ben çıktıyı görmek için
MsgBox adoField.name
şeklinde kullanmayı denedim. Her bir mesajda doğru veriler geldi. Fakat ben buradaki veriyi bir yere yazdırıp

eğer caddeid adlı bir alan varsa o zaman geç
eğer cadde id yoksa o zaman sql kodu ile caddeid ekle

demeliyim. Fakat tablodaki alan isimlerini nereye yazdırmalıyım ve nasıl yazdırmalıyım? Bununla ilgili başka kod örnekleri de var elimde mesela bir tanesi şöyle (ADO ile):


''' NOTE: This subroutine requires that you reference the
'' latest version of the following library:
'''
'' Microsoft ActiveX Data Objects Library

Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field

' Create the Connection object.
Set conn = New ADODB.Connection
With conn
' Set the OleDB provider for the connection.
.Provider = "Microsoft.JET.OLEDB.4.0"
' Open a connection to Northwind.mdb.
.Open Application.Path & "\samples\northwind.mdb"
End With

Set rst = New ADODB.Recordset
With rst
.ActiveConnection = conn
.Open "SELECT * FROM customers"
End With

For Each fld In rst.Fields
MsgBox fld.Name
Next fld

Set rst = Nothing
conn.Close

Bir diğer örnek şöyle:

Dim rst As New ADODB.Recordset
Dim kaynak As String

rst.Open "köyler", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rst.MoveFirst
For i = 0 To rst.RecordCount - 1
kaynak = kaynak & rst("köyünadı") & ";"
rst.MoveNext
Next i

Me.Liste3.RowSource = kaynak
rst.Close
Set rst = Nothing

Burada tablodaki bir qalanın verileri sanırım listeye aktarılıyor. Ben de bir yere bu alanları aktarmalıyım. Ama nasıl?
 
Üst