Skip to main content

AccessTr.neT


N Kadar CSV Dosyasını Access İçine Atmak

N Kadar CSV Dosyasını Access İçine Atmak

Çözüldü #1
Değerli Üstadlarım,

Bir klasörüm var. Bu klasör içerisinde n kadar csv formatında Excel dosyası var.
Access veritabanımda bir form olsa ve bir de browser - gözat penceresini çalıştıran bir buton olsa, bastığımda göz at penceresi açılsa, çoklu olarak Excel dosyalarını seçip OK butonuna bastığımda tüm Excel dosyaları Access içerisindeki bir tabloda toplanabilir mi?

Ya da form üzerindeki bir buton olsa bastığımda browser açılsa tek tek Excel dosyalarını seçip içeri atıp append query yapabilir miyim? 

64 bitte çalışan ve Browser (gözat penceresini ) açan kodu bulamadım. office sürümüm: office 365

Dosyaları sizinle ekte paylaştım.
şimdilik bu üç Excel dosyasını - ama yarın 30 da olabilir- bir kerede bir tabloya append edebilmek için desteklerinizi rica ederim.

Teşekkürler.
Sağlıklı kalın.
.rar Desktop.rar (Dosya Boyutu: 17,75 KB | İndirme Sayısı: 3)
Teşekkürler,
Saygılarımla,

Power BI İş Analitiği Danışmanı

Ali Yüzen
Cevapla
#2
(23/10/2020, 22:18)aliyuzen yazdı: browser - gözat penceresini çalıştıran bir buton olsa

Merhaba alttaki gibi kod işinizi görmez mi?
Denemedim lakin olacağını sanıyorum örnek açısından.Kodu internetten bulup ekledim.
Heralde multiselect=true gibi bir özellikte vardı unuttum.

Sub SelectFolder4()
Dim sFolder As String
' Open the select folder prompt
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\Windows\"
If .Show = -1 Then ' if OK is pressed
sFolder = .SelectedItems(1)
End If
End With

If sFolder <> "" Then ' if a file was chosen
' *********************
' put your code in here
' *********************
End If
End Sub

Alttaki kod heralde file için önceki klasör olması gerek.

Private Sub cmdFileDialog_Click() 

' Requires reference to Microsoft Office 11.0 Object Library.

Dim fDialog As Office.FileDialog
Dim varFile As Variant

' Clear listbox contents.
Me.FileList.RowSource = ""

' Set up the File Dialog.
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

With fDialog

' Allow user to make multiple selections in dialog box
.AllowMultiSelect = True

' Set the title of the dialog box.
.Title = "Please select one or more files"

' Clear out the current filters, and add our own.
.Filters.Clear
.Filters.Add "Access Databases", "*.MDB"
.Filters.Add "Access Projects", "*.ADP"
.Filters.Add "All Files", "*.*"

' Show the dialog box. If the .Show method returns True, the
' user picked at least one file. If the .Show method returns
' False, the user clicked Cancel.
If .Show = True Then

'Loop through each file selected and add it to our list box.
For Each varFile In .SelectedItems
Me.FileList.AddItem varFile
Next

Else
MsgBox "You clicked Cancel in the file dialog box."
End If
End With
End Sub
Cevapla
#3
1-İlk önce menüden Dışveri/Al/Metin Dosyası na tıklayın.
2-Gözat dan csv dosyalarınızdan birini seçin.
3-Açılan Metin Alma sihirbazında Sınırlanmışı seçip, ileriyi tıklayın.
4-"İlk Satır Alan Adlarını İçerir" onaylayıp, ileriyi tıklayın.
5-"Birincil Anahtar Olmasın" onaylayıp, ileriyi tıklayın.
6-Metin Alma Sihirbazında Sol altta bulunan "Gelişmiş" Düğmesine tıklayın.
7-Açılan İletişim kutusunda "Farklı Kaydet" düğmesine tıklayın.
8-Yine açılacak İletişim kutusuna herhangi bir isim yazıp "Tamam" düğmesini tıklayın
9-"Farklı Kaydet" Düğmesinin üstündeki "Tamam" düğmesine tıklayın.
10-"Son" düğmesine tıklayın.
11-"Kapat" düğmesini tıklayın.
Yukardaki tüm işlemleri 8. maddede belirtilen işlem içindi.
Bir form oluşturun, formda 1 adet Liste kutusu, bir adette düğme olsun.
Liste kutusunun özelliklerinde
"Satır Kaynak Türü" = Değer
"Çoklu Seçim" = Basit
olarak ayarlayın.
Formun Kod Modülüne aşağıdaki kodlarını kendinize uyarlayarak yapıştırın
Kod:
Private Sub Form_Load()
Dim ds, dc, f, s
Set ds = CreateObject("Scripting.FileSystemObject")
Set f = ds.GetFolder(Application.CurrentProject.Path)
Set dc = f.Files
For Each Dosya In dc
If Right(Dosya.Name, 3) = "csv" Then Liste0.AddItem Dosya.Name
Next
End Sub
Private Sub Komut2_Click()
    For Each varItm In Liste0.ItemsSelected
        DoCmd.TransferText acImportDelim, "isim", "ali", Application.CurrentProject.Path & "\" & Liste0.ItemData(varItm), True, ""

    Next varItm
