değerli forum üyesi arkadaşlar,
elimde bir txt veri dosyası var ama ekte de göreceğiniz gibi bir kişiye ait veriler
beş(5)satır da yazılı ve bunu yazı boyutunu küçültsemde tek satır yapmak için çok veri bulunduğundan kolay olmuyor ve pratik de değil bunu
Access veritabanına çektiğimde(metin dosyasından veri al) örnek mdb de göreceğiniz gibi bir tabloya aynı kişiye ait olsa bile bir kişinin verilerini 5 satırda gösteriyor ve araya boş bir satır ekliyor benim yapmak istediğim
bir kişiye ait olan o 5 satırlık veriyi tek satır halinde elde etmek
bunu yapabilirmiyiz teşekkürler kolay gelsin..
Bence verileri veri alma sihirbazı ile elle değil, bir modülle almalısınız. O zaman değerleri değişkenlere atayıp "not" şeklinde belirlenmiş alanlarda & veya + işaretleriyle birleştirirsiniz. Bunu yapmak için basit bir
Sql sorgusu yeterli.. Birleştirme yapacaksınız sonuçta.
Verileri vb ile alma konusunda karar verirseniz satır satır okutmanız lazım. Aralardaki boş satırları seperator olarak kullanacaksanız sorun olmaz. Seperatorlere gelene kadar okuma eylemi sürer. Ben size bununla ilgili benim kullandığım bir modülün kodlarını buraya aktarayım. (Not: Modül bana ait değildir, ama kendi isteğime göre düzenledim. Şu andaki halini göndereyim size. Bu şekilde 8 adet farklı dosyadan veri alabiliyorum. Dosyaların yerlerini de elle gösterme şeklinde düzenledim.
Kod:
Sub OpenTextFileTest1()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fs, f
Dim name, name1, text, path As String
Dim txtLen, adetYıldız, adetTarih As Long
Dim cnn As New ADODB.Connection
Dim rst As New Recordset
Dim fileName As String
Dim result As Integer
Dim i As Integer
Dim dosya, Klasor
Dim strKlasöradı As String
On Error GoTo Err
strKlasöradı = BrowseFolder("Seçmek istediğiniz klasör?")
Klasor = strKlasöradı
'******işletme***************
ChDir (Klasor)
dosya = Dir("*İsletmeBilgileri.txt")
DoCmd.SetWarnings True
name = dosya
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(name, 1, -2)
text = f.ReadAll
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(name, 1, -2)
Set cnn = CurrentProject.Connection
rst.Open "işletme", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
s = 0
Do While f.AtEndofStream <> True
text = f.readLine
s = s + 1
If s = 1 Then madi = Trim(text)
If s <> 1 Then
STRarray = Split(text, "$")
rst.AddNew
rst("işletmekodu") = STRarray(0)
rst("işletmeadi") = STRarray(1)
rst("ilbölgekodu") = STRarray(3)
rst("ilçekodu") = STRarray(4)
rst("kasabakodu") = STRarray(5)
rst("köykodu") = STRarray(6)
rst("anaişletmekodu") = STRarray(7)
rst.Update
End If
Loop
f.Close
Set f = Nothing
Set fs = Nothing
Set rst = Nothing
Set cnn = Nothing
Err:
If Err.Number = 62 Then
MsgBox "Belirttiğiniz dosya boş", vbOKOnly, "UYARI"
Else
End If
'***************işletme sonu**************
Burdan sonra başka dosyaya geçiliyor ama sizin örnekte tek txt dosyası olduğu için gerekli değil. Kodları iyi inceleyin, kendinize uyarlayın. Bu arada projenizin referans penceresinde önce ado2.1 sonra da dao 3.6 şeklinde sıralansın. Aksi taktirde gözat eylemi çalışmaz.
Kolay gelsin.
sayın mehmet bey,
ado2.1 referansını bulamadım
size zahmet uygulama içerisinde gösterebilirmisiniz..
teşekkürler..
ADO = Microsoft ActiveX Data Control 2.x oluyor. Tahminim XP kullanıyorsunuz o halde 2.8 vardır sizde. Yoksa bile en yüksek hangi versiyon varsa onu işaretleyin.
Sevgili karaayhan
Ben bende çalışan haliyle mevcut projedeki referansları yazdım. Ama sevgili alpeki'nin dediği gibi, daha yeni versiyonlarda da sorun çıkmayacaktır. Ama sıralama önemli. Önce ado sonra dao olmazsa, komutlar hata veriyor. Bu arada ado için
c:\program files\common files\system\ado\msado21.tlb
(eğer daha yenisi varsa aynı yerde msado27 veya 28 olarak bulunacak)
dao için
c:\program files\common files\microsoft shared\dao\dao360.dll
dosyalarını kullanabilirsiniz.
sayın demiral isterseniz konuya buradan devam edelim zira otomatik olarak yükleme yapıyor bu kodlar.
ancak, istediğim kritere henüz ulaşamadım şöyleki;
txt de veriler bazen 5-6-7-8 satır olabiliyor ancak benim buradaki ayraç olarak kullanabileceğim olsa olsa aradaki boşluklar olabilir( 5-6-7-8 satırlık veri kümeleri arasındaki boşluklar) bunların arasındaki veriler bir kişiye ait o yüzden de bir satırda olmaları lazım ki bu kodlar o işi yapıyor ..
ilk satıların başındaki 11 karakterlik rakamlar tc kimlik numaralarını içeriyor.
bunlar başlangıç ikinci tc kimlik no'suna kadar bu kişiye ait oluyor bilgiler sonra ikinci kişiye geçiyor ...
teşekkürler.