ACCDB Dosyası Oluşturma veya Editleme

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
193
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
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
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,106
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
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
10,367
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
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

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,106
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
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
193
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
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
10,367
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
Zeki Bey;

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

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,106
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
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
193
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
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
10,367
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
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

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,444
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Güzel çalışma. Elinize sağlık.
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,282
Excel Vers. ve Dili
Office 365 Ev x64 TR- Windows 10 Home Single Language x64 TR
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
Katılım
19 Ağustos 2004
Mesajlar
3,282
Excel Vers. ve Dili
Office 365 Ev x64 TR- Windows 10 Home Single Language x64 TR
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
736
Excel Vers. ve Dili
Ofis 2007
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
 

ASMET67

Altın Üye
Altın Üye
Katılım
8 Haziran 2007
Mesajlar
400
Excel Vers. ve Dili
Excel 2016
Merhaba
Access dosyası oluşturmak için Haluk beyin 10. mesajındaki exceli kullanıyorum Kendisine çok teşekkürler ellerine sağlık.
Dosyayı farklı projelerde kendime uyarken bir sorum olacak.
Access tablosundaki kolnların tipleri içeren bir liste var mı? Mesala aşağıdaki Tarih formatı için 7, Txt formatı içinde 202 var dosyada ama Bolen, Sayı Saat gibi formaların kodları nedir.

adoxColumn.Type = 7
 
Üst