Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Gordio
    Registrato dal
    Mar 2006
    Messaggi
    37

    Connessione DB in funzione o procedura?

    Ho un problema!!

    Devo concentrare (ottimizzare) più script ASP in un unica pagina.
    In questa pagina devo fare diverse interrogazioni a LIBRERIE diverse su un DB AS400 e vorrei mettere il tutto in Funzioni o Procedure per evitare di riscrivere sempre lo stesso codice.
    All'inizio riporto i valori di connessione dentro delle variabili SESSION, poi dovrei richiamare quando serve le varie funzioni!!!

    Questo è il codice standart per la connessione all'AS400

    Codice PHP:
        Session("AS400_Userid") = "UserId"
        
    Session("AS400_Password") = "Password"
        
    Session("Library") = "Libreria"
        
    Session("FileName") = "Archivio"
        
    Session("AS400_SystemName") = "Ip"
    ' varialibi

    Dim AS400Connessione
    Dim AS400Command
    Dim AS400File_rs
    Dim ConnectionString
    Dim CommandText
    Dim CommandType
    On Error Resume Next

    '
    ----- dichiarazione di connessione ---------
          
    ConnectionString "Provider=IBMDA400;Data Source=" Session("AS400_SystemName") & ";"
         
    [BCommandText "SELECT * FROM " Session("Library") & "." Session("FileName")[/B]
          
    CommandType adCmdText

    '------ apertura connessione --------------

    Set AS400Connection = Server.CreateObject("ADODB.Connection")
    AS400Connection.Open ConnectionString,Session("As400_Userid"),Session("AS400_Password")
    Set AS400Command = Server.CreateObject("ADODB.Command")
    AS400Command.ActiveConnection = AS400Connection

    da questo punto in poi è inserito una porzione di codice che ci permette di visualizzare l'intero archivio

    '
    Comandi da eseguire sul sistema AS/400

    AS400Command
    .CommandText CommandText
    AS400Command
    .CommandType CommandType

    'Esecuzione comandi

    Set AS400File_rs = AS400Command.Execute

    '
    Chiusura connessione
    AS400File_rs
    .Close
    Set AS400File_rs 
    Nothing
    AS400Connection
    .Close
    Set AS400Connessione 
    Nothing
    Set AS400Command 
    Nothing 
    L'unica parte di codice che cambierà, sara' quella relativa alla libreria e al file che dovrò interrogare.

    Codice PHP:
    CommandText "SELECT * FROM " Session("Library") & "." Session("FileName"
    tutto il resto rimane uguale.

    La mia idea è quella di creare una SUB per L'APERTURA CONNESSIONE, i valori non cambiano !!
    Un'altra SUB per la CHIUSURA CONNESSIONE
    Una FUNZIONE per la DICHIARAZIONE connessione, i valori cambiano a seconda della LIBRERIA e del FILE che devo utilizzare.
    Più FUNZIONI con i COMANDI da ESEGUIRE e l'ESECUZIONE comandi ,queste funzioni avranno in entrata dei valori che confrontati con il DB AS400 daranno dei risultati che verranno sparati su variabili e scritte su un DB ACCESS!!!

    Le domande che mi pongo e non ho certezza sono:

    1) Le variabili SESSION le devo passare nella SUB o Function o no?
    2) se le devo passare... come ?
    3) è giusta questa logica e suddivisione????

    ho fatto qualche prova ma sembra che mi perdo qualcosa e va in loop!!

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    La logica secondo me è giusta.
    Le variabili definite fuori dal sub o funzioni sono globali, non serve passarle.
    Esempio:

    codice:
    dim objConn
    sub dbConnect()
    strConn = "....."
    set objConn = ...
    objConn.Open(strConn)
    end sub
    Roby

  3. #3
    Utente di HTML.it L'avatar di Gordio
    Registrato dal
    Mar 2006
    Messaggi
    37
    Allora questo è quello che ho scritto... riassumo in parole povere..

    Si collega a un DB access, prende il "codice articolo" e nen ciclo "While" associo il valore del RS ad una variabile, apro la connessione AS, lancio la Funzione per ripescare la descrizione dell'articolo che poi andro a scrivere nel DB ACCESS.

    Solo che mi da ERRORE

    Tipo di errore:
    ADODB.Command (0x800A0E7D)
    The connection cannot be used to perform this operation. It is either closed or invalid in this context.
    /webas/ambprovadata/creasunto.asp, line 75


    questa è la riga 75
    Codice PHP:
    Set AS400File_rs AS400Command.Execute 

    sembra che non apra la connessione o qualcosa del genere... x me si perde nei passaggi ma non so proprio come!!!

    Riporto il codice...


    Codice PHP:

    <%
    Server.ScriptTimeout 120
        Session
    ("AS400_Userid") = "XXXX"
        
    Session("AS400_Password") = "XXXX"
        
    Session("Library") = "gip320test"
        
    Session("Library")=Server.URLEncode (Session("Library"))
        
    Session("FileName") = "anpro00f"
        
    Session("FileName")=Server.URLEncode (Session("FileName"))
        
    Session("AS400_SystemName") = "10.10.1.47"

    '------------ Varialibi MAIN-----------------
    Dim Acodice, Adesc, Atp ' 
    variabili per recordset
    Dim Conn                    
    ' Connessione ACCESS
    Dim Sql                         ' 
    var per Query
    Dim filepatch               
    ' Percorso DB ACCESS
    '
    ---------- Varialibi AS400 -------------------
    Dim AS400Connection
    Dim AS400Command
    Dim AS400File_rs
    Dim ConnectionString
    Dim CommandText
    Dim CommandType
    '----------------------------------------------------------

    '
    ============================ Procedura per creare il db distinct dei codici 
    filepatch
    Server.MapPath ("DBfabbi/appofabb.mdb")
    Sql="SELECT distinct codart, tp FROM replicafabb"
    set ConnServer.CreateObject("ADODB.Connection")
    Conn.open ("Provider = Microsoft.Jet.OLEDB.4.0;Data Source =" +filepatch)
    set Rs_ADB Server.CreateObject("ADODB.Recordset")
    set Rs_ADB Conn.Execute (Sql)
     
    '------------------------Inserisce i record nella tabella TB_fabb -------------
    While NOT Rs_ADB.EOF
          Acodice=Rs_ADB(0)
          Atp=Rs_ADB(1)
          Response.Write  Acodice & "</br>"
            Call ConnAS()
          Adesc=PrendiDesc(Acodice)
          Call ChiudiAS()
          
    '
    Adesc=replace(Adesc1 ,"'","''")
      
    Response.Write ("descrizione") & Adesc "</br>"
    '      Aforn=Codfornitore(Acodice)
    '      
    Sql1"INSERT INTO TB_fabb (codice,tp,desccod) VALUES ('"Acodice &"','" Atp "','"Adesc &"')"
    '      Conn.execute(Sql1)
          
    '      
    Ragionesoc(Acodice)
          
    Rs_ADB.movenext
    Wend

    Rs_ADB
    .Close 
    Set Rs_ADB
    =Nothing 
    Conn
    .Close 
    Set Conn 
    Nothing      

    '===============================================================================
    '
    ----va nell AS e a parità di codice si prende la descrizione-------------------

    Function 
    PrendiDesc(Acodicex)
    '-------------Comandi da eseguire sul sistema AS/400------
    ConnectionString = "Provider=IBMDA400;Data Source=" & SystemName & ";"
    CommandText = "SELECT A§DEAR FROM " & Session("Library") & "." & Session("FileName") & " WHERE (A§COAR = '"& Acodicex &"')"
    CommandType = adCmdText

    AS400Command.CommandText = CommandText
    AS400Command.CommandType = CommandType
    Set AS400File_rs = AS400Command.Execute

    If (Err.Number = 0 ) Then
    While NOT AS400File_rs.EOF
    Response.Write ("Codice desc DA AS----= ") & AS400File_rs(0) & "</br>"
    Response.Write ("Codice x nella funzione----= ") & Acodicex & "</br>"
    PrendiDesc=replace(AS400File_rs(0) ,"'","''") 
    AS400File_rs.movenext
    Wend
    AS400File_rs.Close
    Else
    DisplayError AS400Connection, Err.Number, Err.Description, Err.Source, "
    Main"
    End If
    End Function
    '============================================================================
    Sub ConnAS()  
    On Error Resume Next
    Set AS400Connection = Server.CreateObject("
    ADODB.Connection")
    AS400Connection.Open ConnectionString,("
    Userid"),("passw")
    Set AS400Command = Server.CreateObject("
    ADODB.Command")
    AS400Command.ActiveConnection = AS400Connection
    End Sub
    '============================================================================
    Sub ChiudiAS()
    AS400Connection.Close
    Set AS400Connection = Nothing
    Set AS400Command = Nothing
    End Sub
    '===============================================================================
    session.abandon
    %> 

  4. #4
    Utente di HTML.it L'avatar di Gordio
    Registrato dal
    Mar 2006
    Messaggi
    37
    ops!!

    queste due righe le ho riportate errate ... ma anche mettendo le variabili session giuste da sempre lo stesso errore!!!
    Codice PHP:
    ConnectionString "Provider=IBMDA400;Data Source=" SystemName ";"

    AS400Connection.Open ConnectionString,("Userid"),("passw"


  5. #5
    Utente di HTML.it L'avatar di Gordio
    Registrato dal
    Mar 2006
    Messaggi
    37
    Sembra che ho risolto... ho dovuto mettere questa riga:

    Codice PHP:
    ConnectionString "Provider=IBMDA400;Data Source=" Session("AS400_SystemName") & ";" 
    che era dentro alla funzione, come prima riga della SUB di "connessione"

    Codice PHP:
    ConnectionString "Provider=IBMDA400;Data Source=" Session("AS400_SystemName") & ";"
    Set AS400Connection Server.CreateObject("ADODB.Connection")
    AS400Connection.Open ConnectionString,Session("As400_Userid"),Session("AS400_Password")
    Set AS400Command Server.CreateObject("ADODB.Command")
    AS400Command.ActiveConnection AS400Connection 
    Richiamata la SUB di Connessione PRIMA del ciclo di WHILE e messa la SUB di chiusura fuori dallo stesso ciclo ... tutto il papocchi funziona!!!!


  6. #6
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Ovvio... anche nel mio misero esempio era così.

    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 © 2026 vBulletin Solutions, Inc. All rights reserved.