Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129

    [VB6] - Errata modifica dei dati

    Ciao a tutti,

    ho bisogno di un aiuto davvero grande perchè non so più dove sbattere la crapa.

    Dunque...ho creato un programma in vb6 per la gestione degli ordini di giornali e lo appoggio su un db access così composto:

    -tabella Clienti: nome,ind,tel,citta
    -tabella Giornali: titolo,costo
    -tabella Ordini: nome,tel,titolo,costo

    In vb6 le tabelle access sono gestite tramite i controlli ADO.

    Il problema mi arriva quando voglio cercare di modificare il nome (ed insieme il telefono) del cliente infatti succede che selezionando dalla tabella Clienti un nuovo cliente e confermando la modifica, nella tabella ordini mi trovo che:

    -al posto del nome modificato mi trovo un desolante 0 (zero)
    -al posto del telefono modificato mi rimane il numero del precedente cliente.

    Al che ho fatto anche il controllo col debug ma, e qui davvero non capisco, sembra che l'operazione la faccia correttamente.

    In allegato metto il codice "incriminato" con le risultanze dei debug....spero che qualcuno mi possa aiutare.

    Grazie e Ciao
    Giuseppe

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129
    MODIFICA DEL NOME DEL CLIENTE E DEL TELEFONOMODIFICA DEL NOME DEL CLIENTE E DEL
    TELEFONO
    (con gli asterischi c’è la risultanza del debug)

    codice:
    If ClienteOrdineOld <> "" Then
    '-- chiama la funzione che controlla se sto creando un ordine doppio
    Call VerificaOrdine(CheckOrdine)
    '-- Se la variabile 'CheckOrdine' è = 1 allora modifica l'ordine con i nuovi dati
    If CheckOrdine = 1 Then
            Debug.Print ("UPDATE TabellaRelazioni SET Nome = '" & Form38.Text3.Text & "' and Telefono = '" & Form38.Text1.Text & "' WHERE Nome = '" & yyy & "' And Telefono = '" & xxx & "' And Titolo = '" & zzz & "'")
    
    ***(UPDATE TabellaRelazioni SET Nome = 'UGO' and Telefono = '55555' WHERE Nome = 'BALANZONE' And Telefono = '999999' And Titolo = 'CORRIERE DELLA SERA') ***
    
    cn.Execute ("UPDATE TabellaRelazioni SET Nome = '" & Form38.Text3.Text & "' and Telefono = '" & Form38.Text1.Text & "' WHERE Nome = '" & yyy & "' And Telefono = '" & xxx & "' And Titolo = '" & zzz & "'")
           MsgBox "L'ordine è stato modificato", , ""
           '-- azzero la variabile
                    ClienteOrdineOld = ""
    Else
                    '-- altrimenti esce senza fare nulla (ed avendo già segnalato 
    che l'ordine esiste già)
                    Exit Function
    End If
    End if
    FUNZIONE DI CONTROLLO DELL’ORDINE (se c’è o no)
    (con gli asterischi c’è la risultanza del debug)

    codice:
     
    Function VerificaOrdine(CheckOrdine As Integer)
    '-- dichiaro le connessioni
    Dim sSQL As String
    Dim rsOrdine As New ADODB.Recordset
    '-- assegno i valori di cliente (text3) e titolo (text2) e raddoppio gli apostrofi alle variabili globali
    Form38.Text3.Text = Replace(Form38.Text3.Text, "'", "''")
    Form38.Text2.Text = Replace(Form38.Text2.Text, "'", "''")
    '-- faccio la select estraendo i dati dell’ordine esistente e che voglio modificare cioè:
    ‘-- nome del cliente (yyy), telefono (xxx) e giornale (zzz)
    Debug.Print "Select * from TabellaRelazioni Where Nome = '" & yyy & "' And Telefono = '" & xxx & "' And Titolo = '" & zzz & "'"
    
    ****(Select * from TabellaRelazioni Where Nome = 'BALANZONE' And Telefono = '999999' And Titolo = 'CORRIERE DELLA SERA')****
    
    sSQL = "Select * from TabellaRelazioni Where Nome = '" & yyy & "' And Telefono = '" & xxx & "' And Titolo = '" & zzz & "'"
    '-- apro la connessione
    rsOrdine.Open sSQL, Adodc1.ConnectionString
    '-- se non è alla fine del recordset (cioè esiste l'ordine che si sta confermando) allora imposto ChecklOrdine = 1
    If Not rsOrdine.EOF Then
       '-- Dichiaro la connessione
       Dim cn As ADODB.Connection
       '-- Imposto la connessione
       Set cn = New ADODB.Connection
       '-- Punto il database Access
       cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data 
    Source=D:\PGMVB6\clienti.mdb;Persist Security Info=False"
       '-- Imposto ad 1 la variabile 'CheckOrdine' che significa che l'ordine è nuovo e si può salvare
       CheckOrdine = 1
    Else
       '-- altirmenti imposto a 0 la variabile 'CheckOrdine' che significa che l'ordine è nuovo e si può salvare
       '-- e lo segnala all'utente
       MsgBox "Uno stesso ordine è già stato registrato" + Chr(10) + "Non è possibile registrare un ordine identico", , ""
       rsOrdine.Close
       CheckOrdine = 0
    End If
    End Function

  3. #3
    Utente di HTML.it L'avatar di MMarzia
    Registrato dal
    Mar 2001
    Messaggi
    1,781
    per rendere più leggibile il codice sarebbe opportuno includerlo nel tag [*code] ... [*/code] (senza asterischi)
    io sono festosamente cicciottello :: e. cartman

    t'amo senza sapere come, nè quando nè da dove,
    t'amo direttamente senza problemi nè orgoglio:
    così ti amo perchè non so amare altrimenti

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129
    sorry marzia....ne terrò conto.
    grazie.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129
    Risposto il codice scritto in modo più leggibile...
    codice:
    --
    MODIFICA DEL NOME DEL CLIENTE E DEL TELEFONO 
    (in grassetto la risultanza del debug) 
    (per xxx,yyy,zzz vedere la funzione VerificaOrdine)   
    
    If ClienteOrdineOld <> "" Then 
      '-- chiama la funzione che controlla se sto creando un ordine doppio   
      Call VerificaOrdine(CheckOrdine) 
      '-- Se la variabile 'CheckOrdine' è = 1 allora modifica l'ordine con i nuovi dati   
      If CheckOrdine = 1 Then 
        Debug.Print ("UPDATE TabellaRelazioni SET Nome = '" & Form38.Text3.Text & "' and Telefono = '" & Form38.Text1.Text & "' WHERE Nome = '" & yyy & "' And Telefono = '" & xxx & "' And Titolo = '" & zzz & "'") 
    
    (UPDATE TabellaRelazioni SET Nome = 'UGO' and   Telefono = '55555' WHERE Nome = 'BALANZONE' And   Telefono = '999999' And Titolo = 'CORRIERE DELLA SERA')   
    
        cn.Execute ("UPDATE TabellaRelazioni SET Nome = '" & Form38.Text3.Text & "' and Telefono = '" & Form38.Text1.Text & "' WHERE Nome = '" & yyy & "' And Telefono = '" & xxx & "' And Titolo = '" & zzz & "'") 
        MsgBox "L'ordine è stato modificato", , "" 
    '-- azzero la variabile   
        ClienteOrdineOld = "" 
    Else 
        '-- altrimenti esce senza fare nulla (ed avendo già segnalato che l'ordine esiste già)  
        Exit Function 
    End If 
    End if 
    
    ---- 
    
    FUNZIONE VerificaOrdine 
    (in grassetto la risultanza del debug)  
    
    Function VerificaOrdine(CheckOrdine As Integer) 
    
    '-- dichiaro le connessioni   
    Dim sSQL As String 
    Dim rsOrdine As New ADODB.Recordset 
    '-- assegno i valori di cliente (text3) e titolo (text2) e raddoppio gli apostrofi alle variabili globali   Form38.Text3.Text = Replac(Form38.Text3.Text, "'", "''") 
    Form38.Text2.Text = Replace(Form38.Text2.Text, "'", "''") 
    '-- faccio la select estraendo i dati dell’ordine esistente e che voglio modificare cioè: 
    ‘-- nome del cliente (yyy), telefono (xxx) e giornale (zzz)   
    Debug.Print "Select * from TabellaRelazioni Where Nome = '" & yyy & "' And Telefono = '" & xxx & "' And Titolo = '" & zzz & "'" 
    
    (Select * from TabellaRelazioni Where Nome = 'BALANZONE' And Telefono = '999999' And Titolo = 'CORRIERE DELLA SERA')   
    
    sSQL = "Select * from TabellaRelazioni Where Nome = '" & yyy & "' And Telefono = '" & xxx & "' And Titolo = '" & zzz & "'" 
    
    '-- apro la connessione   
    rsOrdine.Open sSQL, Adodc1.ConnectionString 
    '-- se non è alla fine del recordset (cioè esiste l'ordine che si sta confermando) allora imposto ChecklOrdine = 1   
    If Not rsOrdine.EOF Then 
    '-- Dichiaro la connessione   
    Dim cn As ADODB.Connection 
    '-- Imposto la connessione   
    Set cn = New ADODB.Connection 
    '-- Punto il database Access   
       cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\PGMVB6\clienti.mdb;Persist Security Info=False" 
       '-- Imposto ad 1 la variabile 'CheckOrdine' che significa che l'ordine è nuovo e si può salvare   
       CheckOrdine = 1 
    Else 
       '-- altirmenti imposto a 0 la variabile 'CheckOrdine' che significa che l'ordine non può salvare e lo segnala all'utente      MsgBox "Uno stesso ordine è già stato registrato" + Chr(10) + "Non è possibile registrare un ordine identico", , "" 
       rsOrdine.Close 
       CheckOrdine = 0 
    End If 
    
    End Function

  6. #6
    Originariamente inviato da giuxmian
    Risposto il codice scritto in modo più leggibile...
    se per te è + leggibile :rollo:
    usa i tag code specialmente se il codice è piuttosto lungo
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129
    ok riprovo...puoi chiudere questo thread così ne creo uno nuovo?

  8. #8
    Originariamente inviato da giuxmian
    ok riprovo...puoi chiudere questo thread così ne creo uno nuovo?
    no modifico io
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    129
    come vuoi....cmq sapreste darmi una mano?
    sono praticamente bloccato....

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.