• User

    Eliminare voce da db

    Salve,
    come si fa ad eliminare una voce da campi db?

    Tipo:
    Campo NOME: franco, giovanni, nicola
    Campo FORMATO: 10, 12, 14
    Se voglio eliminare GIOVANNI e quindi il suo numero di riferimento cioè il 12 come posso fare?
    Grazie
    G.


  • Moderatore

    Ciao djjunior, direi che dipende dal db, il linguaggio che devi utilizzare è genericamente chiamato SQL, che però ha le sue declinazioni in funzione appunto del db.
    In generale funziona + o - così:

    DELETE FROM TABELLA WHERE FORMATO = 12
    

    Dove TABELLA è la tabella in cui sono contenuti i nomi, e FORMATO dovrebbe essere il campo univoco che identifica quel nome.

    Questo script poi lo devi far eseguire alla tua pagina attraverso un Provider in grado di colloquiare con il db, potrebbe essere ADO per i linguaggi come ASP oppure ADO.NET per ASP.NET o ancora LINQtoSQL o EntityFramework, ma per questa scelta bisognerebbe sapere anche quale piattaforma di sviluppo/linguaggio stai utilizzando...

    Sperando di non aver aggiunto confusione al tuo dubbio ti auguro un buon lavoro.


  • User

    Ciao t ringrazio x la tua risposta ma io nn devo cancellare il valore di un campo db access ma cancellare una voce presente in un campo. In un campo denominato NOME ci possono essere + voci che andrebbero successivamente splittate. Quindi intendo cancellare x esempio la terza voce d un campo tipo:
    Campo:NOME
    Valore:PAOLO, ANNA, MARCO
    Campi:FORMATO
    Valore:12, 14, 16
    Ecco io dovrei eliminare per es: ANNA e il formato di rif cioè: 14.
    Ecco, come si fa?
    Grazie
    G.


  • Moderatore

    Scusa ma mi sono perso...

    Non stiamo parlando di un db ma di un testo? La provenienza di questo testo non è quindi oggetto della domanda?

    Allora il testo che hai a disposizione è contenuto in una variabile che si chiama NOME, visto che il contenuto è separato da virgola (,) puoi fare una split del testo ottenendo così un array, rimuovere l'elemento interessato, tenendo presente che l'array ha base 0 normalmente, ed infine eseguire una join dei valori restanti nella variabile di partenza o altra variabile dichiarata all'occorrenza...

    E' questo che devi fare?


  • User

    Si si è questo quello che devo fare! Pero il testo da eliminare può variare, diciamo che lo recupero da una request.querystring e devo cancellare contemporaneamente da 2 campi allo stesso punto. Tipo la terza voce separata da virgola!
    Grazie


  • Moderatore

    Allora ti consiglio di usare la Split, funzione descritta in questa pagina: Split
    Mentre scorri l'array ricostruisci il testo aggiungendo la virgola (,) e conti le ricorsioni, quando arrivi alla terza la salti e prosegui con il resto.

    Lo stesso fai con l'altro parametro. Magari puoi costruire una funzione che lo fa prendendo in carico il parametro da scorrere e l'indice da saltare.


  • User

    Grazie. Potresti farmi un esempio pratico? Non saprei come partire. Grazie


  • Moderatore

    Dovrebbe essere qualcosa di simile

    
    Function DeleteFromArray(text,index)
    Dim r As String
    Dim i As Int[INDENT]a=Split(text, ",")
    i=0
    for each x in a
    [/INDENT]
    [INDENT=2]If i <> index Then[/INDENT]
    [INDENT=3]r = r & x & ","
    [/INDENT]
    [INDENT=2]End If
    i = i + 1[/INDENT]
    [INDENT]next
    DeleteFromArray = r[/INDENT]
    End Function
    
    

    Non ho controllato la sintassi, vbScript non lo uso più da anni :bho: e non me lo ricordo più, faccio anche un po' confusione con VB

    Spero possa aiutarti comunque


  • User

    Grazie lo proverò anche sono ho capito bene come posso eliminare da 2 o più campi contemporaneamente il valore (diciamo il terzo per esempio) e implementarlo al mio db access. Grazie e scusami ma non mi + chiara proprio questa parte.
    G.


  • User

    Nessun aiuto?


  • Moderatore

    Scusa ma non ti seguo nuovamente, i dati arrivano dal DB o dal QueryString? Se arrivano dal DB come mai hai elementi separati da virgola?

    Comunque per eseguire l'operazione di cancellazione dell'elemento dall'elenco devi "chiamare" due volte DeleteFromArray passando prima i nomi e l'indice da eliminare e subito dopo i numeri e l'indice, indice che dovrà essere lo stesso di prima...


  • User

    Allora i dati arrivano dal querystring e devo cancellarli dal db. Grazie


  • Moderatore

    Continua a non essermi chiaro, che relazione c'è tra i dati del QueryString e quelli nel DB, come fai ad essere sicuro che il dato in una determinata posizione corrisponda a quella del DB?


  • User

    La relazione che cè è il NOME che è univoco pertanto recuperando dal querystring il NOME di conseguenza in base alla posizione del nome si trova la posizione del formato! Ed effettuare la cancellazione d entrambi!


  • Moderatore

    Quindi fammi capire se ho capito:

    Nel QueryString hai un elenco di nomi separato da virgola!
    Sai anche in quale posizione si trova il nome da eliminare, ma non qual'è e devi quindi trovarlo!

    Ecco come:

    
    Function SearchFromArray(text,index)
    Dim i As Int
    [INDENT]a=Split(text, ",")[/INDENT]
    [INDENT]i=0[/INDENT]
    [INDENT]for each x in a[/INDENT]
    [INDENT=2]If i = index Then[/INDENT]
    [INDENT=3]SearchFromArray = x[/INDENT]
    [INDENT=2]End If[/INDENT]
    [INDENT=2]i = i + 1[/INDENT]
    [INDENT]next[/INDENT]
    End Function
    
    

    Con la stessa funzione puoi anche trovare il FORMATO, passando il testo contenente i formati separati da virgola.

    A questo punto però devi eliminarli dal DB e per questo devi utilizzare SQL come nella mia prima risposta...


  • User

    In pratica ricevo un solo valore, dovrei fare tipo così per cancellare i 2 valori presenti alla stessa posizione nel campo db, non mi è chiaro questo passaggio:

    
    **nome = request.querystring("file")
    formato = request.querystring("formato")
    
    Function SearchFromArray(nome,index)
    Dim i As Int
    a=Split(nome, ",")
    i=0
    for each x in a
    If i = index Then
    SearchFromArray = x
    End If
    i = i + 1
    next
    End Function
    ****
    Function SearchFromArray(formato,index)
    Dim i As Int
    a=Split(formato, ",")
    i=0
    for each x in a
    If i = index Then
    SearchFromArray = x
    End If
    i = i + 1
    next
    End Function**
    
    

    Poi come faccio ad eliminarlo dalla query sql?
    Ho db access?
    Grazie 1000 per l'aiuto che mi stai dando.
    G.


  • User

    Ho provato a fare questo!

    
    nome = request.querystring("file")
    
    function SearchFromArray(nome,index)
    
    a=Split(nome, ",")
    i=0
    for each x in a
    If i = index Then
    SearchFromArray = x
    End If
    i = i + 1
    
    sql = "DELETE * FROM ordini WHERE foto = " & x(i)
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn, 3, 3
    
    next
    End Function
    
    
    

    Almeno per eliminare un solo valore, ma io devo eliminare + valori collegati tra loro (il NOME e il FORMATO di riferimento)
    Ma non elimina nulla.
    Dove sbaglio?
    Aiutatemi, grazie
    G.


  • User

    Nessun aiuto???