ACCDB Dosyası Oluşturma veya Editleme

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
189
Beğeniler
47
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
#1
Merhaba,

Bilgisayarımda access yüklü değil. xlsx uzantılı bir dosyayı accdb olarak nasıl kaydedebilirim? Fikriniz var mı? Veya başka bir çözümünüz var mı?

Teşekkürler
 
Katılım
31 Aralık 2005
Mesajlar
3,793
Beğeniler
148
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
#2
Bunun için MS Jet Sql in desteklediği "Into" deyimi ile yapılması oldukça kolaydır. Bu iki Access arasında oluyordu. Belki Excel de destekliyordur; denemedim.

Cümleyi tam hatırlayamadığım için evdeki bilgisayarıma bakmam gerek. Belki bu arada cevap başka bir üyemizden cevap gelebilir.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
7,566
Beğeniler
744
Excel Vers. ve Dili
32 Bit 2010 - İngilizce
#3
Gerçi bu konularda Zeki Bey üstadtır ama ben ekte eski bir dosyamı veriyorum.

Bu dosyada; bilgisayardaki mevcut C:\TestFolder klasöründe MyDb.mdb isimli bir dosya oluşturuluyor ve Excel çalışma sayfasındaki veriler bu dosyaya aktarılıyor. Bende de MS Access olmadığı için, gerektiğinde buna benzer bir kodla gerekli mdb dosyasını oluşturuyorum.

Belki işinize yarar,

.
 

Ekli dosyalar

Katılım
31 Aralık 2005
Mesajlar
3,793
Beğeniler
148
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
#4
Bilgisayarımda DAC (Data Access Component) ler bozulduğu için ADOX ile yeni nesil Access dosyası (accdb) oluşturamadım. Bu nedenle örnek olması açısından Haluk Bey'in dosyasını kullanarak bir kod yazdım.

Dosyada ilk önce "mdb dosyası oluştur" butonuyla Access dosyası oluşturduktan sonra aşağıdaki proseduru kullanarak örnek dosyadaki veriler mdb dosyasına aktarılacaktır.

Sql kullanarak yapılan bu aktarım, döngü yoluyla veri aktarımından kat kat hızlı olacaktır.

Not: Dosyada hücre kullanım aralığı çok fazla olduğundan, "null değer girilemez" hatasını atlamak için "[Sheet1$A1:C31]" biçiminde bir aralık tanımlanmıştır.

PHP:
Sub InsertToMDB()

    Dim cn As Object  

    Set cn = CreateObject("ADODB.Connection")  

    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TestFolder\MyDB.mdb"  

    cn.Execute _
        "INSERT INTO MyTable (Firma, Borc, Tarih) " & _
        "SELECT [Firma Adı], [Borcu], [Vade Tarihi] FROM [Sheet1$A1:C31] " & _
        "IN '' [EXCEL 8.0;DATABASE=" & ThisWorkbook.FullName & "]"  

    cn.Close  

    Set cn = Nothing

End Sub
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
189
Beğeniler
47
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
#5
Teşekkür ederim ama sınıf kaydedilmemiş hatası verdi. :(

adoxCat.Create strConnect satırında.

Office 2016 64 bit kullanıyorum. Yaptığım araştırmalara göre "Microsoft.Jet.OLEDB.4.0" 64 bit desteklemiyormuş.
Microsoft Access Database Engine 2016 indirdim ama aynı hata devam ediyor





Kod:
Sub CreateMDB()
    Dim adoxCat As Object
    Dim adoxTable As Object
    Dim adoxColumn As Object
    Dim strConnect As String
    Dim strDBpath As String
    
    strDBpath = "C:\TestFolder\MyDb.mdb"
    
    If Dir(strDBpath) = Empty Then
        Set adoxCat = CreateObject("ADOX.Catalog")
        
        strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & strDBpath
        
        adoxCat.Create strConnect
        
        Set adoxTable = CreateObject("ADOX.Table")
        adoxTable.Name = "MyTable"
        
        Set adoxColumn = CreateObject("ADOX.Column")
            adoxColumn.Name = "Firma"
            adoxColumn.Type = 202
        adoxTable.Columns.Append adoxColumn
        
        Set adoxColumn = CreateObject("ADOX.Column")
            adoxColumn.Name = "Borc"
            adoxColumn.Type = 6
        adoxTable.Columns.Append adoxColumn
        
        Set adoxColumn = CreateObject("ADOX.Column")
            adoxColumn.Name = "Tarih"
            adoxColumn.Type = 7
        adoxTable.Columns.Append adoxColumn
        
        adoxCat.Tables.Append adoxTable
        
        MsgBox strDBpath & " basariyla olusturuldu ...", vbInformation, "ExcelToMDB"
        Exit Sub
        
        Set adoxColumn = Nothing
        Set adoxTable = Nothing
        Set adoxCat = Nothing
    Else
        MsgBox strDBpath & " dosyasi bulundu ...", vbInformation, "ExcelToMDB"
    End If
End Sub
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
7,566
Beğeniler
744
Excel Vers. ve Dili
32 Bit 2010 - İngilizce
#6
Zeki Bey;

"INSERT INTO" çok pratik, kısa ve hızlı bir yöntem. Teşekkürler...

.
 
Katılım
31 Aralık 2005
Mesajlar
3,793
Beğeniler
148
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
#8
Rica ederim Haluk Bey.

Office 2016 64 bit kullanıyorum. Yaptığım araştırmalara göre "Microsoft.Jet.OLEDB.4.0" 64 bit desteklemiyormuş.
Microsoft Access Database Engine 2016 indirdim ama aynı hata devam ediyor
MS Jet 4.0 sağlayıcısı, yalnız 32 bit destekliyor. Office 2016 32/64 bit için connection string'i aşağıdaki ile değiştirin. DAC 'ı doğru yüklediyseniz sorun çıkmaması lazım. Ayrıca "accdb" biçimli dosya da oluşturabilirsiniz...

PHP:
strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & strDBpath
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
189
Beğeniler
47
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
#9
Haluk Bey ve Zeki Bey,

Çok teşekkür ederim. Talimatlarınızı uyguladığımda sorunsuz çalıştı.

Allah razı olsun. Tekerinize taş değmesin :)
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
7,566
Beğeniler
744
Excel Vers. ve Dili
32 Bit 2010 - İngilizce
#10
Sayın tugkan;

