Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764

    Scrivere nel db, evitando i duplicati

    Ho una tabella che contiene tre campi: id, nome file, attiva.
    Aggiungo dei record (sono nomi di immagini presenti in una cartella), ma vorrei saltare i nomi già presenti nella tabella.

    Ho provato ad impostare come chiave primaria il campo con i nomi dei file. Il problema è che quando vengono scritti i dati nella tabella, se si incontra un nome già presente, mi viene restituito questo errore:
    [MySQL][ODBC 3.51 Driver][mysqld-5.0.45-community-nt]Duplicate entry 'foto_1.jpg' for key 1

    La chiave primaria non mi accetta i duplicati, ed è ciò che volevo ma come faccio, a questo punto, a dirgli di saltare questo file e passare al successivo, e così via fino alla fine?


    In alternativa, l'idea è appunto scrivere nel db, ma evitare di scrivere più volte lo stesso nome, avete qualche altro suggerimento (se c'è un metodo più "corretto") diverso dall'impostare il campo del nome come chiave primaria?

    Per completezza riporto il codice che sto usando:
    codice:
    Set objFSO = Nothing
    
    strPath = "/images/panoramiche" 
    Set fileCreate = CreateObject("Scripting.FileSystemObject")
    Set fileGet = fileCreate.GetFolder(Server.MapPath(strPath))
    Set files = fileGet.Files
    
    
    For Each file in files
    sqlString = "INSERT INTO banner" &_
    	"(img) VALUES (" &_
                 " '" & file.name & "')"
    Conn.Execute sqlString
    Next
    
    
    Set fileCreate=Nothing 
    Set fileGet=Nothing 
    Set files=Nothing
    Grazie!

  2. #2
    1: lo cerchi. se c'è fai una UPDATE, se non c'è fai una INSERT

    oppure

    2: lo cancelli sempre e comunque, poi fai una INSERT

    oppure

    3. lo cerchi, se c'è lo salti, se non c'è fai una INSERT

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Grazie per la risposta.

    Ma come lo cerco?

    Non so come confrontare ogni singolo nome presente nella cartella sul server con i nomi presenti nella mia tabella.

    Pensavo a qualcosa di questo tipo (vedi codice)... però mi "manca" il pezzo scritto in rosso.

    codice:
    For Each file in files
    If IL FILE ESISTE NELLA TABELLA DEL DB  Then
    Response.Write("I dati sono stati aggiornati
    ")
    Response.Write("Torna al pannello di controllo")
    Else
    sqlString = "INSERT INTO banner" &_
    	"(img) VALUES (" &_
                 " '" & file.name & "')"
    Conn.Execute sqlString
    End If
    Next

  4. #4
    dai, SAI come si cerca! fai una SELECT con gli stessi valori con cui poi fai la INSERT!

  5. #5
    codice:
    sql = "SELECT campo FROM tabella WHERE campo = '" & variabile & "'"
    set rs = conn.execute(sql)
      if rs.eof then
        conn.execute("INSERT INTO tabella (campo) VALUES('" & variabile & "')"
        response.write "Operazione eseguita"
      else
        response.write "Valore esistente"
      end if
    rs.close
    set rs = nothing

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Grazie!!! Funziona alla grande!!!

    codice:
    For Each file in files
    Sql = "SELECT img FROM banner WHERE img = '" & file.name & "'"
    Set RS = Conn.Execute(Sql)
      If RS.EOF Then
        Conn.Execute("INSERT INTO banner (img) VALUES('" & file.name & "')")
    	Response.Write(file.name)
    	Response.Write(" è stato aggiunto al database.
    ")
      Else
    	Response.Write(file.name)
    	Response.Write(" è già presente nel database.
    ")
      End If
    RS.Close
    Set RS = Nothing
    Next

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.