Yeni veri tabanı oluşturma hakkında

Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Arkadaşlar merhaba.
Aşağıdaki kodlarla bir veri tabanı oluşturuyorum.(VB6 da)Fakat burda size üç sorum olacak:
1-Veri tabanının ismini ben belirlemek istiyorum.Yani form üzerindeki Textbox nesnesinde yazdığım şey(Ör:2006-2007) veri tabanının ismi olsun yani oluşturulan veri tabanının ismi 2006-2007 olsun.Bunu bir türlü başaramadım.
2-Veri tabanı dosyasına sadece bir tablomu atabiliyoruz.Yani birden fazla tablonun olduğu bir veri tabanına ihtiyacım var.Fakat yukarıdaki kodlarla sadece bir tablo oluşturabiliyorum.
3-Veri tabanı tablolarına alanları atarken bu alnaların formatını veya uzunluğunu nasıl tespit ediyoruz.
Teşekkürler.
Kod:
Private Sub command1_click()
    Dim DatabasePath As String
    Dim Cat As Object
    Dim NewTable As Object
    
    DatabasePath = App.Path + "\Tools\Data.mdb "
    Set Cat = CreateObject("ADOX.Catalog")
    Cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath
    
    Set NewTable = CreateObject("ADOX.Table")
    
    With NewTable
        .Name = "KÜTÜK"
        .Columns.Append "Kimlik"
        .Columns.Append "SINIF_ŞUBE"
        .Columns.Append "OKUL_NO"
        .Columns.Append "ADI"
        .Columns.Append "SOYADI"
  ..................
  ..................

    End With
       Cat.Tables.Append NewTable
 
End Sub
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
1- DatabasePath = App.Path + "\Tools\Data.mdb " Satırını değiştirin
DatabasePath = App.Path + "\Tools\" & Text1.text & ".mdb"

2-Cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath
satırı ile yeni bir Acces dosyası oluşturuluyor. Siz ikinci bir tablo oluşturmak için aynı kodları kullanırsanız burada bu dosya zaten var gibi bir hata verir çünkü aynı adlı bir dosyayı aynı yerde oluşturmaya çalışıyprsunuz yeni dtablo oluşturmak istediğiniz veritabanını sadece açmalısınız yani aşağıdaki gibi açmalısınız
Cat.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath

3-.Columns.Append "Kimlik", adBoolean 'Evet/hayır
.Columns.Append "SINIF_ŞUBE",,2 'İki karakter uzunluğunda metin
.Columns.Append "OKUL_NO", adCurrency 'Parasal değer

Dim NewTable As Object yerine
Microsoft ActiveX Data Objects Library kütüphanesini son sürümünü referans olarak ekleyin
Dim NewTable As New ADOX.Table kullanırsanız parametreler otomatik geleceğinden tüm değişken tiplerini görebilirsiniz.
 
Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Sayın dalgalıkur;
Açıklamanız için teşekkür ederim.Fakat veritabanı dosyasına birden fazla tablo ekleme kısmına örnek bir kod yazabilirmisiniz.Ben bir kaç deneme yaptım fakat olmadı.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Özür dilerim hata benden kaynaklanıyor

Sizdeki şu satırı sadece yeni bir mdb dosyası oluşturmak için kullanın
Cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath

Yenibir tablo eklemek içinde aşağıdaki şekilde bağlantı kurun
Cat.Open DatabasePath
 
Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Kod:
Private Sub command1_click()
    Dim DatabasePath As String
    Dim Cat As Object
    Dim NewTable As Object
    
    DatabasePath = App.Path + "\Tools\Data.mdb "
    Set Cat = CreateObject("ADOX.Catalog")
    Cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath
    
    Set NewTable = CreateObject("ADOX.Table")
    
    With NewTable
        .Name = "KÜTÜK"
        .Columns.Append "Kimlik"
        .Columns.Append "SINIF_ŞUBE"
        .Columns.Append "OKUL_NO"
        .Columns.Append "ADI"
        .Columns.Append "SOYADI"
  ..................
  ..................

    End With        
