• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

ACCDB Dosyası Oluşturma veya Editleme

Katılım
6 Kasım 2004
Mesajlar
481
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
 
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.
 
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

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
 
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
 
Zeki Bey;

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

.
 
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
 
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 :)
 
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

Güzel çalışma. Elinize sağlık.
 
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.
 
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.
 
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
 
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
 
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,

.
Öncelikle örneğiniz çok işime yaradı elinize sağlık
Ufak bir geliştirme için yardımınızı ihtiyacım var.
Örnek dosya kodların bulunduğu sayfadaki verileri accesse gönderiyor. Benim istediğim kapalı başka bir excel dosyasındaki dosyasındaki verileri sorgulayıp accese attırabilirmiyiz.

Tekrar teşekkür ederim.
 
Attırabiliriz..... (yapabiliriz anlamına geliyor)

.
 
Son düzenleme:
Ben de, kaydedebiliriz demek istemiştim. Tabii, örnek dosyaları görmek gerekir.... (Eğer vakit alan birşeyse, ücretli olarak destek verebilirim.)

.
 
Geri
Üst