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

    1 RS +1INSERT all'interno di un ciclo for di un ARRAY

    Ragazzi cè il modo di far aprire il Recordset1 prima del ciclo1 in questo modo mi velocizzerebbe di molto penso visto ke ho tanti cicli(100.000)
    quindi chiedo se si puo' portare fuori dal ciclo anche la chiusura del Recordset1 ovviamente..
    posto il mio codice per chiarezza:
    codice:
    For i=2 to Ubound(articoli) ' CICLO 1
    
    Set Conn_Recordset1 = Server.CreateObject ("ADODB.Connection") 
    Conn_Recordset1.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & Server.MapPath(percorso_mdb)
    Set Recordset1 = Server.CreateObject("ADODB.Recordset") 
    SQL="SELECT categoria FROM tab_articoli WHERE codice_articolo= '"& articoli(i,1) &"' "
    Recordset1.Open SQL, Conn_Recordset1 
    
    
    IF  Recordset1.EOF or  Recordset1.BOF THEN ' controllo che l'articolo nn sia già inserito
    SQL = " INSERT INTO "&tabella_mdb&" (categoria) VALUES ('"& articoli(i,0) &"') "
    connection.execute(SQL)
    ELSE                                       ' controllo che l'articolo nn sia già inserito
    SQL = " INSERT INTO "&tabella_mdb&" (categoria) VALUES ('"& articoli(i,0) &"') "
    connection.execute(SQL)
    END IF                                     ' controllo che l'articolo nn sia già inserito
    
    
    Recordset1.Close 
    Set Recordset1 = Nothing 
    Conn_Recordset1.Close 
    Set Conn_Recordset1 = Nothing
    
    
    next                   ' CICLO 1
    
    connection.Close       ' chiuso la connessione
    Set connection = Nothing

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    codice:
    Set Conn_Recordset1 = Server.CreateObject ("ADODB.Connection") 
    Conn_Recordset1.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & Server.MapPath(percorso_mdb)
    Set Recordset1 = Server.CreateObject("ADODB.Recordset")

    e questo


    codice:
    Conn_Recordset1.Close 
    Set Conn_Recordset1 = Nothing
    prima e dopo il ciclo rispettivamente.

    Roby

  3. #3
    grz per la risposta ho provato ma mi da : "" Errore di run-time di Microsoft VBScript (0x800A01A8)
    Necessario oggetto: 'Recordset1' ""

    riposto il codice completo modiicato come mi hai detto tu, ho provato a trovare l'errore ma niente :master:

    codice:
    Conn="PROVIDER=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Server.MapPath(percorso_mdb) 
    Set connection = Server.CreateObject("ADODB.Connection")
    connection.Open(Conn)
    
    Set Conn_Recordset1 = Server.CreateObject ("ADODB.Connection") 
    Conn_Recordset1.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & Server.MapPath(percorso_mdb)
    Set Recordset1 = Server.CreateObject("ADODB.Recordset") 
    
    For i=2 to 100 ' CICLO 1
    
    
    SQL="SELECT categoria FROM tab_articoli WHERE codice_articolo= '"& articoli(i,1) &"' "
    Recordset1.Open SQL, Conn_Recordset1 
    
    
    IF  Recordset1.EOF or  Recordset1.BOF THEN ' controllo che l'articolo nn sia già inserito
    SQL = " INSERT INTO "&tabella_mdb&" (categoria) VALUES ('"& articoli(i,2) &"') "
    connection.execute(SQL2)
    ELSE                                       ' controllo che l'articolo nn sia già inserito
    SQL2 = " UPDATE "&tabella_mdb&" SET categoria='"& articoli(i,2) &"' "
    connection.execute(SQL2)
    END IF                                     ' controllo che 
    
    Recordset1.Close 
    Set Recordset1 = Nothing 
    
    
    
    next                   ' CICLO 1
    
    Conn_Recordset1.Close 
    Set Conn_Recordset1 = Nothing
    
    connection.Close
    Set connection = Nothing

  4. #4
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Non ci capisco più nulla... ma quante connessioni hai?

    Roby

  5. #5
    1 una connessione A la apro prima del ciclo
    2 ciclo
    3 apro un altra conn B per il Recordset1 che deve controllare la presenza o meno dell'articolo nel db
    4 la conn A esegue INSERT o UPDATE(dipende dal risultato del recordset1 IF-ELSE-END IF)
    5 chiudo la conn B del recordset1
    6 chiudo il ciclo
    7 chiudo la connessione A

    funziona ma un Prescott 3.2 ci mette 540 sec per calcolare circa 50.000 cicli...

    allora mi chiedevo se riesco a sveltirla non aprendo e chiudendo tutte le volte la conn B, cioè portando anche la conn B fuori dal ciclo.

    posto il codice originale che funziona (ma lento):

    codice:
    Conn="PROVIDER=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Server.MapPath(percorso_mdb) 
    Set connection = Server.CreateObject("ADODB.Connection")
    connection.Open(Conn)
    
    
    
    For i=2 to 100 ' CICLO 1
    
    
    Set Conn_Recordset1 = Server.CreateObject ("ADODB.Connection") 
    Conn_Recordset1.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & Server.MapPath(percorso_mdb)
    Set Recordset1 = Server.CreateObject("ADODB.Recordset") 
    SQL="SELECT categoria FROM tab_articoli WHERE codice_articolo= '"& articoli(i,1) &"' "
    Recordset1.Open SQL, Conn_Recordset1 
    
    
    IF  Recordset1.EOF or  Recordset1.BOF THEN ' controllo che l'articolo nn sia già inserito
    SQL = " INSERT INTO "&tabella_mdb&" (categoria) VALUES ('"& articoli(i,2) &"') "
    connection.execute(SQL2)
    ELSE                                       ' controllo che l'articolo nn sia già inserito
    SQL2 = " UPDATE "&tabella_mdb&" SET categoria='"& articoli(i,2) &"' "
    connection.execute(SQL2)
    END IF                                     ' controllo che 
    
    Recordset1.Close 
    Set Recordset1 = Nothing 
    Conn_Recordset1.Close 
    Set Conn_Recordset1 = Nothing
    
    
    next                   ' CICLO 1
    
    
    connection.Close
    Set connection = Nothing

  6. #6
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Ma le due connessioni sono sullo stesso db?
    Allora ne va solo una all'inizio e alla fine la chiudi.

    Roby

  7. #7
    si lo steso db!
    ho provato ad aprire solo una conn ma mi da sempre errore: ""ADODB.Recordset (0x800A0E7D)
    Connessione chiusa o non valida in questo contesto. Impossibile utilizzarla per eseguire l'operazione.""

    io ho scritto cosi:
    codice:
    Conn="PROVIDER=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Server.MapPath(percorso_mdb) 
    Set connection = Server.CreateObject("ADODB.Connection")
    connection.Open(Conn)
    Set Recordset1 = Server.CreateObject("ADODB.Recordset") 
    
    For i=2 to 100 ' CICLO 1
    
    
    SQL="SELECT categoria FROM tab_articoli WHERE codice_articolo= '"& articoli(i,1) &"' "
    Recordset1.Open SQL
    'Recordset1.Open SQL, Conn
    
    
    IF  Recordset1.EOF or  Recordset1.BOF THEN ' controllo che l'articolo nn sia già inserito
    SQL = " INSERT INTO "&tabella_mdb&" (categoria) VALUES ('"& articoli(i,2) &"') "
    connection.execute(SQL2)
    ELSE                                       ' controllo che l'articolo nn sia già inserito
    SQL2 = " UPDATE "&tabella_mdb&" SET categoria='"& articoli(i,2) &"' "
    connection.execute(SQL2)
    END IF                                     ' controllo che 
    
    
    
    
    next                   ' CICLO 1
    
    Recordset1.Close 
    Set Recordset1 = Nothing 
    
    connection.Close
    Set connection = Nothing

  8. #8
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Questo

    Recordset1.Close

    va prima del Next

    Roby

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.