Allah sizden de razı olsun, teşekkürler.

Bu arada; benim (ADO-For Next) ve Zeki Beyin (SQL- Insert Into) önerdiği yöntemlerin her ikisinin de yer aldığı, hem 32 bit hem de 64 bit ortamda çalışabilecek şekilde Office 2010 ile hazırladığım dosya ektedir. Denemedim ama, yukarıdaki mesajlara göre Office 2016 gibi daha ileri versiyonda da çalışması beklenmektedir.

Tartışılan konuların birlikte yer aldığı bir dosya olması nedeniyle, ileride ihtiyaç duyabilecek üyeler açısından faydalı olacaktır.

Selamlar,

.
 

Ekli dosyalar

assenucler

Altın Üye
Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
2,809
Beğeniler
49
Excel Vers. ve Dili
Office 365 Bireysel TR 32- Windows 10 Home x64 TR
#12
Sayın tugkan;

Tartışılan konuların birlikte yer aldığı bir dosya olması nedeniyle, ileride ihtiyaç duyabilecek üyeler açısından faydalı olacaktır.

Selamlar,
.
Sayın Haluk,

Office 365 Ev Ekstra sürümü kullanıyorum. C:\TestFolder klasöründe MyDb.mdb uzantılı dosya oluştu. Daha sonra mdb uzantısını accdb' çevirdiğimde, dosya verili olarak sorunsuz açıldı.

Size ve Zeki Gürsoy'a katkı ve paylaşımınız için teşekkürler.
 

assenucler

Altın Üye
Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
2,809
Beğeniler
49
Excel Vers. ve Dili
Office 365 Bireysel TR 32- Windows 10 Home x64 TR
#13
Office 365 2019 bireysel sürümü kullanıyorum. C' de TestFolder klasörü yaratıldıktan sonra MDB Dosyası oluştur'a tıklanınca, açılan dizinde bu kez boş bir verisiz MyDb.accdb dosyası oluştu. Dataları MDB'ye aktar'a basınca, veriler .accdb'e aktarıldı.

Sayın Haluk ve Sayın Zeki Gürsoy'a katkı ve paylaşımları için, tekrar teşekkür eder. Saygılar sunarım.
 
Katılım
12 Aralık 2015
Mesajlar
667
Beğeniler
21
Excel Vers. ve Dili
Ofis 2007
#14
Alternatif olsun dosya isimleri ve yolları ile sayfa ve tablo isimlerini kendinize uyarlayın
Kod:
Sub aktar()
Dim oCatalog As Object
Set oCatalog = CreateObject("ADOX.Catalog")
oCatalog.Create "provider='Microsoft.ACE.OLEDB.12.0';" & "Data Source=D:\DB.accdb"
Set oCatalog = Nothing
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "D:\DB.accdb"
appAccess.DoCmd.TransferSpreadsheet acImport, 10, "Table", "D:\Excel.xlsm", True, "Sayfa!A1:C31"
appAccess.CloseCurrentDatabase
Set appAccess = Nothing
End Sub
 
Üst