Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    inserimento dati su due tabelle con id tipo contatore e numerico

    ciao a tutti. vorrei esporvi un mio dubbio.

    per il sito che sto progettando prevedo una fase di inserimento di valori in 2 tabelle collegate tramite id. fino ad oggi i campi erano entrambi di tipo numerico e tutto funzionava. ora il mio supervisore vuole che il tipo di dato del primo id sia contatore quindi quello che faccio non funziona più. prima l'utente inseriva l'id che voleva da una form e in entrambe le tabelle il valore dell'id era quello. ora il tipo contatore attribuisce lui il valore alla prima tabella ma..come faccio a far salvare lo stesso valore anche nella seconda tabella?

    spero di essere stato chiaro

    vi posto il mio codice...

    con questo prelevo i valori dalla form
    codice:
    <%
    Areadaverificare = request.Form("area_da_verificare")
    Macroarea = request.Form("macroarea")
    Anno = request.Form("anno")
    Mese = request.Form("mese")
    Dataverifica = request.Form("data_verifica")
    Dataregistrazione = request.Form("data_registrazione")
    Datainserimento = request.Form("data_inserimento")
    Datascadenza = request.Form("data_scadenza")
    Verificatore = request.Form("verificatore")
    Accompagnatore = request.Form("accompagnatori")
    Ditta = request.Form("ditta")
    Descrizione = request.Form("descrizione")
    Commento = request.Form("commento")
    Rilievo = request.Form("Descr_rilievo")
    %>
    con questo vado ad aggiungere dati sulla prima tabella (quella il cui id è di tipo contatore)

    codice:
    <%
    'Codice inserimento dati in database
    set OBJdbConnection=Server.CreateObject("ADODB.Connection")
    
    'Server.MapPath si riferisce alla directory corrente del dominio
    
     OBJdbConnection.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/SITO/database/verifichedisistema.mdb")
     Set rs=server.CreateObject("ADODB.Recordset")
    
     rs.Open "vds_generale",OBJdbConnection,3,3
     rs.AddNew
     rs("ID") = id
     rs("area_da_verificare") = areadaverificare
     rs("anno") = anno
     rs("mese") = mese
     rs("data_verifica") = dataverifica
     rs("data_registrazione") = dataregistrazione
     rs("verificatore") = verificatore
     rs("accompagnatori") = accompagnatore
     
     
     rs.update
     rs.Close
     OBJdbConnection.Close
    con questo inserisco i dati sul secondo (id_vds è di tipo numerico)
    codice:
     
    
     OBJdbConnection.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/SITO/database/verifichedisistema.mdb")
     Set rs=server.CreateObject("ADODB.Recordset")
     rs.Open "vds_dettaglio",OBJdbConnection,3,3
     rs.AddNew
    
     rs("ID_vds") = id 
     rs("macroarea") = macroarea
     rs("data_inserimento") = datainserimento
     rs("data_scadenza") = datascadenza
     rs("ditta") = ditta
     rs("descrizione") = descrizione
     rs("commento") = commento
     rs("Descr_rilievo") = rilievo
     
     rs.update
     rs.Close
     
     OBJdbConnection.Close
    %>
    la riga incriminata è sicuramente quella in rosso..cosi è come la usavo prima..come potrei correggerla per far prendere il valore id di tipo contatore?

    grazie mille per l'aiuto

    Alessandro

  2. #2
    Devi fare un passaggio in più.
    Prima inserisci il record nella tabella con l'ID autoincrementale, poi ne ricavi il valore e lo inserisci nell'altra tabella. E' questo quello di cui avevi bisogno?

  3. #3
    vediamo se ho capito quello che dici:

    il mio utente attualmente clicca su un link che apre la pagina per l'inserimento. inseriti tutti i dati c'è un bottone che passa i dati nella seconda pagina dove i dati vengono salvati nel db e poi mostrati a video.

    tu mi stasesti suggerendo di creare una pagina che genera l'id..questa pagina manda alla seconda (magari con una redirect) dove si inseriscono i dati..e poi si arriva alla pagina di salvataggio...ho capito bene?

    inoltre, visto che voi ve ne intendete di sicuro più di me vorrei un consiglio: è più corretto usare entrambi i campi numerici con l'id dato dall'utente oppure farlo con un campo contatore e uno numerico?

  4. #4
    Puoi fare tutto tranquillamente sulla stessa pagina.

    codice:
    <%
    Areadaverificare = request.Form("area_da_verificare")
    Macroarea = request.Form("macroarea")
    Anno = request.Form("anno")
    Mese = request.Form("mese")
    Dataverifica = request.Form("data_verifica")
    Dataregistrazione = request.Form("data_registrazione")
    Datainserimento = request.Form("data_inserimento")
    Datascadenza = request.Form("data_scadenza")
    Verificatore = request.Form("verificatore")
    Accompagnatore = request.Form("accompagnatori")
    Ditta = request.Form("ditta")
    Descrizione = request.Form("descrizione")
    Commento = request.Form("commento")
    Rilievo = request.Form("Descr_rilievo")
    
    
    set OBJdbConnection=Server.CreateObject("ADODB.Connection")
    
    'Server.MapPath si riferisce alla directory corrente del dominio
    
     OBJdbConnection.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/SITO/database/verifichedisistema.mdb")
     Set rs=server.CreateObject("ADODB.Recordset")
    
     rs.Open "vds_generale",OBJdbConnection,3,3
     rs.AddNew
    '  rs("ID") = id    questo certamente non ti serve più, essendo ID autoincrementale
     rs("area_da_verificare") = areadaverificare
     rs("anno") = anno
     rs("mese") = mese
     rs("data_verifica") = dataverifica
     rs("data_registrazione") = dataregistrazione
     rs("verificatore") = verificatore
     rs("accompagnatori") = accompagnatore
     
     
     rs.update
     rs.Close
     OBJdbConnection.Close
    
     'cosi recuperi l'ID
     Set rs=server.CreateObject("ADODB.Recordset")
     sql = "select ID from nometabella order by ID DESC limit 0,1;"
     rs.open sql, OBJdbConnection
     if rs.bof and rs.eof then
     else
         
        newId = rs("ID")
    
     end if
     rs.close
     set rs=nothing
     
    
    
    Set rs=server.CreateObject("ADODB.Recordset")
     rs.Open "vds_dettaglio",OBJdbConnection,3,3
     rs.AddNew
    
     rs("ID_vds") = newId
     rs("macroarea") = macroarea
     rs("data_inserimento") = datainserimento
     rs("data_scadenza") = datascadenza
     rs("ditta") = ditta
     rs("descrizione") = descrizione
     rs("commento") = commento
     rs("Descr_rilievo") = rilievo
     
     rs.update
     rs.Close
    
    
    %>

  5. #5
    allora..ho provato e riprovato tutta la mattina ma non funziona. o meglio...mi aggiunge i dati all'interno della tabella vds_generale che ha il campo di tipo contatore ma non nella vds_dettaglio che ce l'ha numerico..

    quindi credo che i prblemi comincino più o meno qui..

    codice:
     
     'cosi recuperi l'ID
     Set rs=server.CreateObject("ADODB.Recordset")
     sql = "select ID from nometabella order by ID DESC limit 0,1;"
     rs.open sql, OBJdbConnection
     if rs.bof and rs.eof then
     else
         
        newId = rs("ID")
    
     end if
     rs.close
     set rs=nothing
    come fa lui a sapere che deve riprendere proprio quello appena creato?
    quando mi scrivi "nometabella" io ho inserito la tabella VDS_generale..cioè quella col contatore..sbaglio?

    la seconda parte invece l'ho modificata come mi hai scritto tu..

  6. #6
    ho provato anche a dimensionare il valore newid prima di assegnargli il valore rs("id") ma evidentemente il problema non era quello

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Questo e' un metodo alternativo:
    codice:
    ' creo un codice ragionevolmente univoco
    Randomize : temporaneo = CStr(Timer() + Rnd())
    myConnection.execute "insert into Tabella (CampoTesto) values ('" & temporaneo & "')"
    ' leggo il contatore assegnato
    set rs = myConnection.execute("select CampoId from Tabella where CampoTesto = '" & temporaneo & "'")
    IdAssegnato = rs("CampoId")
    ' modifico il record appena creato con i valori reali
    ....
    ' uso l'ID trovato
    ...
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    Hai qualche messaggio di errore? Così a stima è un pelo complicato....

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.