ループして各行の ID を取得し、データベースをループして csvID を各 dbID と比較する必要がある CSV があります。IDがデータベースに存在する場合は、CSV からの関連情報でレコードを更新します。
しかし、私は(私が知る限り)無限ループに陥っており、そこから抜け出す方法がわかりません。
Option Explicit
Server.ScriptTimeout = 2147483647
dim conn, rs, updatedUser, updatedDate, filePath
dim deactivateSQL, csvConn, connCSV, csv, sql
dim dbID, dbSSN, dbLast, dbFirst, dbMiddle, dbGender, dbScl, dbCls
dim csvID, csvSSN, csvLast, csvFirst, csvMiddle, csvGender
dim csvScl, csvCls, csvGrd, csvHrm
updatedUser = Request.Cookies("UserN")
updatedDate = date() & " " & time()
filePath = "\path\to\file"
' Connect to Students.CSV
csvConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &_
Server.MapPath(filePath) &_
";Extended Properties='text;HDR=no;FMT=Delimited';"
Set connCSV = Server.CreateObject("ADODB.Connection")
connCSV.Open csvConn
Set csv = Server.CreateObject("ADODB.recordset")
csv.open "SELECT * FROM Students.csv", connCSV
temp = csv.RecordCount
redim toAdd(temp)
' Begin looping through Students.csv
do until csv.eof
' Get Students.csv Column Values
' please disregard the "replace" stuff for now
csvID = replace(replace(csv.fields(0), " ", ""), "'", "")
csvSSN = replace(replace(csv.fields(1), " ", ""), "'", "")
csvLast = replace(replace(csv.fields(2), " ", ""), "'", "")
csvFirst = replace(replace(csv.fields(3), " ", ""), "'", "")
csvMiddle = replace(replace(csv.fields(4), " ", ""), "'", "")
csvGender = replace(replace(csv.fields(5), " ", ""), "'", "")
csvScl = replace(replace(csv.fields(6), " ", ""), "'", "")
csvGrd = replace(replace(csv.fields(7), " ", ""), "'", "")
csvHrm = replace(replace(csv.fields(8), " ", ""), "'", "")
' Connect to database
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "E:/path/to/file/database.mdb"
set rs=Server.CreateObject("ADODB.Recordset")
rs.open "SELECT * FROM tblStudent", conn
' Begin looping through tblStudents
do until rs.eof
' Get tblStudents.StudentID
dbID = rs.fields("StudentID")
dbSSN = rs.fields("SSN")
dbLast = rs.fields("LastName")
dbFirst = rs.fields("FirstName")
dbMiddle = rs.fields("MiddleName")
dbGender = rs.fields("Gender")
dbScl = rs.fields("School")
dbCls = rs.fields("Class")
if dbID = csvID then
' if dbID matches csvID,
' update tblStudents with the new CSV data
sql = "UPDATE tblStudent SET " &_
"Active='Yes' AND " &_
"SSN='" & csvSSN & "' AND " &_
"LastName='" & csvlast & "' AND " &_
"FirstName='" & csvFirst & "' AND " &_
"MiddleName='" & csvMiddle & "' AND " &_
"Gender='" & csvGender & "' AND " &_
"School='" & csvScl & "' AND " &_
"GradeLvl='" & csvGrd & "' AND " &_
"HomeRoomID='" & csvHrm & "' AND " &_
"PrevClass1='" & dbCls & "' AND" &_
"lastUpdatedUser='" & updatedUser & "' AND" &_
"lastUpdatedDate='" & updatedDate & "'" &_
"WHERE StudentID=" & dbID & ";"
on error resume next
conn.execute(sql)
else
' I am not sure what to do here...
' I thought about creating a dynamic array:
' adding to the array for each ID not found
' however, I am not THAT skilled.
' If someone could help me with that,
' I would be grateful
end if
rs.movenext
loop
csv.movenext
loop
' This is the INSERT SQL I need to execute,
' but do not exactly know where it needs to be placed either
sql = "INSERT INTO tblStudent (" &_
"Active, StudentID, SSN, LastName, FirstName, MiddleName, Gender, "&_
"School, GradeLvl, HomeRoomID, lastUpdatedUser, LastUpdatedDate" &_
") VALUES (" &_
"'Yes', '" & csvID & "', '" & csvSSN & "', '" & csvLast & "', '" &_
csvFirst & "', '" & csvMiddle & "', '" & csvGender & "', '" &_
csvScl & "', '" & csvGrd & "', '" & csvHrm & "', '" &_
updatedUser & "', '" & updatedDate & _
"');"
on error resume next
conn.execute(sql)
if error<>0 then
response.cookies("updated") = "no"
response.cookies("updated").Expires = dateadd("s", 2, now())
response.redirect("step-5.asp")
else
response.cookies("updated") = "yes"
response.cookies("updated").Expires = dateadd("s", 2, now())
response.redirect("step-6.asp")
end if
これは、これを行うための最良の方法でさえないかもしれません。私はここでも提案を受け付けています。しかし、最初にこの作業が必要です。CSV をループし、DB に csvID が存在する場合は DB を更新し、存在しない場合は csvID 行情報を挿入します。
//アップデート
Richard Bensonのおかげで、ほとんどの場合、自分のコードを適切に動作させることができました:
csvLast = replace(csv.fields(2), "'", "")
csvFirst = replace(csv.fields(3), "'", "")
if csv.fields(4) <> NULL then
csvMiddle = replace(csv.fields(4), "'", "")
else
csvMiddle = csv.fields(4)
end if
このreplace()
機能は姓と名で機能しますが、ミドルネームになると機能しません。そのままにしておくとcsvMiddle = replace(csv.fields(4), "'", "")
、ミドルネームフィールドが空になることがあるため、エラーが発生することがあります。これを正しく機能させるにはどうすればよいですか?これは、このコードがスムーズに実行される前の最後の問題である可能性が高いです。