+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [ASP]Connessione a database MySQL

  1. #1
    newpc82 non è in linea Scolaretto
    Post
    142

    [ASP]Connessione a database MySQL

    Ciao a tutti;è la prima volta che scrivo in questa sezione.

    Premetto di essere un principiante in applicazioni web con asp.
    Il mio obiettivo,per iniziare,consiste nel collegare un database "d" creato con mysql ad una pagina dinamica asp.Per ora,mi basterebbe riuscire ad inserire dalla pagina in questione nuovi valori nel database.
    Dopo aver installato IIS ed il MySQL odbc 3.51 driver (ed aver testato che funzionano),ho scritto una pagina html per l'inserimento dei dati,ed una asp per la connessione al db e l'inserimento in quest'ultimo.

    Pagina html:

    codice:
    <html>
    <head>
    <title>Inserimento parametri</title>
    <form method="POST" action="Conn.asp">
      <label>IdStudente<input type="text" name="ids"></label><br>
      <label>Nome studente<input type="text" name="nomes"></label><br>
      <label>Cognome studente<input type="text" name="cognomes"></label><br>
      <input type="submit" value="Invia dati">
    </form>
    <head>
    </html>
    Pagina asp:

    codice:
    <html>
    <head>
    <title>Connessione al database d di mysql</title>
    <%
    'Evito la memorizzazione in cache/proxy della pagina [Non modificabile]
    response.Expires = -1500
    response.AddHeader "PRAGMA", "NO-CACHE"
    response.AddHeader "CACHE-CONTROL", "PRIVATE"
    response.CacheControl = "PRIVATE"
    
    ' Parti Modificabili
    dim dbCode 'Codice di accesso al mySql
    dbCode="cavolo"
    dim dbUser 'Nome di accesso al mySql
    dbuser="root"
    dim dbServer 'Nome del server
    dbServer="localhost"
    dim dbName 'Nome del database
    dbname="d"
    dim dbDriver 'Tipo di driver
    dbDriver="MySQL ODBC 3.51 Driver"
    
    'Parti NON Modificabili
    if trim(dbServer)<>"" then
    dbServer = "server="&dbServer&";"
    end if
    if trim(dbName)<>"" then
    dbName = "db="&dbName&";"
    end if
    if trim(dbDriver)<>"" then
    dbDriver = "driver="&dbDriver&";"
    end if
    if trim(dbUser)<>"" then
    dbUser = "uid="&dbUser&";"
    end if
    if trim(dbCode)<>"" then
    dbCode = "pwd="&dbCode&";"
    end if
    
    'Preparo la stringa di connessione
    dbConnessione = trim(dbServer) & trim(dbName)
    dbConnessione = dbConnessione & trim(dbDriver)
     bConnessione = dbConnessione & trim(dbUser)
    dbConnessione = dbConnessione & trim(dbCode)
    
    'I problemi sono in questa parte.Ho provato a toglierla e non generava nessun
    'errore.
    <% 
    dim idstud
    idstud=request.form("ids")
    
    dim nomestud
    idstud=request.form("nomes")
    
    dim cognomestud
    idstud=request.form("cognomes")
    
    set conn= server.createobject("ADODb.Connection")
    strConn=dbconnessione
    conn.open strConn
    
    sql="select * from studente"
    set rs=server.createobject("ADODB.recordset")
    rs.open sql,conn,3,3
    
    'Preparazione e scrittura nuovo record
    rs.addnew
    rs(1)=idstud
    rs(2)=nomestud
    rs(3)=cognomestud
    rs.update
    
    'Chiusura del database
    rs.close
    set rs=nothing
    conn.close
    set conn=nothing
     %>
    </head>
    </html>
    La prima pagina (html) è ok,ma quando seleziono il pulsante "Invia dati" si crea l'errore ed appare:
    "Impossibile visualizzare la pagina"
    .
    .
    .
    Tipo di errore:
    Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
    [MySQL][ODBC 3.51 Driver]Access denied for user 'ODBC'@'localhost' (using password: YES)
    /conn2/Conn.asp, line 57 (nella riga 57 c'è: conn.open strConn)

    Posso comunque assicurare che la password è corretta (è quella che uso per entrare in mysql).

  2. #2
    newpc82 non è in linea Scolaretto
    Post
    142
    Mi sono accorto che c'era un errore di sintassi;invece di
    dbconnection,risultava bconnection.Inoltre c'era un <% di
    troppo.L'errore che però genera ora è:

    Tipo di errore:
    ADODB.Recordset (0x800A0CC1)
    Impossibile trovare l'oggetto nell'insieme corrispondente al nome o al
    numero richiesto.
    /conn2/Conn.asp, line 67 (la riga 67 comprende rs(3)=cognomestud)

    Comunque mi sono accorto che il codice è incolonnato malissimo.Lo
    riposto per bene:

    Pagina html:

    Codice:

    codice:
    <html> <head> <title>Inserimento parametri</title>
    <form method="POST" action="Conn.asp">
    <label>IdStudente<input type="text" name="ids"></label><br>
    <label>Nome studente<input type="text" name="nomes"></label><br>
    <label>Cognome studente<input type="text" name="cognomes"></
    label><br>
    <input type="submit" value="Invia dati"> </form>
    <head>
    </html>
    Pagina asp:

    Codice:

    codice:
    <html> <head> <title>Connessione al database d di mysql</title>
    <%
    'Evito la memorizzazione in cache/proxy della pagina [Non
    modificabile]
    response.Expires = -1500
    response.AddHeader "PRAGMA","NO-CACHE"
    response.AddHeader "CACHE-CONTROL", "PRIVATE"
    response.CacheControl = "PRIVATE"
    ' Parti Modificabili dim dbCode
    'Codice di accesso al mySql
    dbCode="cavolo"
    dim dbUser 'Nome di accesso al mySql
    dbuser="root" dim dbServer 'Nome del server
    dbServer="localhost"
    dim dbName 'Nome del database
    dbname="d"
    dim dbDriver 'Tipo di driver
    dbDriver="MySQL ODBC 3.51 Driver"
    
    'Parti NON Modificabili
    if trim(dbServer)<>"" then dbServer ="server="&dbServer&";" end if
    if trim(dbName)<>"" then dbName ="db="&dbName&";" end if
    if trim(dbDriver)<>"" then dbDriver ="driver="&dbDriver&";" end if
    if trim(dbUser)<>"" then dbUser ="uid="&dbUser&";" end if
    if trim(dbCode)<>"" then dbCode ="pwd="&dbCode&";" end if
    
    'Preparo la stringa di connessione
    dbConnessione = trim(dbServer) & trim(dbName)
    dbConnessione =dbConnessione & trim(dbDriver)
    dbConnessione = dbConnessione & trim(dbUser)
    dbConnessione = dbConnessione & trim(dbCode)
    
    dim idstud idstud=request.form("ids")
    dim nomestud
    idstud=request.form("nomes")
    dim cognomestud
    idstud=request.form("cognomes")
    set conn=server.createobject("ADODb.Connection")
    strConn=dbconnessione
    conn.open strConn
    
    sql="select * from studente" set
    rs=server.createobject("ADODB.recordset")
    rs.open sql,conn,3,3
    'Preparazione e scrittura nuovo record rs.addnew
    rs(1)=idstud
    rs(2)=nomestud
    rs(3)=cognomestud
    rs.update 'Chiusura del database
    rs.close
    set rs=nothing
    conn.close
    set conn=nothing
    %>
    </head>
    </html>

  3. #3
    Post
    4,741
    Blogs
    12
    Ciao newpc82,
    non so se potrebbe esserti utile, ma tempo fa ho scritto un articolo riguardo ASP e MySQL: http://forum.masterdrive.it/asp-3-0-...no-mysql-9762/, con un esempio pratico sui vari utilizzi.

    A presto,
    Giuseppe Leone
    Ultima modifica di Master85; 20-06-2007 21:50 

  4. #4
    newpc82 non è in linea Scolaretto
    Post
    142
    Finalmente sono riuscito ad effettuare gli inserimenti.
    Non effettua il passaggio dei parametri tra una form e l'altra però(quasi sicuramente sbaglio io la sintassi).
    Con il seguente listato,nella pagina asp non appare alcun valore:

    Codice html:

    codice:
    <html>
    <head>
    <title>Inserimento parametri</title>
    <form method="get" action="Conn.asp">
      <label>IdStudente<input type="text" name="ids"></label><br>
      <input type="submit" value="Invia dati">
    </form>
    <head>
    </html>
    Codice conn.asp:

    codice:
    <%
    dim idstud
    idstud=request.form("ids")
    response.write idstud
    %>
    Stessa cosa quando effettuo l'inserimento.Quale è la sintassi per inserire all'interno di un insert into una variabile ( & variabile? & variabile & ? Ne ho provate diverse ma non funziona)

    strsql="INSERT INTO studente(id,nome,cognome) Values(idstud,nomestud,cognomestud);"


    Grazie per ora

  5. #5
    Post
    4,741
    Blogs
    12
    Se il metodo di invio dati della form e' "get" ( come nel tuo caso ) devi utilizzare il metodo querystring dell'oggetto request:

    codice:
    ...
    request.querystring(myVar)
    ...
    Ma e' sconsigliato inviare i dati della form tramite get.
    Ti consiglio di specificare post e recuperare con:

    codice:
    ...
    request.form(myVar)
    ...
    A presto,
    Giuseppe Leone

  6. #6
    newpc82 non è in linea Scolaretto
    Post
    142
    Questa non la sapevo... Grazie

    L'inserimento in tabella però non va ancora:

    codice:
    strsql="INSERT INTO studente(id,nome,cognome) Values(& request.form("ids"),& request.form("nomes"),& request.form("cognomes"));"
    Se al posto di & request.form() metto una stringa (esempio 'Pippo') allora funziona.

    L'errore che mi dice è il seguente:

    Tipo di errore:
    Errore di compilazione di Microsoft VBScript (0x800A0401)
    Prevista fine istruzione
    /conn2/Conn.asp, line 59, column 69
    strsql="INSERT INTO studente(id,nome,cognome) Values(& request.form("ids"),& request.form("nomes"),& request.form("cognomes"));"

    Fa lo stesso anche se levo gli &

  7. #7
    Post
    4,741
    Blogs
    12
    Si, credo che il problema dipende dalla omissione degli apici ed inoltre dalla errata concatenazione dei dati, questa dovrebbe essere la sintassi corretta:

    codice:
    strsql="INSERT INTO studente(id,nome,cognome) Values('" & request.form("ids") & "', '" & request.form("nomes") & "', '" & request.form("cognomes") & "');"
    Tutto qui.

    Ma consultare l'articolo proposto in precedenza, no ?

    A presto,
    Giuseppe Leone

  8. #8
    newpc82 non è in linea Scolaretto
    Post
    142
    Hai ragione...Sono troppo fogato....Nella furia non avevo visto il punto che mi interessava.Ora l'ho riguardato per bene;volevo però chiederti un'altra cosa:
    l'inserimento nel database senza recordset è ok.Cioè:

    codice:
    .
    .
    .
    strsql="INSERT INTO .....;"
    set conn= server.createobject("ADODb.Connection")
    conn.open(dbconnessione)
    conn.execute strsql
    Ora sto cercando di creare un programma che gestisca gli utenti (login,registrazione,invio email).L'ho quasi finito ma non torna la cosa forse più semplice.In fase di registrazione,controllo che non sia presente nel db un username uguale a quello inserito e,in caso positivo,provvedo ad inserire i dati nella base di dati.La parte che non torna è proprio questa.
    Il database ha 5 colonne:username,password,nome,cognome,email
    Il listato che ci interessa è il seguente:

    codice:
    dim conn,sql
    set conn=server.createobject("adodb.connection")
    conn.open (dbconnessione)
    sql="SELECT * from utente where username=' " & username & " ' "
    set rs=server.createobject("adodb.recordset")
    rs.open sql,conn,3,3
    if rs.eof then
      rs.AddNew
      rs("username")=username
      rs("password")=password
      rs("nome")=nome
      rs("cognome")=cognome
      rs("email")=email
      rs.update
      rs.Close
      Set rs=Nothing
      response.redirect("reg_ok.htm")
      conn.Close
      Set conn=Nothing 
    else
      response.redirect("reg.html")
    end if
    Riferendosi a rs("username")=username L'errore che provoca è:

    Tipo di errore:
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
    Si sono verificati errori in un'operazione OLE DB composta da più passaggi. Controllare i singoli valori di stato OLE DB, se disponibili. Nessuna operazione eseguita.

    Ho visto su internet in varie guide che la sintassi è questa (alcuni però usano rs(1)= .. rs(2)=... Ho provato così ma da errore lo stesso).Secondo voi da cosa può dipendere?Grazie

    Un piccolo chiarimento:abbiamo visto che l'inserimento dei dati nel database può essere fatto anche senza adoperare il recordset.Il suo uso è quindi richiesto solo per controllare la presenza di determinate informazioni (come in questo caso) oppure per poter contare il numero di tuple di una query?

  9. #9
    newpc82 non è in linea Scolaretto
    Post
    142
    Che stupido...EOF non ci dice se il risultato della select è vuoto.
    Ho modificato il programma usando rs.recordcount
    Non so se l'inserimento con il recordset funziona o no (non ci spero nemmeno) però con questo il programma conterebbe -1 righe.
    Ho cercato su Internet ed ho visto che è un problema comune con mysql-asp.Al posto di sr.recordcount viene consigliato di adoperare una select con la funzione di aggregazione count(*).
    Ma come devo utilizzarla secondo voi?
    Il codice modificato è il seguente:

    codice:
    set conn =server.createobject(ADODB.connection)
    conn.open (dbconnessione)  'dbconnessione è la stringa di connessione
    sql="SELECT * from utenti where ..."
    set sr=server.createobject("ADODB.recordset")
    sr.open sql,conn,3,3   'A proposito:cosa sono questi due numeri?
    if sr.recordcount=0 then
      [Inserimento valori in db]
    else
      .
      .
      .
    end if
    Come integro la select?Dovrei usare un altro recordset? (mi sembra scomodo)

  10. #10
    Post
    4,741
    Blogs
    12
    Scusa newpc82,
    ma ADO e' strettamente necessario ? Ti ho consigliato piu' volte di consultare l'articolo proposto tempo fa, "Quando le ASP incontrano MySQL" e ancora continui con queste proposte. Di guide su internet, riguardo ADO ce ne sono tantissime. Effettua qualche ricerca. Questa discussione e' partita come "connessione" ma a me pare stia degenerando in "Come fare a ...". Posso garantirti che in questa Community non seguiamo nessun utente *passo-passo*. Documentati e acquista manuali tecnici sull'argomento e in caso di dubbi torna a trovarci

    A presto,
    Giuseppe Leone

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi