asp değerleri ile boş bir CSV dosyasını okuma

Bir MySQL veritabanına veri almak için klasik asp kullanıyorum, ancak CSV dosyasındaki alanlar mevcut olmasına rağmen kodum NULL olarak döndürüyor olsa da biraz sorun yaşıyorum

CSV dosyasını bir kayıt kümesi olarak açmak istediğim için önce uzak csv dosyasını almalı, daha sonra bir kopyasını yerel olarak kaydetmeli ve bir schema.ini dosyası oluşturmalı, daha sonra bir ADODB bağlantısı kullanarak dosyayı açmalı, daha sonra bilgileri kapma ve veritabanıma yazmadan önce üzerinde işlem yapma.

Bu yüzden ilk önce MSXML2.ServerXMLHTTP kullanarak dosyayı alıyorum

sImportURL = "http://somewebsite/somecsvfile.csv"
Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objXMLHTTP.Open "GET", sImportURL, False
objXMLHTTP.setRequestHeader "User-Agent", Request.ServerVariables("HTTP_HOST")
objXMLHTTP.Send ""
sResponse = split(objXMLHTTP.responseText, vbcrlf)
Set objXMLHTTP = Nothing

sResponse, kurulmuş bir dizidir, dosyanın her satırı daha sonra split kullanılarak diziye eklenir. Çok uzak çok iyi!

Şimdi dizi içinde döngü ve yerel olarak bir CSV dosyası oluşturmak ve ayrıca bunun için bir şema dosyası oluşturmak için FSO kullanın

Set fsoImport = CreateObject("Scripting.FileSystemObject")
sFolder = Server.MapPath("/TempImport/")
If Not fsoImport.FolderExists(sFolder) Then sFSO.CreateFolder(sFolder) 
sFileName = Server.MapPath("/TempImport/Import.csv")
If fsoImport.FileExists(sFileName) Then fsoImport.DeleteFile(sFileName)
Set sImportFile = fsoImport.CreateTextFile(sFileName, ForWriting, True)
For i = 0 to uBound(sResponse)
    sImportFile.Writeline sResponse(i)
Next
sImportFile.Close
Set sImportFile = Nothing

sFileName = Server.MapPath("/TempImport/schema.ini")
If fsoImport.FileExists(sFileName) Then fsoImport.DeleteFile(sFileName)
Set sSchemaFile = fsoImport.CreateTextFile(sFileName, false)
sSchemaFile.WriteLine("[Import.csv]")
sSchemaFile.WriteLine("ColNameHeader=True")
sSchemaFile.WriteLine("Format=CSVDelimited")
sSchemaFile.WriteLine("Col1=SKU Text")
sSchemaFile.WriteLine("Col2=Quantity Double")

Bu da başarılı bir şekilde çalışır ve csv dosyası şöyle görünür

SKU,Quantity
"TEK",0
"KDL-60LX903",3
"BICBIRO",88
"WB001",10

Şimdi az önce oluşturduğum bir ADODB bağlantısı kullanarak oluşturduğum dosyayı açıyorum

Set adoOpen = Server.CreateObject("ADODB.Connection")
adoOpen.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=/TempImport/;Extensions=asc,csv,tab,txt;HDR=NO;Persist Security Info=False"
adoOpen.Open
sSQL = "SELECT * FROM `Import.csv`"
Set rsOpenRS = Server.CreateObject("ADODB.Recordset")
rsOpenRS.Open sSQL, adoOpen
Do While Not rsOpenRS.EOF
    sField = "SKU"
    sValue = rsOpenRS(sField)
    Response.Write sField & " = " & sValue & "
" sField = "Quantity" sValue = rsOpenRS(sField) Response.Write sField & " = " & sValue & "
" rsOpenRS.MoveNext Loop rsOpenRS.Close Set rsOpenRS = nothing Set adoOpen = nothing

Şimdi benim CSV dosyamda veri olmasına rağmen ekrana yazılanların hepsi

SKU =
Quantity = 
SKU = 
Quantity = 
SKU = 
Quantity =
SKU = 
Quantity =
SKU = 
Quantity =
SKU = 
Quantity =
SKU = 
Quantity =
SKU = 
Quantity =
SKU = 
Quantity =
SKU = 
Quantity =

CSV dosyasında, başlık dahil 10 sonuç kümesi ve sadece 5 satır olduğuna dikkat edin, ne olduğundan emin değilim, herhangi bir ipucu var mı?

Şerefe

0
sSchemaFile.WriteLine ("ColNameHeader = True") öğeniz var ve bağlantı dizinizde HDR = NO . CSV dosyanızın sütun başlıkları var mı?
katma yazar SearchAndResQ, kaynak
sSchemaFile.WriteLine ("ColNameHeader = True") öğeniz var ve bağlantı dizinizde HDR = NO . CSV dosyanızın sütun başlıkları var mı?
katma yazar SearchAndResQ, kaynak

6 cevap

rsOpenRS (sField) .Value yazımı sorunu çözdü mü?

0
katma

rsOpenRS (sField) .Value yazımı sorunu çözdü mü?

0
katma

rsOpenRS (sField) .Value yazımı sorunu çözdü mü?

0
katma

Tamam, bu sadece aptal bir problemdi, değiştim

Set sImportFile = fsoImport.CreateTextFile(sFileName, ForWriting, True)

için

Set sImportFile = fsoImport.CreateTextFile(sFileName, True)

Bunu klasik asp'te yazarken ForWriting bitine ihtiyacım olmadı, sadece işe yaramadığı bir hata vermedi.

Thanks için everybody that tried için help though

0
katma

Tamam, bu sadece aptal bir problemdi, değiştim

Set sImportFile = fsoImport.CreateTextFile(sFileName, ForWriting, True)

için

Set sImportFile = fsoImport.CreateTextFile(sFileName, True)

Bunu klasik asp'te yazarken ForWriting bitine ihtiyacım olmadı, sadece işe yaramadığı bir hata vermedi.

Thanks için everybody that tried için help though

0
katma

Tamam, bu sadece aptal bir problemdi, değiştim

Set sImportFile = fsoImport.CreateTextFile(sFileName, ForWriting, True)

için

Set sImportFile = fsoImport.CreateTextFile(sFileName, True)

Bunu klasik asp'te yazarken ForWriting bitine ihtiyacım olmadı, sadece işe yaramadığı bir hata vermedi.

Thanks için everybody that tried için help though

0
katma