Cat.Open DatabasePath

        With NewTable
        .Name = "tablo2"
        .Columns.Append "alan1"
        .Columns.Append "alan2"
        .Columns.Append "alan3"
        .Columns.Append "alan4"
        .Columns.Append "alan5"
        End With


       Cat.Tables.Append NewTable
 
End Sub
Yani kodlar bu şekildemi olmalı.
 
Son düzenleme:
Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Sormayı unuttuğum başka bir şey de şu;
Veri tabanının şifreli olmasını istersek nasıl kodlamalıyız.
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Şifreli VeriTabanı oluşturmak ve Tablo Eklemek

'------------------------------------------------------------
'Öncelikle aşağıdaki referansları eklemelisiniz.
'---
'Microsoft ActiveX Data Objects Library (Son Versiyonu)
'Microsoft ADO Ext. 2.5 for DDL and Security(Son Versiyonu)
'------------------------------------------------------------
Şifreli bir VeriTabanı oluşturmak için

Kod:
Option Explicit
Sub DataBaseOluştur()
    Dim cat As New ADOX.Catalog
    Dim Şifre As String
    Dim DatabasePath As String
    Şifre = "aLPi"
    DatabasePath = ThisWorkbook.Path & "\denemeVeri.mdb"
    cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath & ";User ID=admin;Jet OLEDB:Database Password=" & Şifre
    Set cat = Nothing
End Sub
Şifreli bir Veritabanına Tablo Eklemek için
Kod:
Sub TabloEkle()
    Dim cat As New ADOX.Catalog
    Dim tbl As New ADOX.Table
    Dim conn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim Şifre As String
    Dim DatabasePath As String
    Şifre = "aLPi" 
    DatabasePath = ThisWorkbook.Path & "\denemeVeri2.mdb"
    With conn
        .Provider = "Microsoft.JET.OLEDB.4.0"
        .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath & ";User ID=admin;Jet OLEDB:Database Password=" & Şifre
    End With
    cat.ActiveConnection = conn
    With tbl
        .Name = "SatışTablosu"
        With .Columns
            .Append "Adı", , 50               '50 karakter giriş izni
            .Append "Soyadı", , 50            '50 karakter giriş izni
            .Append "Maaşı", adCurrency       'Parasal değer giriş izni
            .Append "EvliBekar", adBoolean    'Evet Hayır(True False) giriş izni
        End With
    End With
    cat.Tables.Append tbl
    Set tbl = Nothing
    Set cat = Nothing
    conn.Close
End Sub
 
Son düzenleme:
Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Sayın Alpi;
Sanırım sorumu yanlış anladınız.Öncelikle ben excel de değil VB6 da çalışıyorum.İkincisi kodlarınızı her nekadar uyarlamış da olsam hata veriyor.Yukarıda verdiğim kodlara bakarsanız.
Bu arada 2. sorunu şu şekilde hallettim.
Kod:
Private Sub Command1_Click()
    Dim DatabasePath As String
    Dim Cat As Object
    Dim NewTable As Object
    
    DatabasePath = App.Path + "\Tools\" & Text1.Text & ".mdb" 'Veritabanına yol gösterir ve Text1de yazanı isim olarak verir
    Set Cat = CreateObject("ADOX.Catalog")
    Cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath 'Veritabanı yaratır
      
Set NewTable = CreateObject("ADOX.Table") 'Tablo yaratır
    With NewTable
        .Name = "Tablo1" 'Eklenen tablonun ismini belirler
        .Columns.Append "AlanAdı1" 'Tablodaki alan isimleri belirlenir
        .Columns.Append "AlanAdı2"
        .Columns.Append "AlanAdı3"
   End With
Cat.Tables.Append NewTable 'Yaratılan tablo özelliklerini ekler
Set NewTable = Nothing
  
Set NewTable2 = CreateObject("ADOX.Table") 'İkinci tablo ekler
    With NewTable2
        .Name = "Tablo2"
        .Columns.Append "AlanAdı1"
    End With
Cat.Tables.Append NewTable2
Set NewTable2 = Nothing

