Dosyaları Alt Alta Birleştirme

1 2 3 4 5 6 7 8 9
05/03/2020, 12:14

incsoft

Mesela excel'de iken ismi  Std.Mt.Anh.      olan  bir alan excelden access'e aktarıp database dosyası oluşturduğumda      StdMtAnh     haline dönüşüyor bu sonradan üzerine ekleme yaparken diğer Excel dosyasında bu alanlar eşitlenmediğinden aktarma yapmıyor. Her defasında excel'de birleştirip 800.000 satırı database dosyası yapmakta çok zaman alıyor. Eğer buda olmazsa işimi buda çözemeyecek maalesef... Bu neden oluyor olabilir arkadaşlar? Access 2010 kullanmaktayım.  Teşekkürler.

Örnek alanlar
Std.Mt.Anh. = StdMtAnh
Döküman Rev. = Döküman Rev
İşlem plan no. = İşlem plan no
05/03/2020, 13:47

ozanakkaya

Merhaba, accessde, tablodaki alan adlarında noktalama işareti kullanamazsınız. Accesse veriyi Vba kodları ile tablodaki sırası veya alan adını belirterek almalısın.

Dim lngColumn As Long
Dim xlx As Object, xlw As Object, xls As Object, xlc As Object
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim blnEXCEL As Boolean

blnEXCEL = False

On Error Resume Next
Set xlx = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
      Set xlx = CreateObject("Excel.Application")
      blnEXCEL = True
End If
Err.Clear
On Error GoTo 0

xlx.Visible = True

Set xlw = xlx.Workbooks.Open(CurrentProject.Path & "\exceldokuman.xlsx", , True)


Set xls = xlw.Worksheets("Sayfa1")


Set xlc = xls.Range("A2")

Set dbs = CurrentDb()


Set rst = dbs.OpenRecordset("tbl_tablo1", dbOpenDynaset, dbAppendOnly)

On Error Resume Next
Do While xlc.Value <> ""
      rst.AddNew
            For lngColumn = 0 To rst.Fields.Count
             
                  rst.Fields(lngColumn).Value = xlc.Offset(0, lngColumn).Value
            Next lngColumn
      rst.Update
      Set xlc = xlc.Offset(1, 0)
Loop

rst.Close
Set rst = Nothing

dbs.Close
Set dbs = Nothing


Set xlc = Nothing
Set xls = Nothing
xlw.Close False
Set xlw = Nothing
If blnEXCEL = True Then xlx.Quit
Set xlx = Nothing


Üstteki kod, Access uygulamanızla aynı dizindeki exceldokuman.xlsx isimli Excel belgesinin Sayfa1 sayfasındaki verileri, tbl_tablo1 isimli tabloya aktarır.
05/03/2020, 13:50

berduş

Sayın incsoft açtığınız 3 konu da bir biriyle ilişkili. takip açısından bir soruyu sorduğunuzda alınan cevap sorunlu ise lütfen aynı konu altında sorunuza devam edin farklı bir sorunsa yeni konu açın.
Ve lütfen açtığınız her konuya olumlu ya da olumsuz geri dönün.
https://accesstr.net/konu-excelden-veri-...#pid163964 bu bağlantıda 4 farklı yöntemle excelden accesse veri aktarılmış, benim tavsiyem 4. yöntemi uygulamanızdır.
Temel mantık:
1 - ilgili Excel dosyası geçici olarak oluşturulan "TmpTablo"'na bağlanıyor
2 - oluşturulan bu geçici tablodaki veriler "insert" sorgusu kullanılarak istenilen tabloya ekleniliyor.

çalışmanızı eklerseniz çözüm bulmak kolaylaşır
iyi çalışmalr
05/03/2020, 14:06

incsoft

(05/03/2020, 13:47)ozanakkaya yazdı: Merhaba, accessde, tablodaki alan adlarında noktalama işareti kullanamazsınız. Accesse veriyi Vba kodları ile tablodaki sırası veya alan adını belirterek almalısın.

Dim lngColumn As Long
Dim xlx As Object, xlw As Object, xls As Object, xlc As Object
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim blnEXCEL As Boolean

blnEXCEL = False

On Error Resume Next
Set xlx = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
      Set xlx = CreateObject("Excel.Application")
      blnEXCEL = True
End If
Err.Clear
On Error GoTo 0

xlx.Visible = True

Set xlw = xlx.Workbooks.Open(CurrentProject.Path & "\exceldokuman.xlsx", , True)


Set xls = xlw.Worksheets("Sayfa1")


Set xlc = xls.Range("A2")

Set dbs = CurrentDb()


Set rst = dbs.OpenRecordset("tbl_tablo1", dbOpenDynaset, dbAppendOnly)

On Error Resume Next
Do While xlc.Value <> ""
      rst.AddNew
            For lngColumn = 0 To rst.Fields.Count
             
                  rst.Fields(lngColumn).Value = xlc.Offset(0, lngColumn).Value
            Next lngColumn
      rst.Update
      Set xlc = xlc.Offset(1, 0)
Loop

rst.Close
Set rst = Nothing

dbs.Close
Set dbs = Nothing


Set xlc = Nothing
Set xls = Nothing
xlw.Close False
Set xlw = Nothing
If blnEXCEL = True Then xlx.Quit
Set xlx = Nothing


Üstteki kod, Access uygulamanızla aynı dizindeki exceldokuman.xlsx isimli Excel belgesinin Sayfa1 sayfasındaki verileri, tbl_tablo1 isimli tabloya aktarır.
Öncelikle teşekkürler Ozan bey..  Peki şöyle yapabilmem mümkünmüdür?  Mesela Access database dosyam crystal.mbd ve Sayfa1 tablosu var.. Alacağım dosyada donemoncesi.xlsx  ve Sayfa1 ya da herhangi bir sayfa... Bu verilerin hepsini alıp crystal.mdb de bulunan Sayfa1 database'ine eklemesi mümkünmüdür?
05/03/2020, 14:10

incsoft

(05/03/2020, 13:50)berduş yazdı: Sayın incsoft açtığınız 3 konu da bir biriyle ilişkili. takip açısından bir soruyu sorduğunuzda alınan cevap sorunlu ise lütfen aynı konu altında sorunuza devam edin farklı bir sorunsa yeni konu açın.
Ve lütfen açtığınız her konuya olumlu ya da olumsuz geri dönün.
https://accesstr.net/konu-excelden-veri-...#pid163964 bu bağlantıda 4 farklı yöntemle excelden accesse veri aktarılmış, benim tavsiyem 4. yöntemi uygulamanızdır.
Temel mantık:
1 - ilgili Excel dosyası geçici olarak oluşturulan "TmpTablo"'na bağlanıyor
2 - oluşturulan bu geçici tablodaki veriler "insert"  sorgusu kullanılarak istenilen tabloya ekleniliyor.

çalışmanızı eklerseniz çözüm bulmak kolaylaşır
iyi çalışmalr

Kusura bakmayın onu unuttum hocam
05/03/2020, 14:14

berduş

o mesajda verdiğim bağlantıyı inceleyebildiniz mi?
Yahya beyin de sorunu hemen hemen aynıydı, eğer tüm Excel dosyalarında kullanılan şablon aynıysa orda kullanılan 4. yöntem işinize yarayabilir.
17. sayfadaki 98. mesaj
1 2 3 4 5 6 7 8 9