[Vbscript / OLE DB] Fout bij uitlezen van txt file

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb jullie hulp even nodig bij het oplossen van een lastig probleem. Wij zijn namelijk recentelijk verhuist van server, waardoor deze fout is ontstaan.

De nieuwe server is identiek aan de oude. Dit is wat er op draait: Win2003 server, IIS 6.0, ASP.NET 2.0 en MS Access 2000.

Het gaat om een webapplicatie die bestanden in leest en opslaat in de database. Het in te lezen bestand is een tekst bestand die de data bevat, gescheiden door tabs. Het bestand wordt eerst geupload naar de server (dit gaat nog goed). Daarna wordt het tekst bestand uitgelezen, hier gaat het echter fout.

Het te lezen tekst bestand:
code:
1
2
3
20080801    20081001    "Riwald Recycling BV"   "DE1350_164303" "Riwald Recycling BV"   "NLD"   "Submarine/Demolishing" "R04"   "W" "I" 2008-53557 Beschikking  EU-verordening 259/93; Beschikking DE1350/164303 inzake de invoer van Submarine/Demolishing, naar Riwald Recycling BV in NLD door Riwald Recycling BV te DEU. Weigering voor transport in de periode van 01-07-2008 tot 01-12-2008
20080901    20081001    "Dusseldorp Gevaarlijk Afval"   "NL204460"  "Remondis Production Gmbh"  "DEU"   "Waterige wasvloeistoffen"  "D10"   "T" "U" 2008-54553 Beschikking  EU-verordening 259/93; Beschikking NL204460 inzake de uitvoer van Waterige wasvloeistoffen, naar Remondis Production Gmbh in DEU door Dusseldorp Gevaarlijk Afval te NLD. Toestemming voor transport in de periode van 01-10-2008 tot 30-09-2009
20080801    20081001    "Riwald Recycling BV"   "DE1350_164304" "Riwald Recycling BV"   "NLD"   "Sloopschip"    "R04"   "W" "I" 2008-53556 Beschikking  EU-verordening 259/93; Beschikking DE1350/164304 inzake de invoer van Sloopschip, naar Riwald Recycling BV in NLD door Riwald Recycling BV te DEU. Weigering voor transport in de periode van 01-07-2008 tot 31-12-2008


Het uitlezen van het bestand gebeurt door onderstaande code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set objImport = getImportList(iImportId)
    Set objConnection = CreateObject("ADODB.Connection")
    Set objRecordSet = CreateObject("ADODB.Recordset")
        
    objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & IMPORT_PATH & ";" & _
              "Extended Properties=""text;HDR=NO;FORMAT=TabDelimited;FMT=TabDelimited"""
    'response.write filename
    objRecordset.Open "SELECT * FROM [" & fileName & "]", _
             objConnection, adOpenStatic, adLockOptimistic, adCmdText
    
    Response.Write("SELECT * FROM [" & fileName & "]" & "<br/>")
    Response.Write(objImport("Importveld_VeldNr") & "<br/>")
    objRecordSet.fields.item(1)


Op regel 14 wordt de volgende foutmelding gegeven:
De foutmelding:
code:
1
2
3
4
5
ADODB.Fields error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/onderhoud/beschikkingen/import.asp, line 99


De code heeft altijd goed gewerkt op onze oude server. Helaas kunnen wij deze nu niet meer gebruiken. Ik heb het vermoeden dat er nog een OLE DB driver mist om het tekst bestand op deze manier uit te lezen. Kan iemand mij hier meer over vertellen? Ik kan er zelf niks over vinden op internet.

Wel heb ik onderstaande code gevonden, die overeen komt met de code die wij gebruiken. Hier wordt echter geen melding bij gegeven dat extra componenten nodig zijn voor de uitvoering van deze code.

code:
1
2
3
4
5
6
7
8
9
10
11
' Open Text
' If a text file (for example, TestFile.txt) is located at c:\somepath, where C is the drive, and where somepath is the folder that contains TestFile.txt, as follows:

cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
       "Data Source=c:\somepath;" & _ 
       "Extended Properties=""text;HDR=Yes;FMT=Delimited;"";"
                

' specify the file name in the SQL statement as follows:

rst.Open "Select * From TextFile.txt", cnn, , , adCmdText
Bron: http://support.microsoft.com/kb/326548


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
On Error Resume Next

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")

strPathtoTextFile = "C:\Scripts"

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & strPathtoTextFile & ";" & _
        "Extended Properties=""text;HDR=Yes;FMT=Delimited"""

strFile = "City_Names.txt"

objRecordset.Open "Select City, Count(City) AS CountOfCity FROM " & strFile & _
    " GROUP BY City", objConnection, adOpenStatic, adLockOptimistic, adCmdText

Do Until objRecordset.EOF
    Wscript.Echo objRecordset.Fields.Item("City"), objRecordset.Fields.Item("CountOfCity")
    objRecordset.MoveNext
Loop
Bron: http://www.microsoft.com/.../qanda/jun05/hey0607.mspx

Heeft iemand een idee hoe dit opgelost kan worden?

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Het voorbeeld tekstje wat je hebt neergezet heeft geen headers, staan deze wel in het werkelijke tekstbestand? En het format is tab-delimited, maar het voorbeeld lijkt spaties te bevatten.

[ Voor 25% gewijzigd door bigbeng op 11-11-2008 13:47 ]


Acties:
  • 0 Henk 'm!

  • dixon
  • Registratie: Januari 2001
  • Laatst online: 11-08 19:36
bigbeng: zou het niet kunnen dat de tabjes verloren zijn gegaan bij het posten van dit topic? Even testen:
code:
1
Hier volgen drie tabjes en weer wat tekst:          wat tekst..



edit: zoals je ziet wordt er van tabjes spaties gemaakt (niet zo gek ook met HTML).


ps: niet alle string velden zijn "double-quoted" en volgens mij wil je dit wel.

[ Voor 36% gewijzigd door dixon op 11-11-2008 17:53 ]

Wat een onzin..


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 09:08

Reptile209

- gers -

Staan IMPORT_PATH en fileName echt op de juiste waarden? Volgens deze pagina (onderaan) zou er - op basis van je foutmelding - een fout in de filename zitten:
ADODB.Fields error '800a0cc1'
ADO could not find the object in the collection corresponding to the name or ordinal reference requested by the application.
Cause: SQL statement calls an invalid field name.
Solution: Make sure there are no spelling errors.
Kijk anders eens met de debugger of objRecordset wel echt een waarde/verbinding krijgt?

Zo scherp als een voetbal!