Set NewTable3 = CreateObject("ADOX.Table")
    With NewTable3
        .Name = "TabloAdı3"
        .Columns.Append "AlanAdı1"
        .Columns.Append "AlanAdı2"
        .Columns.Append "AlanAdı3"
        .Columns.Append "AlanAdı4"
        .Columns.Append "AlanAdı5"
        .Columns.Append "AlanAdı6"
    End With
Cat.Tables.Append NewTable3
Set NewTable3 = Nothing

End Sub
Geriye bir tek kullanıcıların data dosyasına girerek bozmasını önlemek amacıyla şifreleme ve sütun formatları kaldı(yani istediğim sütunun 11 basamaklı sayı,50 karakterli metin özelliklerini kodlama)
Teşekkürlerç
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Yukarıda Sayın Dalgalikur un da dediği gibi bir veritabanını oluşturmak için farklı ona erişmek için farklı kodlar kullanılmalı.
Son verdiğiniz Kodda geçen Cat.Create..... ile veritabanı(*.mdb) dosyasını oluşturuyorsunuz ve daha sonra buna tablo ekliyorsunuz. Son verdiğiniz kodu ikinci kez çalıştırdığınızda hata veriyor çünkü Cat.Create..... ile ile aynı dizinde aynı adda bir veritabanı oluşturmaya çalışmış olursunuz. Onun için bunları ayırmanızı tavsiye ederim.

Verdiğim kodlar Excel yada VisualBasic farketmez ikisindede çalışıyor.

Geriye bir tek kullanıcıların...... şeklinde başlayan sorunuzun yanıtı zaten son verdiğim kodlarda mevcut
Kod:
        With .Columns
            .Append "Adı", , 50               '50 karakter giriş izni
            .Append "Soyadı", , 50            '50 karakter giriş izni
            .Append "Maaşı", adCurrency       'Parasal değer giriş izni
            .Append "EvliBekar", adBoolean    'Evet Hayır(True False) giriş izni
        End With
şifreleme ve şifreli veritabanına erişim kodlarıda en son verdiğim kodlarda mevcut
Yoksa sorunuzu mu yanlış anlıyorum.
 
Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Verdiğim kodlar Form üzerindeki Text1 nesnesine yazılana göre isim vererek data açıyor.Verilen isim bir kere olacağından(programın gidişatı gereği)Ancak yinede dikkate alacağımdan emin olabilirsiniz.Şifreleme olayına gelince
& ";User ID=admin;Jet OLEDB:Database Password=" & Şifre
verdiğiniz kodda user ID=admin olayı kafama takıldı.Bunun gerekliliği hakkında bilgi verebilirmisiniz.
Sütun biçimlendirmede ise anladığım kadarıyla metin karakter sayısı 50 olsun demişsiniz.Peki örneğin okul no için 5 karakterli bir sayı,tarih biçimlendirmelerini nasıl yapmam gerekiyor.

