Bir Klasörde Bulunan Txt Leri Accesste Tabloya Eklemek İstiyorum.

1 2
06/12/2023, 12:55

yasin273

Arkadaşlar merhaba, elimde aynı formatta olan ve içeriği sürekli değişen txt dosyaları var ve hep aynı klasör e kaydediliyor. Benim istediğim, Access e girip güncelle butonuna bastığımda bu metin dosyalarındaki verileri önceden ayarladığım formatı bozmayacak şekilde çeksin ve tabloyu güncellesin. böyle birşey mümkün mü? Access e çok uzağım o yüzden tam beceremiyorum bu işleri.

oluşturduğum tablo ve örnek txt dosyalarını ekledim. veri çekerken sınırlandırılmış ve # işaretinden sonra sütunlarda bölmeler yapılması gerekiyor.
txt dosyalarında bir sıralama yok tabloda ilk sütuna 1.2.3.4 diye sıralama eklersek veri yapısı bozulur mu bilemedim, bozulmazsa onu da ekleyebiliriz.

ben accessi açıp butona bastığımda tüm klasördeki bu dosyaları tarayıp güncel olarak bu tabloya atmasını istiyorum.

şimdiden teşekkürler.
06/12/2023, 17:17

berduş

yapılabilir ama şöyle bir durum var metin dosyalarınızda benzersiz bir alan yok o nedenle  veri her alındığında klasörde eğer daha önce veri alınmış txt dosyası varsa aynı veriler yeniden eklenir.
06/12/2023, 17:19

yasin273

zaten sorun orda çıkıyor hocam, muhtemelen kodlarla bişeyler yapılması lazım.
07/12/2023, 00:04

atoykan

Bu benzer konuda 2. mesajda paylaştığım kod bu işlemde uyarlanabilir. txt dosylarının adlarında değişiklik yok ise ve veriler sonradan alt satırlara ekleniyorsa tablodaki kayıt sayısı satır no olarak belirlenerek txt dosyalarından aktarım yapılabilir. Yılsonu telaşları ve fail olmaya doğru giden bir proje nedeni ile malesef çok ciddi zaman sorumun var o yüzden detaylı inceleyip çalışma şansı bulamıyorum konu ile ilgili ama hem size hem Kıymetli @berduş hocama yol gösterebilir.
07/12/2023, 02:03

berduş

1 - ekte de göreceğiniz gibi Access tablonuzdaki hisse adı alanını metin/string yapıp, yeni bir ID (Otomatik sayı) alanı ekledim
yani önce tablo yapınızı değiştirmeniz gerekiyor
2 - aşağıdaki kod sadece Access ile aynı dizinde bulunan IMKBH'ANGEN.txt dosyası için
(ihtiyaç halinde belli bir klasördeki tüm txt dosyalarının seçilmesi sağlanabilir)
3 - aşağıdaki kod bir butona atanmalı

Sub txtVeriAl() 
Dim s As Object
Fname$ = CurrentProject.Path & "\IMKBH'ANGEN.txt"

' Dim s As New adodb.stream
Set s = CreateObject("adodb.stream")
s.Charset = "utf-8"
s.Open
s.LoadFromFile (Fname$)

Dim txt As String
txt = s.readText

s.Close

dzStr = Split(txt, vbNewLine)
For x = LBound(dzStr) To UBound(dzStr)
If Len(dzStr(x) & "") = 0 Then GoTo SonStr
dzstn = Split(dzStr(x), "#")
xDeger = " """ & dzstn(0) & """"
xDeger = xDeger & ", '" & dzstn(1) & "'"
xDeger = xDeger & ", " & CLng(CDate(dzstn(2)))
xDeger = xDeger & ", " & Replace(CDbl(CDate(dzstn(3))), ",", ".")
xDeger = xDeger & ", " & dzstn(4)
xDeger = xDeger & ", " & Replace(dzstn(5), ",", ".")
xDeger = xDeger & ", '" & dzstn(6) & "'"
xDeger = xDeger & ", '" & dzstn(7) & "'"

'IMKBH'ANGEN#ALIS#2023.12.05#10:05:55#371#14,45#İlk Alım#0
strSQL = "INSERT INTO [Veritabanı] ("
strSQL = strSQL & " [Hisse Adı]"
strSQL = strSQL & ", [İşlem Türü]"
strSQL = strSQL & ", [Tarih]"
strSQL = strSQL & ", [Saat]"
strSQL = strSQL & ", [Adet]"
strSQL = strSQL & ", [Fiyat]"
strSQL = strSQL & ", [Açıklama]"
strSQL = strSQL & ", [Yöntem]"

strSQL = strSQL & ") VALUES ("
strSQL = strSQL & xDeger
strSQL = strSQL & ")"

CurrentDb.Execute strSQL
' DoCmd.RunSQL strSQL
SonStr:
Next x
KlnSQL = " (SELECT First(Veritabanı.ID)"
KlnSQL = KlnSQL & " FROM Veritabanı"
KlnSQL = KlnSQL & " GROUP BY [Hisse Adı] & [İşlem Türü] & [Tarih] & [Saat] & [Adet] & [Fiyat] & [Açıklama] & [Yöntem] & '')"

SilSQL = " delete * from [Veritabanı]"
SilSQL = SilSQL & " where [ID] Not IN (" & KlnSQL & ")"
CurrentDb.Execute SilSQL
' DoCmd.RunSQL SilSQL

End Sub
07/12/2023, 02:11

berduş

(07/12/2023, 00:04)atoykan yazdı: Bu benzer konuda 2. mesajda paylaştığım kod bu işlemde uyarlanabilir. txt dosylarının adlarında değişiklik yok ise ve veriler sonradan alt satırlara ekleniyorsa tablodaki kayıt sayısı satır no olarak belirlenerek txt dosyalarından aktarım yapılabilir. Yılsonu telaşları ve fail olmaya doğru giden bir proje nedeni ile malesef çok ciddi zaman sorumun var o yüzden detaylı inceleyip çalışma şansı bulamıyorum konu ile ilgili ama hem size hem Kıymetli @berduş hocama yol gösterebilir.

teşekkürler @atoykan hocam
metin dosyalarının yapısı farklı olduğu için farklı bir yöntem kullandım
1 2