End Sub

Son Düzenleme: 24/10/2020, 12:02, Düzenleyen: alicimri.
Cevapla
#4
Üstadlarım,

Desteğiniz ile veritabanını bir yere kadar getirdim.

Öncelikle, denemek için ekteki dosyaları masaüstünde bir klasöre çıkartabilir misiniz?
Şimdi de, Access dosyasını çalıştırdığınızda Form1 isimli formu çalıştırınız.

Talebim şu şekilde;
1. Yol:
Aynı klasörde olduğu için listbox a csv dosyaları şu an geliyor.
Tüm bu csv dosyalarını seçsek ve form üzerinde bir buton oluştursak ve bastığımda da bu csv dosyaları bir kerede bir tabloya append edilebilir mi?

2. Yol:
Yukarıda bahsettiğim konudan bağımsız olarak sadece command2 butonunu tıkladığımda gözat penceresi şu anda geliyor. Bu pencereden AYNI ANDA tüm csv dosyalarını seçip bir tabloya append edebilir miyim?

Bu iki yoldan birini yapabilir miyiz?

Beni aşan bir kod yapısı var ve ben ne yazık ki bu konuda zayıfım.


Değerli vaktinizi ayırıp destek olabilirseniz çok sevinirm. Teşekkürler.
.rar Desktop.rar (Dosya Boyutu: 931,67 KB | İndirme Sayısı: 0)
Teşekkürler,
Saygılarımla,

Power BI İş Analitiği Danışmanı

Ali Yüzen
Son Düzenleme: 24/10/2020, 13:46, Düzenleyen: aliyuzen.
Cevapla
#5
yalnız eklediğiniz CSV dosyalarında 3 sorun var
1. alanlar ; ile ayrılmış oysa TransferText metodu sadece virgül "," ile ayrılmış alanları tanıyor bu nedenle de sadece 1 alan görüyor
2. ; ile , değiştirip almaya çalıştığımızda bu sefer de Plugin ID alanını Plugin ID olarak, Dosya Adı alanını da Dosya Adı olarak alıyor bu nedenle de ALL Excel File tablosuna ekleyemiyor
3. tablonuzda tüm alanlar Dosya Adı dışında sayı türünde oysa csv dosyanızda hem sayısal hem de metin var
aşağıdaki kod sadece seçtiğiniz dosyaların isimlerini ekrana yazmaya yarar yani kod sadece dosya seçmek için
Dim DosyaBul As Object
Dim vrtSelectedItem As Variant
Dim tblAdi, Tur As String
Set DosyaBul = Application.FileDialog(3)

With DosyaBul
.AllowMultiSelect = True
.ButtonName = "Dosya Seç"

.Filters.Clear
.Filters.Add "CSV Dosyası", "*.csv"
' .Filters.Add "Excel", "*.xls,*.xlsx,*.xlsm"
.Filters.Add "Hepsi", "*.*"
.FilterIndex = 0
.Title = "Seç..."
If .Show = True Then
For Each vrtSelectedItem In .SelectedItems
Debug.Print vrtSelectedItem
msgbox vrtSelectedItem
Next vrtSelectedItem
Else
Exit Sub
End If
End With
Cevapla
#6
aşağıdaki dosya önce CSVAktar tanım dosyası oluşturularak yapılan bir çalışmadır, tüm alanlar kısa metin türünde ayarlanmıştır. dilerim işinize yarar
Buton kodu
Private Sub BtnCSVAl_Click()

Dim DosyaBul As Object
Dim vrtSelectedItem As Variant
Dim tblAdi, Tur As String
Set DosyaBul = Application.FileDialog(3)
'"CSVAktar" dosyasını biz oluşturup kaydettik
With DosyaBul
    .AllowMultiSelect = True
    .ButtonName = "Dosya Seç"

    .Filters.Clear
    .Filters.Add "CSV Dosyası", "*.csv"
'    .Filters.Add "Excel", "*.xls,*.xlsx,*.xlsm"
    .Filters.Add "Hepsi", "*.*"
    .FilterIndex = 0
    .Title = "Seç..."
        If .Show = True Then
            For Each vrtSelectedItem In .SelectedItems
            DoCmd.TransferText acImportDelim, "CSVAktar", "ALL Excel File", vrtSelectedItem, True, ""
           
            Next vrtSelectedItem
        MsgBox "Kopyalama Bitti"
        Else
        MsgBox "Kopyalama iptal edildi"
        Exit Sub
        End If
End With

End Sub
.rar CSV_Import_iceAktar_hy.rar (Dosya Boyutu: 21,11 KB | İndirme Sayısı: 18)
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da