Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376

    update di dati in access dal foglio excel

    Salve, innanzitutto grazie delle vostre risposte nei tempi passati, mi hanno aiutato moltissimo a superare molti ostacoli; il problema che ho adesso è il seguente: ho un file xls su una cartella su server remoto, nella stessa cartella risiede anche un db access con 2 tabelle. Io voglio importare i dati dal foglio excel in T_import_Clienti di access, che ogni volta distruggo e ricreo.
    il passo successivo è quello di andare ad importare nella tabella T_Anag_Clienti solo i record della tabella T_Import_Clienti che non ci sono.
    Il primo passo è tutto ok, cioè l'import da excel va tutto bene, ma quando arrivo a fare l'update della tabella non importa un bel niente; sto impazzendo da circa 3 giorni dietro a questo problema provando varie soluzioni e varie strategie ma niente di fatto.

    posto il codice di seguito:

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>


    <%
    Dim MM_conn_STRING
    MM_conn_STRING = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("mdb-database\SchedaCliente.mdb")


    Dim MM_conn_app_STRING
    MM_conn_app_STRING = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("mdb-database\SchedaCliente.mdb")


    dim oConn
    oConn = "Driver={Microsoft Excel Driver (*.xls)}; DBQ=" & Server.MapPath("mdb-database\ExportClienti.xls")


    ' CODICE PER CANCELLARE DATI DA TABELLA IMPORT CLIENTI
    sub CancellaDati()
    MM_1="ADODB.Recordset"
    set MM_rs1 = Server.CreateObject(MM_1)
    MM_rs1.ActiveConnection = MM_conn_STRING
    MM_rs1.Source = "DELETE * FROM T_Import_Clienti;"
    MM_rs1.CursorType = 0
    MM_rs1.CursorLocation = 2
    MM_rs1.LockType = 3
    MM_rs1.Open
    end sub
    ' FINE CODICE

    ' CODICE PER ELIMINARE TABELLA IMPORT CLIENTI
    sub EliminaTabella()
    Dim conn
    dim SQL
    Dim oRSet1
    dim adSchemaTables

    'creo l'oggetto Connection
    Set conn = Server.CreateObject("ADODB.Connection")
    'apro la connessione con la fonte di dati
    conn.open MM_conn_STRING
    'RICAVO LA LISTA DELLE TABELLE CONTENUTE NEL DB
    adSchemaTables = 20
    Set oRSet1 = conn.OpenSchema(adSchemaTables)
    do while not oRSet1.eof
    if oRSet1("TABLE_NAME") = "T_Import_Clienti" then
    ' eseguo l'eliminazione della tabella
    SQL="DROP TABLE T_Import_Clienti"
    conn.execute SQL
    end if
    oRSet1.MoveNext
    Loop
    end sub
    ' FINE CODICE


    ' IMPORTO DA EXCEL A TABELLA ACCESS
    Sub ImportaDatiExcel()
    ' Dichiaro il Recordset e la variabile per la Query
    Dim oRSet
    dim SQL3
    Dim connXls


    Set connXls = Server.CreateObject("ADODB.Connection")
    set rs = Server.CreateObject("ADODB.Recordset")
    connXls.Open = "driver={Microsoft Excel Driver (*.xls)};DBQ=" & Server.MapPath("mdb-database\ExportClienti.xls")
    rs.Open "SELECT * FROM [Q_Export_Anagrafica$]",connXls, 3, 2


    'Elimino la tabella di destinazione, se esiste
    call EliminaTabella()


    ' Creo la Tabella di destinazione, definendone i campi con nome, tipo e lunghezza
    Dim SQL1
    dim SQL2
    dim conn2

    Set conn2 = Server.CreateObject("ADODB.Connection")
    conn2.open MM_conn_STRING
    SQL1 = "CREATE TABLE T_Import_Clienti (Nome TEXT(20), Cognome TEXT(30), Comune TEXT(30), Telefono TEXT(15), Cellulare TEXT(15))"
    conn2.Execute SQL1

    'Scorro il Recordset compiendo una serie di INSERT sulla tabella di destinazione
    With rs
    'While Not .EOF and .Fields("Nome").value <> ""
    .movefirst
    do until .eof
    SQL2 = "INSERT INTO T_Import_Clienti " & _
    "(Nome, Cognome, Comune, Telefono, Cellulare) VALUES (" & _
    "'" & .Fields("Nome").Value & "', " & _
    "'" & .Fields("Cognome").Value & "', " & _
    "'" & .Fields("Comune").Value & "', " & _
    "'" & .Fields("Telefono").Value & "', " & _
    "'" & .Fields("Cellulare").Value & "')"
    ' esegue l'inserimento
    conn2.Execute SQL2
    rs.MoveNext
    loop
    'Wend
    End With


    ' Chiudo il Recordset e annullo l'oggetto
    rs.Close
    Set rs = Nothing

    ' SELECT SU TABELLA T_IMPORT PER ESTRARRE NOME E COGNOME
    Dim oRSet2
    dim SQL5
    Dim conn4

    Set conn4 = Server.CreateObject("ADODB.Connection")
    'apro la connessione con la fonte di dati
    conn4.open MM_conn_app_STRING


    SQL5 = "UPDATE T_Import_Clienti LEFT JOIN T_Anag_Clienti ON (T_Import_Clienti.Cognome = T_Anag_Clienti.Cognome) AND (T_Import_Clienti.Nome = T_Anag_Clienti.Nome) SET T_Anag_Clienti.Nome = [T_Import_Clienti].[Nome], T_Anag_Clienti.Cognome = [T_Import_Clienti].[Cognome], T_Anag_Clienti.Comune = [T_Import_Clienti].[Comune], T_Anag_Clienti.Telefono = [T_Import_Clienti].[Telefono], T_Anag_Clienti.Cellulare = [T_Import_Clienti].[Cellulare]"


    ' esegue l'inserimento
    conn4.Execute SQL5

    ' Chiudo la connessione
    connXls.CLOSE
    set connXls = nothing
    conn2.CLOSE
    set conn2 = nothing
    conn4.CLOSE
    set conn4 = nothing
    End Sub
    ' FINE CODICE


    ' *** Validate request to log in to this site.
    MM_LoginAction = Request.ServerVariables("URL")
    If Request.QueryString<>"" Then MM_LoginAction = MM_LoginAction + "?" + Request.QueryString
    MM_valNome=Request.Form("Nome")
    MM_valCognome=Request.Form("Cognome")


    If MM_valNome <> "" Then
    MM_fldUserAuthorization=""
    MM_redirectLoginSuccess="dati.asp"
    MM_redirectLoginFailed="Scelta.asp"

    MM_flag="ADODB.Recordset"
    set MM_rsUser = Server.CreateObject(MM_flag)
    MM_rsUser.ActiveConnection = MM_conn_STRING
    If MM_fldUserAuthorization <> "" Then MM_rsUser.Source = MM_rsUser.Source & "," & MM_fldUserAuthorization
    MM_rsUser.Source = "SELECT * FROM T_Anag_Clienti WHERE Nome='" & MM_valNome &"' AND Cognome='" & MM_valCognome & "'"

    MM_rsUser.CursorType = 0
    MM_rsUser.CursorLocation = 2
    MM_rsUser.LockType = 3
    MM_rsUser.Open
    If Not MM_rsUser.EOF Or Not MM_rsUser.BOF Then
    ' Nome e Cognome esistono allora visualizza

    Session("MM_Nome") = MM_valNome ' sessione per passare Nome
    session("MM_Cognome") = MM_valCognome ' sessione per passare Cognome

    If (MM_fldUserAuthorization <> "") Then
    Session("MM_UserAuthorization") = CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization ).Value)
    Else
    Session("MM_UserAuthorization") = ""
    End If
    if CStr(Request.QueryString("accessdenied")) <> "" And false Then
    MM_redirectLoginSuccess = Request.QueryString("accessdenied")
    End If
    MM_rsUser.Close
    Response.Redirect(MM_redirectLoginSuccess)
    End If
    MM_rsUser.Close
    Response.Redirect(MM_redirectLoginFailed)
    End If
    %>

    poi html.............


    grazie a tutti quelli che mi aiuteranno
    Chi Crede in Me non Perirà MAI

  2. #2
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    591
    Il passo che fai di Update sulla tabella T_Anag_Clienti io lo farei in questo modo:

    Scorri il record set che hai creato T_Import_Clienti
    per ogni record letto nel loop
    fai una query per vedere se esiste il record, e se non esiste
    lo inserisci...

    il codice te lo posto qui sotto

    intanto basta una sola connessione anche se hai più dataset di tipo recordset non serve creare conn2 conn3 conn4 etc...

    codice:
    Set conn  = Server.CreateObject("ADODB.Connection") 
    Set RS = Server.CreateObject("ADODB.Recordset")
    Set RS1 = Server.CreateObject("ADODB.Recordset")
    SQL="select * from T_Import_Clienti"
    RS.Open SQL, conn , 3, 3 
    if not RS.EOF then
     do until RS.EOF
       AggiornaClienti(RS)
       RS.movenext
     loop 
    end if
    RS.Close
    '.... fine aggiornamento
    Set conn = nothing
    Set RS = nothing
    Set RS1 = nothing
    
    'la subroutine la puoi mettere alla fine del file ASP
    
    sub AggiornaClienti(RS)
    'RS viene passato come recordset in linea
    SQL1="select *  from T_Anag_Clienti where Nome= '" & RS("Nome") &"' and cognome='" & RS("Cognome") &"'"
    ' attenzione agli apici...nella SQL1
    RS1.Open SQL1, conn , 3, 3
    if RS1.EOF then
      RS1.Addnew
      RS1("nome")=RS(nome")
      RS1("cognome")=RS("cognome")
      RS1("comune")=RS("comune")
      RS1("telefono")=RS("telefono")
      RS1("cellulare")=RS("cellulare")
      RS1.Update
    end if
    RS1.Close
    end sub
    Ciao
    Vic53

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.