29. november 2001 - 09:28Der er
83 kommentarer og 2 løsninger
Problemer med import
Jeg har en TAB separeret textfil jeg vil importere i Access97. Problemet er bare at access \"vil\" placere alle data i række i ( jeg har hørt fra Thomas Jepsen at det er noget med linefeed).
hvordan fortæller jeg access at filen kun har 28 kolonner, det giver jo ikke problemer ved import af \",\" filer.
jeg kan ikke ændre filens udseende da jeg får den fra externt kilde. Jeg kan åbne den i excel og gemme som CSV men det er da for omstændigt.
Private Sub Form_Open(Cancel As Integer) Dim W As New Word.Application W.Documents.Open Sti W.ActiveDocument.SaveAs Sti W.Quit FixLineFeedProblem \"D:\\Niels.txt\" docmd.TransferText acimportDelim,\"test\",\"niels\",\"D:\\Niels.txt\" end sub
NB: import funktionen skal du ikke lægge noegt i det er bare en test... jeg kender selv stien til dette...
Som jeg skrev tidligere, skal du sætte en reference til Word. I VBA går du i menuen Tools->References og krydser \"Microsoft Word x.0 Object Library\" af.
Hmm, jeg tror, at jeg var lidt for hurtig før til at godkende din kode.
Den skal se sådan ud, hvis du ikke vil gemme funktionen i et modul:
Private Sub Form_Open(Cancel As Integer) Dim W As New Word.Application W.Documents.Open \"D:\\Niels.txt\" W.ActiveDocument.SaveAs \"D:\\Niels.txt\" W.Quit docmd.TransferText acimportDelim,\"test\",\"niels\",\"D:\\Niels.txt\" end sub
Private Sub Form_Open(Cancel As Integer) Dim W As New Word.Application W.Documents.Open (\"d:\\listeandescreppii.txt\") W.ActiveDocument.SaveAs \"d:\\listeandescreppii.txt\" W.Quit docmd.TransferText acimportDelim,\"test\",\"niels\",\"d:\\listeandescreppii.txt\" end sub
det virker altså bare ikke... prøv selv at køre denne fra en Access97.
Private Sub Form_Open(Cancel As Integer) DoCmd.SetWarnings False DoCmd.RunSQL \"delete * from PIM\" Dim W As New Word.Application W.Documents.Open \"D:\\listeandescreppii.txt\" W.ActiveDocument.SaveAs \"D:\\listeandescreppii.txt\" W.Quit DoCmd.TransferText acImportDelim, \"listean\", \"PIM\", \"D:\\listeandescreppii.txt\", True DoCmd.SetWarnings True End Sub
den går i \"kage\" ved : W.Documents.Open \"D:\\listeandescreppii.txt\"
hvis denne linie \"remarkes\" går den i \"kage\" ved W.ActiveDocument.SaveAs \"D:\\listeandescreppii.txt\" men det kan vel være fordi den ikke har åbnet et dokument endnu og derfor ikke kan gemme dette
Region lets not let this get out of hand like it did a while back :o)
I didnt mean it like that at all, and of course it should work before you accept the answer. But I know that this import problem has been bothering you for quite a while now. So I didnt want to get involved unless I was able to see what the actual problem was, and it isnt always easy exchanging emails. Thats why I suggested 09:45 that you could send the dB.
Jeg får til gengæld en anden fejl, når jeg prøver at kører den et par gange. Det er i Docmd.Transfertext-linien. Den siger at filen er låst. Dette skyldes at Word endnu ikke er blevet lukket helt ned. Derfor har jeg lagt en pause på et sekund en, og så virker det.
Hele koden i formularen ser herefter således ud (kopier og sæt ind):
Option Compare Database Option Explicit
Private Declare Sub sapiSleep Lib \"kernel32\" _ Alias \"Sleep\" _ (ByVal dwMilliseconds As Long)
Sub Wait(lngMilliSec As Long) If lngMilliSec > 0 Then Call sapiSleep(lngMilliSec) End If End Sub
Private Sub Form_Open(Cancel As Integer) DoCmd.SetWarnings False DoCmd.RunSQL \"delete * from PIM\" Dim W As New Word.Application W.Documents.Open (\"d:\\listeandescreppii.txt\") W.ActiveDocument.SaveAs \"d:\\listeandescreppii.txt\" W.Quit Wait 1000 DoCmd.TransferText acImportDelim, \"listean\", \"PIM\", \"D:\\listeandescreppii.txt\", True DoCmd.SetWarnings True End Sub
Hej Terry.: nej det var netop linefeed tror jeg. Uden denne konvertering laver den ikke sepration på hvornår det er en heading og hvornår det er en dataværdi. Derfor gik access \"kold\".
Hele filen er på 48000 poster hvilket betød at access ville oprette 48000 kolonner hvilket ikke kan lade sig gøre...
Den eneste forskel, jeg kan se, er at jeg kører Word 2000 og du formentlig kører Word 97.
Prøv at åbne word, start makrooptageren (Funktioner->Makroer->Indspil makro) klik OK og prøv derefter at åbne txt-filen. Stop makroindspilleren og gå ind i makroen igen og aflæs om syntaxen er anderledes i den linie.
In th eimport wizard there is an \"Advanced\" button, select this and then choose DOS or OS/2 PC8 from the list, and then save the import spec. Then you import using this spec!
I så fald, skal du gå i joblisten (Ctrl+Alt+Delete) og kigge under Processer og se om Winword er åben en eller flere gange (hvis de er, skal du afbryde dem)
Prøv herefter igen
Jeg kan forestille mig at Word måske ikke er blevet afsluttet hver gang, fordi den har fejlet. Derved vil Word låse filen og du kan ikke få adgang til at åbne den.
Hvis du kører Win 98 eller 95 er du nødt til at genstarte, tror jeg.
Region> If you use the Advanced button you can alter the data type for each field. Access suggests a long integer for the EL no field try changing this to a double. It works!!
Jeg får kun importeret 20 poster. Resten forsvinder. Hvis jeg forsøger at importere manuelt, går den bare i stå uden at komme med nogen fejlmeddelses overhovedet!!!??
Det er det samme der sker for mig..... :-))))))))))
Hvis du prøver at minimere filen vil du se det er fordi hver post forsøger at \"lægge sig\" som en kolonne... Det vil dermed sige at access vil importere godt 48000 kolonner derfor går det i \"kage\"... Det er netop her din tidligere model med linefeed bliver aktuel fordi access ikke kan \"gøre dette\" af sig selv. Åbner du først filen i word, excel eller lign og gemmer den igen går det fint....
.. he he så er vi tilbage ved start igen er vi ikke.... :-)))))))
NB:
Jeg var ved at være ræd for at det var mig der var \"tosset\"
Access can max import 65000 CHARACTERS per line, I get an error telling me that there are some lines which are longer! I also get ann error that a single field is longer than 32766 (32885) characters.
It seems to me that you should look at the way the file is getting created in the first place.
Prøv at åbne den i Excel, hvor alle felter er formatteret som text når du \"importerer\". Gem den som en CSV fil og importer i Access hvor du siger at filen har headings....
Det kører uden problemo...
NB: Jeg importerer den hver dag efter at have vendt den i excel...
Region> I dont know how far Thomas and you got with savinf the file through Word, but I dont think this is going to solve the problen. Access is having GREAT problems with translating various characters in the file, so it is unable to determine whether or notthe file is comma (CSV) or TAB delimnited. Also end of line sequences are mixing things up.
I think you should look CLOSELY as to how the file is getting created and see if its possible to alter the source of the problem!
If you want to stop now, then you and Thomas can decide who gets what, and I take whats left (if any)! Then I can play around and sell (SOLAR) the solution!
Jeg mener bare skal grundfilen revideres vil jeg jo betale for at denne bliver ændret ved vores underleverandør af filen. Jeg havde bare håebt på at jeg selv kunne klare det
I can see that Excel is able to import the data, although I dont know if anything is getting lost under way. Why Access cant import the data, beats me, although I suspect its trying to be to clever and stumbles over its own feet, if you understand what I mean?
Kort fortalt beder jeg excel om at importere tekstfilen ind i excel hvor alle kolonner er formatteret som text ( istedet for generel som excel jo som udgangspunkt gør) Derefter gemmer excel filen på mit y:\\hostdata som en csv fil.
Så beder jeg access om at importere csv filen med flg. kommando :
Private Sub Form_Open(Cancel As Integer) DoCmd.Maximize Dim RA As Recordset Set RA = CurrentDb.OpenRecordset(\"Dato for csv\") If Not RA.EOF Then If Not RA!Importeret = Int(Now()) Then Label111.Visible = True RA.Edit RA!Importeret = Int(Now()) RA.Update CurrentDb.Execute \"DELETE * FROM article\" DoCmd.TransferText acImportDelim, \"CICS\", \"article\", \"y:\\PIM ACCESS DATABASE\\hostdata\\stibo.csv\", False CurrentDb.Execute \"DELETE * FROM pim\" DoCmd.TransferText acImportDelim, \"stibo\", \"pim\", \"y:\\PIM ACCESS DATABASE\\hostdata\\listeandescreppii.csv\", True SendKeys \"%tdc\" End If End If Label111.Visible = False End Sub
og vupti så importere access csv filen uden problemer overhovedet.... alle felter står rigtigt osv....
OK, vil det sige, at du ikke kan få Word til at lave tricket?
Så må vi bare lave koden, så den åbner Excel i stedet for Word. Det er bare lettere med Word, derfor valgte jeg Word. Og det har tidligere virket for mig.
Terry -> you keep talking about the amount of data. But Region says it work when opens and save in Excel. Therefore it will also work, when we get the code correct. Don\'t you think?
Yes, but yesterday when I asked for some data I got one record, which I had no problems with, but when we got the full file then we got problems. I seem to recal that Region HAS had problems with large Excel files BECAUSE they were > 65535, and because I work in a service function, I know that almost anything is possible from a customer, also files > 65535 records when they say 47000!
But I would still like to know why Excel can import and Acccess cant!
Region-> Jeg har leget lidt med nedenstående kode og er kommet ret langt. Der er stadig nogle problemer. Jeg får et par fejl, når jeg importere til Access, men det skyldes garanteret bare min Importspecifikation, som skal ændres. Endvidere er der nogle problemer med at gemme filen, hvis den findes i forvejen. Men det er måske det, du har løst med din Sendkeys? I min kode sletter jeg .csv-filen først (det kræver bare en On Error resume next, da der opstår fejl, hvis filen ikke findes). Her er koden:
det begynder at ligne noget.... Der er et par småfejl.
1/ Din Wait 1000 kan den ikke finde!! Jeg remarkede denne og \"kørte\" videre.. Den bruger ved import i excel bare ikke den array der er defineret. ( importerer det hele i felt 1 i excel som om detvar en lang text. )
2/Access kan ikke importere fordi excel ikke er afsluttet... filen er i brug eller bla bla... dvs. excel ska ligesom \"dræbes\" først.
Når den er færdig med at importere i access er dataplaceringen sikker kun forkert affødt af punkt 1.
Jeg undskylder min manglende deltagelse men har været til møder ude af huset de sidste par dage... Jeg har dog uden at få løst det helt, fået mere end rigeligt af svar her hvorfor jeg ville høre om i ønsker at stoppe her...!!!
Hvis ja, hjælp mig med at give jer point for jeres indsats..
Jeg oplevede det samme som dit pkt 1. Pkt 2, kan jeg dog ikke genkende, men det skyldes at din Wait 1000 ikke virker. Excel når simpelthen ikke at slippe filen. Du kan evt sætte en msgbox ind i stedet. Eller en anden form for forsinkelse (f.eks. et loop eller lign).
Tilbage til pkt 1: Jeg har lige prøvet at optage makroen selv, og der er nogle forskelle i de forskellige arrays. Min ser således ud: X.Workbooks.OpenText Filename:=\"D:\\listeandescreppii.txt\", Origin:=xlWindows _ , StartRow:=2, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _ , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _ Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _ Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _ 16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _ Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1))
Med denne kode, bliver den indlæst rigtigt i Excel og bliver gemt. Herefter skal du selvfølgelig huske at lave din importspecifikation om, så den bruger semikolon som seperator i stedet for tabulator.
Eneste problem tilbage, er at der kommer en del spørgsmål, som brugeren skal bekræfte, og som betyder at der opstår fejl i koden.
Jeg kigger lige lidt videre på det og sender dig resultatet asap - så afslut ikke spørgsmålet endnu :o)
vi må hellere holde her ( jeg har nu lige fået en anden type fil der skla indlæses i access som også er TAB... 150.000 poster så her går excel alligevel \"kold\".
hvordan skal der gives point...??? hjælp venligst hermed...
Well, efter min mening bør man altid give point efter følgende vægtede kriterier:
70% vægtning - Hvem har bidraget mest til et brugbart resultat (i dette tilfælde var der ikke nogen som ramte 100% rigtigt - beklager!) 30% vægtning - Hvem har brugt mest tid og flest kræfter på at hjælpe.
Men det er bare sådan, jeg selv giver point. Andre har sikkert andre meninger. (der er af og til også andre kriterier, som komer ind)
Good morning! Yes, I was wondering why I got 110 points here, and Thomas only 40!
And dont you worry about me having 40 extra on my Access account Thoams, I will just not answer the next couple of questions that crop up, is that OK? :o)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.