(NOT:Bu arada şireleme olayını da sayenizde çözmüş bulunmaktayım,teşekkürler.Cat.Create.... satırının sonuna& ";User ID=admin;Jet OLEDB:Database Password=" & Şifre ekleyerek çözüldü. )
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Verdiğim kodlar Form üzerindeki Text1 nesnesine yazılana göre isim vererek data açıyor.Verilen isim bir kere olacağından(programın gidişatı gereği)Ancak yinede dikkate alacağımdan emin olabilirsiniz.Şifreleme olayına gelince
& ";User ID=admin;Jet OLEDB:Database Password=" & Şifre
verdiğiniz kodda user ID=admin olayı kafama takıldı.Bunun gerekliliği hakkında bilgi verebilirmisiniz.
Sütun biçimlendirmede ise anladığım kadarıyla metin karakter sayısı 50 olsun demişsiniz.Peki örneğin okul no için 5 karakterli bir sayı,tarih biçimlendirmelerini nasıl yapmam gerekiyor.
1-(user ID=admin) Bu yeni oluşturduğunuz veritabanın için kullanıcı adı belirtiliyor.
2-(örneğin okul no için 5 karakterli bir sayı) 50 rakamını 5 ile değiştirmeniz yeterli
3-(tarih biçimlendirmelerini) En üstte bahsettiğim referansları eklerseniz zaten argümanlar otomatik olarak size gösterilecektir. Yani:
Kod:
.Append "EvliBekar"
Satırını yazdıktan sonra virgül(,) ve boşluk tuşuna bastığınızda seçebileceğiniz tüm veri türleri liste şeklinde açılacaktır. Eğer boşluğa bastıktan sonra liste açılmıyorsa Ctrl+Boşluk tuşlarına basın.
Ama ben yinede tarih bçimi için kullanacağınız argumanı vereyim -adDate-
İyi çalışmalar
 
Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Bu durumda yeni kodlar :
Kod:
Private Sub Command1_Click()
    Dim DatabasePath As String
    Dim Cat As Object
    Dim NewTable As Object
    Dim Şifre As String
    Şifre = "" 'Veritabanını şifreliyoruz."xxxxx" x yazan yere şifrenizi yazın
    DatabasePath = App.Path + "\Tools\" & Text1.Text & ".mdb" 'Veritabanına yol gösterir ve Text1de yazanı isim olarak verir
    Set Cat = CreateObject("ADOX.Catalog")
    Cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath & ";User ID=admin;Jet OLEDB:Database Password=" & Şifre 'Şifreli veritabanı yaratır
      
      
Set NewTable = CreateObject("ADOX.Table") 'Tablo yaratır
    With NewTable 'İlk tabloya ait özellikleri sıralayacağız
        .Name = "Tablo1" 'Eklenen tablonun ismini belirler
        .Columns.Append "AlanAdı1", , 50 'Tablodaki alan isimleri belirlenir,karakter uzunluğu 50
        .Columns.Append "AlanAdı2", , 40
        .Columns.Append "AlanAdı3", adCurrency 'Parasal biçim
   End With
Cat.Tables.Append NewTable 'Yaratılan tablo özelliklerini ekler
Set NewTable = Nothing
  
Set NewTable2 = CreateObject("ADOX.Table") 'İkinci tablo ekler
    With NewTable2
        .Name = "Tablo2"
        .Columns.Append "AlanAdı1"
    End With
Cat.Tables.Append NewTable2
Set NewTable2 = Nothing

Set NewTable3 = CreateObject("ADOX.Table")
    With NewTable3
        .Name = "TabloAdı3"
        .Columns.Append "AlanAdı1", adDate 'Tarih biçimi
        .Columns.Append "AlanAdı2", adBoolean 'Evet-Hayır biçimi
        .Columns.Append "AlanAdı3"
        .Columns.Append "AlanAdı4"
        .Columns.Append "AlanAdı5"
        .Columns.Append "AlanAdı6"
    End With
Cat.Tables.Append NewTable3
Set NewTable3 = Nothing

End Sub
olması gerekşyor.Fakat ne yazıkki
adBoolean
adDate
adCurrency
satırlarında hata veriyor.
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Sayın Tankut SAZLI tekrar rica ediyorum lütfen dediğim referansları ekleyiniz. Göreceksiniz ki bu sorun çözülmüş olacak. Birde referans ekleyerek deneyin. adBoolean yazan yeri silin ve Ctrl+Boşluk tuşlarına basın göreceksinizki VB6 size tercih edebileceğiniz değişken tiplerini sunacaktır.
 
Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Sayın Alpi;
Dediğinizi yapmak istemiştim fakat bahsettiğiniz components ler yok,bir türlü bulamadım defalarca kontrol etmeme rağmen.
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Birde

Kod:
.Columns.Append "AlanAdı3", ADODB.adCurrency
şeklinde deneyin.
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Son çare olarak şunu önereyim
sık kullanılan bazılarının numara olarak karşılığını verdim bu şekilde kullanın.
Kod:
adBoolean '11
adCurrency '6
adDate '7
adDouble '5
adEmpty '0
adInteger '3
adNumeric '131
kullanım şekli

Kod:
.Columns.Append "AlanAdı3", 6'adCurrency
 
Üst