Skip to main content

AccessTr.neT


txt dosyasına ve txt dosyasından aktarım (vba ile)

txt dosyasına ve txt dosyasından aktarım (vba ile)

Çözüldü #1
Selamlar,
VBA kodu ile bir txt dosyasından bir tabloya veri almak ve bir bir tablodaki veriyi txt dosyası olarak kaydetmem gerekiyor.

Forum baktığım örneklerde access'in otomatik işlevlerinden yararlanılmış. Ama benim bunu vb ile yapmam gerekiyor. Daha önce Excel'de bununla ilgili kodlar hazırlamıştım ama bunlar Access'te (2007) çalışmadı maalesef.

Txt dosyasından veri alırken dosyanın yerini kullanıcı seçmeli, txt dosyasına kaydederken de dosyanın kaydedileceği kullanıcı seçmeli.

Sonra satırları elde edebilsem yeter. Bunları mid ile ayırır, INSERT sorgusuyla kaydedebilirim ben (diğer kısımlar exceldeki gibi çalışırsa tabi).

Excel'de hazırladığım txt'den okuma kodunun, dosya açma ve satır okuma kısmı şöyle:

Sub txt_donustur()
Dim f_sistem As New FileSystemObject
Dim dosya As TextStream
Dim satir As String, i As Integer
Dim bir As String, iki As String, uc As String, dort As String

On Error GoTo hata

Set dosya = f_sistem.OpenTextFile(Application.GetOpenFilename, ForReading)

i = 1

Do While True
If dosya.AtEndOfStream = True Then Exit Do
satir = dosya.ReadLine
Cells(i, 1).Value = satir
i = i + 1
Loop

tabii ki bu kodun gerisi de var. ama ben bu kadarını Access'te nasıl yapabileceğimi öğrensem gerisini getirebileceğimi düşünüyorum. Ayrıca bu kodun bir kısmını Excel'in makro kaydetme işleviyle elde etmiştim.

Yine Excel'de hazırlamış olduğum txt'ye aktarma kodunun kaydetme penceresi açma kısmı şöyle:

isim = Application.GetSaveAsFilename("", "Metin Dosyası,*.txt", i, "Kaydet")

If isim = False Then Exit Sub

vb kodunun bu dosyaya kayıt aktaran kısmı da şöyle:

'********İLK SATIR OLUŞTURULUYOR*************************
Open isim For Output As #1
Print #1, "XX" & sube_kodu & "00" & firma_kodu & UserForm1.combo_mue.Value
Close #1
'*********************************

'********KAYITLAR GİRİLİYOR*******************************
Open isim For Append As #1

Do Until ActiveCell = Cells(65536, 1).End(xlUp).Offset(1, 0)

hesapno = ActiveCell.Offset(0, 3).Value
kisiadi = ActiveCell.Offset(0, 1).Value & " " & ActiveCell.Offset(0, 2).Value
tutar = ActiveCell.Offset(0, 4).Value

If Len(kisiadi) > 25 Then
kisiadi = Mid(kisiadi, 1, 25)
End If

bosluk = Space(25 - Len(kisiadi))
sifir1 = String(13 - Len(Format(tutar, "###.00")), "0")


If ActiveCell.Offset(0, 5) = "HATALI BANKA" Or ActiveCell.Offset(0, 5).Value = "ÖDENEK HATALI" Then GoTo devam
Print #1, kisiadi & bosluk & hesapno & sifir1 & Format(tutar, "###.00") & sube_kodu & sifir & ActiveCell.Value & aydonustur(ay) & Space(7 - Len(aydonustur(ay))) & yil & " " & aciklama
kisi = kisi + 1
toplam_tutar = toplam_tutar + tutar
devam:
ActiveCell.Offset(1, 0).Select
Loop
Close #1
'***********************************************************

Saygılarımla...
Cevapla
Çözüldü #2
Sayın WiniFred;
Metin dosyasına transfer için ekteki çalışmam sizin için idealdir. Metin dosyasından Accesse aktarma konusunda Access yeterince mahir bir programdır. İnceleyin sonucu ile ilgili dönüş yapınız.
TXT Yapmak
Cevapla
Çözüldü #3
Sayın Kur@l;
cevabınız için çok teşekkür ederim. Çalışmanız da harika, yapmak istediğim şeylerin tamamına yakını mevcut ve kesinlikle yararlanacağım.

Yalnızca dosyanın yerini ve dosyayı kullanıcının bir "aç" ve "kaydet" penceresinden seçebilmesini istiyorum. Bence bu başkalarının kullanacağı bir uygulama için son derece önemli, olması gereken bir özellik.

Metin dosyasından Access'e aktarma konusunu Access'te tam olarak incelemedim ama tahminimce, aynen yukarıdaki örneğimdeki gibi alınacak satırlarla ilgili bir takım işlemler yaptıktan sonra tabloya aktarmam gerekeceği için bana pek yardımcı olamayacak gibi geliyor.

Bu iki transfer meselesi excel'de bu kadar kolay iken (ki excel'de de metin dosyasını excel'e aktarma konusunda çok güzel bir sihirbaz var, ama işimi görmüyor, çünkü o uygulamayı da başkaları kullanıyor ve 1-2 tıklamayla halledilebilecek bir hale getirmiştim olayı) access'te neden bu kadar sıkıntılı olmuş, microsoft bunu yaparken aklında ne varmış anlamadım gitti.

Keşke excel'le aynı kodlar ile yapılabilseydi (sadece hücreler yerine recordset kullansaydık), çok iyi olurdu.
Cevapla
Çözüldü #4
Sizin için bir örnek hazırlıyorum bakalım neye benzeyecek 1-2 saat sürer... Eğer bu süre zarfında buralarda olursanız memnun olurum.
Cevapla
Çözüldü #5
Uğraşa uğraşa istediğim şeyi nasıl yapacağımı buldum. Dosya Aç ve Kaydet pencerelerini nasıl açtıracağımı ve dosya yolunu nasıl seçtirebileceğimi buldum. Sanırım gerisini de sizin yukarıda vermiş olduğunuz çalışmanız yardımıyla çözebilirim. umarım bu mesajımı görürsünüz de daha fazla uğraşmazsınız.

İlginize, emeğinize sağlık Sayın Kur@l, çok teşekkür ederim.

Private Sub btnGozat_Click()

On Error GoTo hata

With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Filters.Add "Metin Dosyası", "*.txt", 1
' .InitialFileName = "*.txt"
.Show

txtDosyaYolu = .SelectedItems.Item(1)

End With

Exit Sub

hata:
If Err.Number = 5 Then
Exit Sub
Else
MsgBox "HATA OLUŞTU!-" & Err.Number & "-" & Err.Description, vbCritical
End If

End Sub

Private Sub btnKaydet_Click()

Dim dosya As String

On Error GoTo hata

With Application.FileDialog(msoFileDialogSaveAs)
.AllowMultiSelect = False
.Title = "Kaydet"
' .InitialFileName = "Yardımlaşma" & ".txt"
.Show

dosya = .SelectedItems.Item(1) & ".txt"

End With

MsgBox dosya

Exit Sub

hata:
If Err.Number = 5 Then
Exit Sub
Else
MsgBox "HATA OLUŞTU!-" & Err.Number & "-" & Err.Description, vbCritical
End If

End Sub
Son Düzenleme: 01/10/2011, 18:35, Düzenleyen: WiniFred.
Cevapla
Çözüldü #6
Mesajınızı Gördüm. Geri dönüş yaptığınız için teşekkürler. Bittiğinde çalışmanızda paylaşırsanız sevinirim.
Kolay Gelsin.
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da