- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- Problema inserimento record doppi
-
@cali1981 said:
Scusami, ma le righe devono essere uguali o simili? Perchè tu escludi le righe identiche, perchè usi tutti AND nella query. in teoria dovrebbe inserire la riga anche la prima volta, a meno che la stessa riga sia già dentro. Altrimenti, il codice fa bene a inserire tutte e 4 le righe perchè hanno data diversa.
Grazie.
Il criterio di esclusione è che la riga attuale letta dal file csv sia simile a quella precedente: se è così va esclusa dalla query di inserimento dati.
Infatti alla prima lettura del file csv:
-
il primo IF controlla che non ci siano record-righe uguali già registrate nel db mysql;
-
il secondo IF mette a confronto i due CODICI PERSONALI, quello letto e quello della riga precedente del file csv e se sono diversi li registra nel db:
'QUI CONTROLLO LE RIGHE SIMILI ED INSERISCO NEL DB MYSQL if objRS("CODICE_PERSONALE") <> strVariabile then strSql = "INSERT INTO tabellaCSV ... " cn.execute(strSql) strVariabile = objRS("CODICE_PERSONALE") end if
Il problema è nel primo IF perchè in un' eventuale seconda lettura dello stesso file csv, non trova la riga esclusa in prima lettura e la inserisce nel db.
Mi segui?
-
-
Ok, allora il problema è che strVariabile = objRS("CODICE_PERSONALE")
lo fa solo se la riga non è presente nel db, quindi lui la prima volta inseirsce la riga 1, strvariabile diventa uguale a quel codice e la seconda non la inserisce. La seconda volta invece strvaribile non lo valorizza perchè non entra nell'if. Giusto?
-
@cali1981 said:
Ok, allora il problema è che strVariabile = objRS("CODICE_PERSONALE")
lo fa solo se la riga non è presente nel db, quindi lui la prima volta inseirsce la riga 1, strvariabile diventa uguale a quel codice e la seconda non la inserisce. La seconda volta invece strvaribile non lo valorizza perchè non entra nell'if. Giusto?Giustissimo.
-
@cali1981 said:
Ok, allora il problema è che strVariabile = objRS("CODICE_PERSONALE")
lo fa solo se la riga non è presente nel db, quindi lui la prima volta inseirsce la riga 1, strvariabile diventa uguale a quel codice e la seconda non la inserisce. La seconda volta invece strvaribile non lo valorizza perchè non entra nell'if. Giusto?Scusa non ho capito se mi hai dato la soluzione al problema o hai chiesto semplicemente conferma del tuo ragionamento al riguardo...
-
Beh questa è una cosa che non va bene, quindi devi trovare un altro modo per farlo. Ad esempio, strvariabile = arrText(7)
-
@cali1981 said:
Beh questa è una cosa che non va bene, quindi devi trovare un altro modo per farlo. Ad esempio, strvariabile = arrText(7)
Scusa non ho capito.
-
Invece di fare:
strVariabile = objRS("CODICE_PERSONALE")
lo toglie e metti
strvariabile = arrText(7)
prima della riga con il commento:
'CONTROLLO NEL DB L'ESISTENZA DELLA RIGA UGUALE
-
@cali1981 said:
Invece di fare:
strVariabile = objRS("CODICE_PERSONALE")
lo toglie e metti
strvariabile = arrText(7)
prima della riga con il commento:
'CONTROLLO NEL DB L'ESISTENZA DELLA RIGA UGUALEHo provato ma con questa modifica non inserisce più nulla nel db mysql.
Fatico a seguirti, sorry.
-
No il resto è tutto uguale. In pratica, nel tuo script tu fai la query per vedere se il record c'è già, se non c'è lo inserisci e poi salvi il codice per controllarlo rispetto al successivo. Il problema è che se il record c'è già tu nn ti salvi il codice e perciò al secondo inserimento il record 2 lo inserisce! Invece facendo come ti ho detto io tu il codice lo salvi prima in ogni caso, quindi stavolta il record 2 non lo inserirà.
-
Ho provato ma con questa modifica non inserisce più nulla nel db mysql.
-
Scrivi qui il nuovo codice
-
Questo è il nuovo codice ASP:
PercorsoCSV = "D:\Inetpub\wwwroot\CSV\file1.csv " Set objFSO = Server.CreateObject("Scripting.FileSystemObject") strURL = percorsoCSV Set objFile = objFSO.OpenTextFile(strURL) objFile.SkipLine() strVariabile = "" Do While Not objFile.AtEndOfStream strText = objFile.readLine arrText = split(strText, ",", 17) strVariabile = arrText(7) 'CONTROLLO NEL DB L'ESISTENZA DELLA RIGA UGUALE SQL = " SELECT * " SQL = SQL & " FROM " SQL = SQL & " tabellaCSV " SQL = SQL & " WHERE " SQL = SQL & " NOME = '" & replace(arrText(0), """", "") & "' " SQL = SQL & " AND " SQL = SQL & " DATA = " & formatDBDate(replace(arrText(2), """", ""), "mysql") & " " SQL = SQL & " AND " SQL = SQL & " ORA = '" & replace(arrText(3), """", "") & "' " SQL = SQL & " AND " SQL = SQL & " CODICE_PERSONALE = '" & replace(arrText(7), """", "") & "' " SQL = SQL & " AND " SQL = SQL & " DESCRIZIONE = '" & replace(arrText(8), """", "") & "' " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.open SQL, cn 'APERTURA PRIMO IF E CONTROLLO SU objRS if objRS.eof then 'QUI CONTROLLO LE RIGHE SIMILI ED INSERISCO NEL DB MYSQL if objRS("CODICE_PERSONALE") <> strVariabile then strSql = "INSERT INTO tabellaCSV ... " cn.execute(strSql) end if 'ALTRIMENTI SU PRIMO IF else response.write "record già presente!<br>" 'CHIUSURA PRIMO IF end if Loop objRS.Close() Set objRS = Nothing cn.Close() Set cn = nothing Set fsoMyFile = CreateObject("Scripting.FileSystemObject") if fsoMyFile.FileExists (PercorsoCSV) then fsoMyFile.DeleteFile PercorsoCSV end if Set fsoMyFile = Nothing Set objFSO = Nothing
-
giusto scusa, rimetti strvariabile come era all'inizio e aggiunge quella che ti ho detto ora, strVariabile = arrText(7) prima di response.write "record già presente!<br>" e dopo 'ALTRIMENTI SU PRIMO IF
else
-
@cali1981 said:
giusto scusa, rimetti strvariabile come era all'inizio e aggiunge quella che ti ho detto ora, strVariabile = arrText(7) prima di response.write "record già presente!<br>" e dopo 'ALTRIMENTI SU PRIMO IF
elseMitico, grande !!!
Adesso si funziona!!!
1000 grazie
-
di niente!
Ciao