[ midiland @ 28.10.2007. 02:00 ] @
| Import txt fajla u Access bazu pomocu TranferText-metode.
Ovo ispod je sadrzaj txt fajla koji treba da importujem u Access tabelu.
Da li neko , mozda, zna kako?
U prilogu Proba.zip
'HU10'|'V32418'|'HU'|'Z501'|-1|0
'HU10'|'V99937'|'HU'|'Z501'|-1|0
'HU10'|'V99962'|'HU'|'Z501'|-1|0
'HU10'|'V99963'|'HU'|'Z501'|-1|0
'HU10'|'V99964'|'HU'|'Z501'|-1|0
'HU10'|'V99965'|'HU'|'Z501'|-1|0
'HU10'|'V99966'|'HU'|'Z501'|-1|0 |
[ Getsbi @ 28.10.2007. 06:40 ] @
Evo ti link:
http://www.elitesecurity.org/t281660-0#1682486
Zaboravio sam da napomenem. Tekst fajl moraš da prilagodiš onom što se u Import Text Wizardu traži.
Ja sam uspeo da importujem u novu tabelul (ne u tabelu Ugovori) posle prepravke tekst fajla.
[Ovu poruku je menjao Getsbi dana 28.10.2007. u 09:08 GMT+1]
[ izonic @ 28.10.2007. 14:31 ] @
Trebas prvo napraviti urnek za transfer text i zapisati ga pod nekim imenom.
U mom slucaju je to zxz.
Kako se to pravi imas ovdje
http://www.icentar.com/showthread.php?t=3074&page=2
Primjer koji si dao ima manjkavosti a nije ni opisano do kraja pa se lako moze desiti da ti ne odgovara ovo sto sam napravio.
Prvo polje u tabeli je indeksirano da nema dupikata a u prvom polju u tekstu se ponavljaju podaci.
Pitanje je dali ide red za red ili drugacije to nisam znao.
Mislim sa ovim primjerom i ako procitas kako se radi ces moci zavrsiti ono sto zelis.
[ midiland @ 29.10.2007. 19:37 ] @
Ok,
Ja sam problem sam resio i pre nego sto ste mi odgovorili.
Resenje se nalazi ovde:
http://msdn2.microsoft.com/en-us/library/aa220768(office.11).aspx
Nisam znao da i u slucaju acImportDelim metoda moram, prethodno, definisati specifikaciju u nekom txt fajlu
Ipak, hvala na pomoci
[ midiland @ 07.11.2007. 07:45 ] @
Evo ga jedan tezak slucaj.
Ovo ispod je txt fajl koji sadrzi 2 sekcije.
Kako sadrzaj iz sekcije HEADER prebaciti u jednu tabelu a sadrzaj iz sekcije DETAILS u drugu?
Jasno mi je da od ovog jednog fajla mogu napraviti dva i onda je posao jednostavan. Jedan fajl ubaciti u jednu tabelu drugi u drugu i gotovo.
Da li postoji neki nacin da se to uradi automatski koriscenjem TransferText metode.
Primer:
#HEADER
16927|'HR10'|'17411'|''|''|''|'C13349'|'02'|21.05.2007 12:02:42|21.05.2007|3|'0'|0|959.4|211.068|130||1|
16928|'HR10'|'17410'|''|''|''|'C13349'|'02'|21.05.2007 12:02:10|22.05.2007|3|'0'|0|885.6|194.832|120||1|
16929|'HR10'|'19791'|''|''|''|'C13349'|'02'|21.05.2007 12:01:07|23.05.2007|3|'10'|0|1557.8|342.716|210||1|
16930|'HR10'|'19803'|'Petar Petrovic'|'g'|'f'|'C13349'|'02'|21.05.2007 11:16:37|22.05.2007|8|'0'|0|738|162.36|100||0|
#DETAILS
16927|1|'HR10'|'285'|73.8|3.69|73.8|3.69|0.22|13|260|0|959.4|0|0|211.068|0|73.8|3.69
16928|1|'HR10'|'285'|73.8|3.69|73.8|3.69|0.22|12|240|0|885.6|0|0|194.832|0|73.8|3.69
16929|1|'HR10'|'285'|73.8|3.69|73.8|3.69|0.22|20|400|0|1476|0|0|324.72|0|73.8|3.69
16929|2|'HR10'|'278'|81.8|4.09|81.8|4.09|0.22|1|20|0|81.8|0|0|17.996|0|81.8|4.09
16930|1|'HR10'|'285'|73.8|3.69|73.8|3.69|0.22|10|200|0|738|0|0|162.36|0|73.8|3.69
[ Trtko @ 07.11.2007. 09:34 ] @
Sumnjam da se može sa transfer text.
jedino da si to isprogramiras
[ midiland @ 07.11.2007. 10:57 ] @
Ok,
Ako ne moze TrasferText jel ima nesto slicno sto bi ,nekako, resilo problem?
[ darkog @ 07.11.2007. 11:34 ] @
Ja imam sledeći problem, a tiče se takodje importa .csv fajlova u access tabelu,
dakle ako imam više .csv fajlova, u nekom direktorijumu. Da li postoji mogućnost da u jednom potezu importujem sve fajlove u tom dir-u u jednu tabelu?
[ Trtko @ 07.11.2007. 14:22 ] @
Ja sam to rijesio tako da sam si isprogramirao
napravio program koji mi cita fajlove s nekog direktorija
i puni u tablicu.
Znaci da se rijesiti, ali se moraju neke stvari i programirati
Isprogramiras da ti napuni list box s nazivima txt fajla ( ti si malo prepravi )
pocdat = Date
zavdat = Date
List10.RowSource = ""
If Right(odkud, 1) = "\" Then
Else
odkud = odkud + "\"
End If
Dim fs, f, f1, fc, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(odkud)
Set fc = f.Files
brk = 0
s = ""
For Each f1 In fc
If UCase(Right(f1.Name, 3)) = "TXT" Then ' ispitujemo jel je txt fajl
brk = brk + 1
s = s & f1.Name & ";"
End If
Next
List10.RowSource = s
evo funkcije kojom citam TXT fajl i punim u tablicu , prepravis kako tebi pase
Function prepisi(koju)
testfile = koju
Dim rezultat As String
Dim dato1 As DAO.Database
Dim rek1 As DAO.Recordset
Set dato1 = CurrentDb
Dim sqlupit1 As String
Dim TextLine
Open testfile For Input As #1
Do While Not EOF(1)
Line Input #1, TextLine
If Mid(TextLine, 1, 2) <> "us" Then
p1 = Mid(TextLine, 1, 5)
p2 = Mid(TextLine, 7, 6)
p3 = Mid(TextLine, 14, 2)
p4 = Mid(TextLine, 17, 2)
p5 = Val(Mid(TextLine, 20, 3))
p6 = Val(Mid(TextLine, 24, 3))
p7 = Replace(Mid(TextLine, 28, 8), ",", ".")
p8 = Mid(TextLine, 37, 5)
Me.Repaint
sqlupit1 = "select * from izsuma where sm=" & "'" & p1 & "' and brploc=" & "'" & p2 & "' and vr='" & p3 & "' and so=" & "'" & p4 & "' And d = " & p5 & " And l = " & p6 & " And cr = " & " '" & p8 & "'" _
& " and knjiga=" & "'" & brknj.Caption & "' and popratnica='" & popr.Caption & "'"
Set rek1 = dato1.OpenRecordset(sqlupit1)
If rek1.EOF Then
rek1.AddNew
rek1.Fields("sm") = p1
rek1.Fields("brploc") = p2
rek1.Fields("vr") = p3
rek1.Fields("so") = p4
rek1.Fields("d") = p5
rek1.Fields("l") = p6
rek1.Fields("m3") = p7
rek1.Fields("cr") = p8
rek1.Fields("knjiga") = brknj.Caption
rek1.Fields("popratnica") = popr.Caption
rek1.Fields("datumpop") = datpop
rek1.Update
End If
End If
Loop
Close #1
rek1.Close
Set dato1 = Nothing
[ izonic @ 07.11.2007. 15:48 ] @
Ako je struktura kao u prikazu po meni je lakse razdvojiti podatke kodom u 2 txt filea te onda raditi sa transfer tekst.
Ujedno se moze napraviti i provjera znaci ako file ne podlijeze strukturi na osnovu 2 naslova.
Header i Detail.
[ Trtko @ 08.11.2007. 07:36 ] @
Lakse je ako to radi jednom u tjednu, ali sto ako svaki dan dobije takva
tri ili vise fajla.
Onda mu je lakse napraviti program
[ izonic @ 08.11.2007. 11:52 ] @
Nisam mislio omalovaziti tvoj kod niti sam rekao da nije ureu, nego jednostavno mi pala ideja da bi mozda bilo lakse urediti na ovaj nacin.
Primer:
#HEADER
16927|'HR10'|'17411'|''|''|''|'C13349'|'02'|21.05.2007 12:02:42|21.05.2007|3|'0'|0|959.4|211.068|130||1|
16928|'HR10'|'17410'|''|''|''|'C13349'|'02'|21.05.2007 12:02:10|22.05.2007|3|'0'|0|885.6|194.832|120||1|
16929|'HR10'|'19791'|''|''|''|'C13349'|'02'|21.05.2007 12:01:07|23.05.2007|3|'10'|0|1557.8|342.716|210||1|
16930|'HR10'|'19803'|'Petar Petrovic'|'g'|'f'|'C13349'|'02'|21.05.2007 11:16:37|22.05.2007|8|'0'|0|738|162.36|100||0|
#DETAILS
16927|1|'HR10'|'285'|73.8|3.69|73.8|3.69|0.22|13|260|0|959.4|0|0|211.068|0|73.8|3.69
16928|1|'HR10'|'285'|73.8|3.69|73.8|3.69|0.22|12|240|0|885.6|0|0|194.832|0|73.8|3.69
16929|1|'HR10'|'285'|73.8|3.69|73.8|3.69|0.22|20|400|0|1476|0|0|324.72|0|73.8|3.69
16929|2|'HR10'|'278'|81.8|4.09|81.8|4.09|0.22|1|20|0|81.8|0|0|17.996|0|81.8|4.09
16930|1|'HR10'|'285'|73.8|3.69|73.8|3.69|0.22|10|200|0|738|0|0|162.36|0|73.8|3.69
Moja ideja je bila ova:
Da se ovaj file podijeli na 2 filea upravo na nacin kako si ti uradio ucitavanje a parametri bi bili ]#HEADER i #DETAILS.
Ta nova 2 filea bi imali strukturu za funkciju transfer text.
Po meni manje pisanja koda a mozda i siguurnije.
[ Trtko @ 08.11.2007. 14:46 ] @
Izonic, znam da nisi mislio omalovazavat moj kod , a nit sam ja mislio da ti moj kod omalovazavas.
Samo raspravljamo.
Pozdrav
[ midiland @ 09.11.2007. 09:01 ] @
Moja ideja je bila ova:
Da se ovaj file podijeli na 2 filea upravo na nacin kako si ti uradio ucitavanje a parametri bi bili #HEADER i #DETAILS.
Ta nova 2 filea bi imali strukturu za funkciju transfer text.
Po meni manje pisanja koda a mozda i siguurnije.
--------------------------------------------------------------------------------
I meni je ova ideja ok.
Moze li mala pomoc oko coda.
Interesuje me kako koristenjem parametara #HEADER i #DETAILS razdvojiti dati fajl u dva txt fajla.
Originalni fajl predstavlja strukturu dve tabele.
Sekcija # HEADER sadrzi polja iz tabele Orders a sekcija #DETAILS je tabela OrderDetails.
Onda bi bilo jednostavno koristiti TrasferText metodu.
[ izonic @ 09.11.2007. 13:51 ] @
Code: Function Razdvoji()
Dim Temp As String
Dim Db As Database
Dim Putanja As String
Dim JedanRed As String
Dim ImeF As Integer
Set Db = CurrentDb
Putanja = Db_Putanja
ImeF = FreeFile
On Error GoTo Izlaz
Open Putanja & "Tekst.txt" For Input As #1 ' ime fajla je "tekst"
Open Putanja & "HEADER.txt" For Output As #2
Open Putanja & "DETAILS.txt" For Output As #3
Close #2: Close #3
Open Putanja & "HEADER.txt" For Append As #2
Open Putanja & "DETAILS.txt" For Append As #3
While Not EOF(1)
Line Input #1, Temp
If Temp = "#HEADER" Then
ImeF = 2: GoTo Upis
ElseIf Temp = "#DETAILS" Then
ImeF = 3: GoTo Upis
End If
Print #ImeF, Temp
Upis:
Wend
Izlaz:
Close #1: Close #2: Close #3
Exit Function
Kraj:
MsgBox "Fajl nema pravu strukturu"
GoTo Izlaz
End Function
Code: Function Db_Putanja() As String
'__________________________________________________
'Ova funkcija pronalazi putanju postojeće baze
'Autor funkcije ZXZ
'__________________________________________________
Dim Db As Database, Putanja As String
On Error Resume Next
Set Db = DBEngine(0)(0)
Putanja = Db.Name
Do Until Right$(Putanja, 1) = "\"
Putanja = Left$(Putanja, Len(Putanja) - 1)
Loop
Db_Putanja = Putanja
End Function
Evo jedan od nacina
[ midiland @ 10.11.2007. 15:29 ] @
izonic, Svaka cast!!!
Hvala na funkciji! Zavrsila mi je veliki posao!
Bravo Majstore!
[ Trtko @ 10.11.2007. 16:47 ] @
Da primjetim i dodam.
Zar nebi bilo lakse za putanju ovo dolje
Putanja= Application.CurrentProject.Path + "\"
Inace kod je OK, ponekad je bitno dobiti ideju
i mora se znati da skoro nista nije nerjesivo.
Pozdrav ekipi
[ izonic @ 10.11.2007. 17:56 ] @
Putanja= Application.CurrentProject.Path
Jeste ovo je brze ali nisam znao koji access koristi. Ja koristim ovu funkciju vec dugo dok nije bilo ove te sam ovo imao gotvo i samo prepravio malo.
Kada se ovo uradi onda samo napravis urnek i koristis funkciju transfer text.
To vec ima opisano u mome prvom postu u ovoj temi.
Kako sam primijetio korisnik se vjerovatno snasao pa mozda on opise kako dalje.
[ Trtko @ 10.11.2007. 22:15 ] @
Imas pravo Izonic, sigurnija je.
Kad ja ne razmisljam da netko koristi mozda access 97 ili 2000
Ja inace radim sa 2002.
Jel ima negdje na ovom sajtu neka rubrika gdje bi se mozda malo bolje upoznali.
Ono da opisemo gdje radimo , gdje zivimo ... itd..
ako nema mogli bi moderatori otvoriti taj forum
mozda ima , a ja nisam bolje pogledao
idem pogledati
Pozdrav svima
[ midiland @ 10.11.2007. 23:54 ] @
Koristim Access 2007.
Meni, zapravo, funkcija db_putanja() nije ni bila potrebna jer to imam definisano u glavnom modulu
pomocu DataEnvironment i uopste me vise ne interesuje gde se baza nalazi.
Glavni modul izgleda ovako:
Global Const DEFSOURCE = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="
Public db As ADODB.Connection
Public Sub OpenDB()
DataEnvironment1.Connection1 = DEFSOURCE & App.Path & "\dbsample.mdb;"
End Sub
Kasnije se baza lako poziva, otvara i zatvara.
Primer:
Public Sub MesecneNabavke()
With DataEnvironment1.rsDobavljaci
If Not .State = adStateClosed Then .Close
.Open "Select * From dobavljaci"
Do While Not .EOF()
Dobavljac(.AbsolutePosition) = .Fields("Dobavljac")
Ukupno(.AbsolutePosition) = .Fields("Ukupno")
.MoveNext
Loop
End With
End Sub
Meni je samo trebao primer kako txt fajl koji sadrzi dve sekcije razdvojiti na dva dela i onda ih ubaciti u bazu.
Tu je izonic dao odlican primer. Hvala mu :)
Posle je bilo lako.
Ovako nekako:
Private Sub Command5_Click()
Dim TxtFajl
DoCmd.SetWarnings False
Cdlg.Filter = "Text (*.txt) | *.txt"
Cdlg.InitDir = "C:\Proba"
Cdlg.ShowOpen
If Cdlg.FileName = "" Then
msgbox "Nije nista izabrano"
TxtFajl = Cdlg.FileName
DoCmd.TransferText acImportDelim, "Customers ImportSpec", "ComercialContracts", TxtFajl, 0
End If
End Sub
Hvala svima.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|