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

    update di tabelle in join che non funziona

    ciao, ho un semplicissimo file asp che fa un update su un database access ma mi da un errore dicendo che il database e' in sola lettura.

    Microsoft OLE DB Provider for ODBC Drivers error '80004005'

    [Microsoft][ODBC Microsoft Access Driver] Cannot update. Database or object is read-only.

    /calcola_quot.asp, line 38

    La riga 38 e' proprio rs.update.

    codice:
    Set Rs = Server.CreateObject("ADODB.Recordset")
    Rs.ActiveConnection = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("mdb-database\data.mdb")
    
    Sql = "select * from GIOCATORI,SQUADRE "
    Sql = Sql + " where GI_SQUADRA = SQ_COD "
    Sql = Sql + " and GI_NOME <> 'Totale' "
    
    '* Apertura RS
    Rs.Open Sql,,3,3
    
    while not Rs.EOF
       Rs("GI_VAL")=FormatNumber(Rs("SQ_MEDIA")*5*1)
       Rs.update
    
       Rs.update
       rs.movenext
    wend
    se tolgo nella select le due tabelle e ne metto una sola, ovviamente usando solo i campi della tabella utilizzata, funziona.

    come faccio per fare update di join di tabelle?

    ho provato a vedere se fossero i parametri della open che non andavano bene. ho provato anche 2,2 ma restituisce lo stesso errore

    grazie ciao

  2. #2
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    hai messo il dbase in una cartella senza i dovuti permessi per aggiornarlo....
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  3. #3
    ma se faccio l'update con una select di una sola tabella:

    select * from TABELLA

    l'update funziona mentre se ci sono piu tabelle (join) allora mi da l'errore.

    select * from TABELLA1,TABELLA2
    where primarikey = foreignkey

    e' un problema di permessi??

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    99
    Mi sa che è sbagliata la proposizione sql.
    Il join tra due tabelle dovrebbe essere il seguente
    SELECT [campo1], [campo2]... FROM [tabella] INNER JOIN [tabella1] ON [campoTabella] = [campoTabella1]
    dove [campo1] e [campo2] possono essere anche tutti i campi di entrambi le tabelle
    [tabella.*], [tabella1.*]

  5. #5
    adesso ho risolto in questo modo:

    codice:
    Set Rs = Server.CreateObject("ADODB.Recordset")
    Rs.ActiveConnection =  "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("mdb-database\data.mdb")
    
    Sql = "select * from GIOCATORI as GIO1 "
    Sql = Sql + " where GIO1.GI_SQUADRA in ("
    Sql = Sql + " select GIO2.GI_SQUADRA from GIOCATORI as GIO2,SQUADRE "
    Sql = Sql + " where GIO2.GI_SQUADRA = SQ_COD "
    Sql = Sql + " and SQ_SERIE = 'D' ) "
    
    '* Apertura RS
    Rs.Open Sql,,3,3
      Rs("GI_VAL")=FormatNumber(Rs("GI_MEDIA")*5*1)
      rs.update
      rs.movenext
    wend
    
    Rs.Close
    Set Rs = nothing
    adesso provo anche il tuo codice con il join.

    cmq resta il fatto che facendo il join come ho fatto io, la visualizzazione funziona bene (nel senso che i record ottenuti sono giusti) pero' l'update non funziona.

    forse e' una caratteristica di Access.

  6. #6
    ci sono riuscito :clap e dopo numerose prove ho anche capito il motivo (il perche' pero' non lo so)

    ho inserito questo codice come mi hai suggerito

    codice:
    Sql = "SELECT * FROM GIOCATORI INNER JOIN SQUADRE "
    Sql = Sql + " ON GIOCATORI.GI_SQUADRA = SQUADRE.SQ_COD "
    Sql = Sql + " where SQUADRE.SQ_SERIE = 'D' "
    e in questo modo aprendo la connessione con i seguenti parametri

    rs.open sql,,3,3

    mi modifica il record ottenuto dal join in modo corretto.
    precisamente io modifico solo un campo della tabela GIOCATORI (non so se riesco a modificare anche i campi di SQUADRE

    ho fatto un altra prova e sono andato in completa confusione:

    codice:
    Sql = "select * from GIOCATORI,SQUADRE "
    Sql = Sql + " where GI_SQUADRA = SQ_COD "
    Sql = Sql + " and SQ_"
    questa query infatti non funziona anche se apparentemente restituisce gli stessi record non e' possibile fare l'update.

    allora ho fatto un altra prova e ho cambiato il driver per la connessione e magicamente anche quest'ultima query funziona.
    come stringa di connessione ho messo

    codice:
    Rs.ActiveConnection =  "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("mdb-database\data.mdb")
    invece di:

    codice:
    'Rs.ActiveConnection = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("mdb-database\data.mdb")
    In conclusione connettendosi con i driver JET funziona tutto
    (nota:
    -nella prima query con INNER JOIN bisogna esplicitare il nome delle tabelle nella riga ON TABELLA_A.campo = TABELLA_B.campob
    -bisogna aprire il recordset con rs.open sql,,3,3 perche' rs.open sql non funziona);

    mentre con i driver microsoft funziona solo l'INNER JOIN ( con la seconda query non funziona l'update)

    dopo questa marea di informazioni spero non incomprensibili, a questo punto la mia domanda e': perche???

    grazie ciao

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.