Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Out of memory: Server.Createobject

    Come da oggetto in uno script molto pesante (è un gioco online è lo script che genera il combattimento) ottengo questo errore..

    Out of memory: Server.Createobject

    C'è un modo per sapere il limite consentito?
    Grazie!!!!

  2. #2
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    Se stai utilizzando mysql e il recordcount devi esplicitare il tipo di cursore:

    codice:
    rs.CursorLocation = 3 
    rs.CursorType = 1 
    rs.LockType = 3

  3. #3
    Grazie della risposta trodat ma non ho capito

    Cmq si uso asp+mysql, potresti essere un poi piu esplicito?

  4. #4
    dice di provare tipo:

    codice:
    set rs=server.createobject("adodb.recordset")
    sql=....
    
    rs.open sql,conn,3,3

  5. #5
    Ho provato a cambiare tutti record set che erano 1,3 a 3,3 ma il problema persiste.

    In locale (in italiano) mi da questo errore:
    Errore di run-time di Microsoft VBScript (0x800A0007)
    Memoria esaurita: 'Server.CreateObject'


    Altre volte invece ottengo invece qualcosa tipo:
    Out of stack space:

    Esiste un limite al testo che si può inserire in una variabile?

  6. #6
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Fai vedere il codice

  7. #7
    Come già detto nell'altro messaggio sono 10mila righe di codice in totale.....

    Devo postare tutto?

    Mi sa che mi devo arrangiare sto giro

  8. #8
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Solo la parte di creazione 5 righe prima e 10 righe dopo

  9. #9
    Ti copio questa sub che è corta:

    <% Sub attacco_terra_attaccante()
    Randomize()
    ' CON QUESTO ON ERROR FUNZIONA SEMPRE
    on error resume next
    If att_finisher > 0 Then
    If att_punti_vita < 21 Then
    For i = 1 to att_finisher
    If att_posi(i-1) = "A terra" Then
    If att_adrenalina >= att_adre(i-1) Then
    att_finisher_pronta = (i-1)
    Call finisher_attaccante
    End If
    End If
    Next
    End If
    End If

    If att_finisher_pronta <> "" Then
    If att_posi(att_finisher_pronta) = "A terra" Then
    If att_adrenalina >= att_adre(att_finisher_pronta) Then
    Call finisher_attaccante
    End If
    End If
    End If

    att_att_svolti = att_att_svolti+1
    attacco = Int(att_mosse_terra*rnd)
    id_te = att_mosse_aterra(attacco)


    Set Rs = Server.CreateObject("ADODB.Recordset")
    SQL ="Select mossa1, mossa2, mossa3, mossa4, mossa5, id_gruppi FROM gruppi WHERE id_gruppi = "&id_te&""&""
    Rs.open SQL,conn,3,3

    id_te = Rs("mossa"&Int((Rnd*5)+1))
    Rs.Close
    Set Rs = Nothing
    ' trovo la mossa eseguita

    Set Rs = Server.CreateObject("ADODB.Recordset")
    SQL ="Select mossa, esp_forza, esp_tec, esp_vel, esp_res,id_mossa, danno_min, danno_max, articolo, posizione, de_prima, de_dopo, de_mancato, posizione_subita, attacco FROM mosse WHERE id_mossa = "&id_te&""&""
    Rs.open SQL,conn,3,3
    ' memorizzo tutti i paratemetri
    esp_te = Rs("esp_tec")
    id_mossa = Rs("id_mossa")
    danno_min = Rs("danno_min")
    esp_ve = Rs("esp_vel")
    esp_re = Rs("esp_res")
    esp_fo = Rs("esp_forza")
    danno_max = Rs("danno_max")
    bonus_att = Rs("attacco")

    articolo = Rs("articolo")
    mossa_fatta = Rs("mossa")
    carica_posizione_ottenuta = Rs("posizione")
    carica_posizione_subita = Rs("posizione_subita")
    de_prima = Rs("de_prima")
    de_dopo = Rs("de_dopo")
    de_mancato = Rs("de_mancato")
    Rs.Close
    Set Rs = Nothing

    ' controllo che il colpo sia andato a segno
    If (((Rnd*50)+50)+att_velocita+attacco) > ((Rnd*100)+dif_tecnica) Then
    ' se il colpo va a segno...
    ' calcolo il livello della mossa
    Set Rs = Server.CreateObject("ADODB.Recordset")
    SQL ="Select * FROM livelli WHERE id_iscritto = "&id_attacco&" AND id_mossa = "&id_mossa&""
    Rs.open SQL,conn,3,3
    livello = Rs("livello")
    Rs.Close
    Set Rs = Nothing %>

    <%'altrimento se il colpo non è andato a segno
    Else %>

    <%

    End If

    End Sub %>
    E il pezzo che da spesso problema (se da questa parte il primo if che chiama finisher_attaccante), questa te la copio tutta:

    Sub finisher_attaccante

    Set Rs3 = Server.CreateObject("ADODB.Recordset")
    SQL ="Select * FROM finisher WHERE id_finisher = "&att_fini(att_finisher_pronta)&""
    Rs3.open SQL,conn,3,3

    descri_prima = Rs3("descri_prima")
    descri_prepa = Rs3("descri_prepa")
    descri_mancato = Rs3("descri_mancato")
    descri_dopo = Rs3("descri_dopo")
    articolo = Rs3("articolo")
    nome_finisher = Rs3("nome")
    danno_min_fin = Rs3("danno_min")
    danno_max_fin = Rs3("danno_max")
    bonus_fin = Rs3("bonus")
    tipo = Rs3("tipo")
    mancato = Rs3("mancato")
    Conn.Execute("UPDATE finisher SET svolte = svolte+1 WHERE id_finisher = "&Rs3("id_finisher")&"")
    att_adrenalina = att_adrenalina-Rs3("adrenalina")

    Rs3.Close
    Set Rs3 = Nothing


    If att_finisher > 1 Then
    att_finisher_prima = att_finisher_pronta
    Do Until att_finisher_prima <> att_finisher_pronta
    att_finisher_pronta = int(Rnd*att_finisher)
    Loop
    End If

    incontro = incontro&" <font color=""#FF0000"">"&att_nome&" "&descri_prepa&"
    "
    incontro = incontro&" "&att_nome&" "&descri_prima&"
    </font>
    "
    fini_tipo = tipo
    If fini_tipo = "Danno" Then
    If (((Rnd*50)+50)+att_velocita+(bonus_fin*((livello+1 0)/10))) > ((Rnd*100)+dif_tecnica) Then
    'calcolo danno
    danno_inflitto =((Rnd*(danno_max_fin-danno_min_fin))+danno_min_fin)*((livello+10)/10)
    danno_inflitto = Cint(Left(danno_inflitto+(danno_inflitto*att_forza/100),7))
    incontro = incontro&" <font color=""#FF0000"">"&descri_dopo&" eseguendo "&articolo&" "&nome_finisher&"</font>
    "
    dif_punti_vita = Cint(Left(dif_punti_vita-danno_inflitto,7))
    dif_att_svolti = 0
    att_att_svolti = 0

    If dif_punti_vita > 0 Then
    controllo = ((Rnd*(int(danno_inflitto)/10))+5) > (Rnd*100)
    Else
    controllo = (Rnd*(int(danno_inflitto-dif_punti_vita))+5) > (Rnd*100)
    End If
    If controllo = True Then
    If tipo_incontro = "First Blood" Then
    incontro = incontro&" <font color=""#FF0000"">"&UCASE(dif_nome)&" STA SANGUINANDO!!!</font>
    "&Ucase(att_nome)&" HA VINTO L'INCONTRO!!!
    "
    Set descri_prima = Nothing
    Set descri_prepa = Nothing
    Set descri_mancato = Nothing
    Set descri_dopo = Nothing
    Set articolo = Nothing
    Set nome_finisher = Nothing
    Set danno_min_fin = Nothing
    Set danno_max_fin = Nothing
    Set bonus_fin = Nothing
    Set tipo = Nothing
    Set mancato = Nothing

    assegna_premi("attaccante")
    End If
    dif_sangue = dif_sangue + 1
    If att_sangue > 1 Then
    incontro = incontro&" <font color=""#FF0000"">"&UCASE(dif_nome)&" IN SEGUITO AL COLPO SANGUINA ANCORA DI PIU!!!!!</font>
    "
    Else
    incontro = incontro&" <font color=""#FF0000"">"&UCASE(dif_nome)&" STA SANGUINANDO!!!</font>
    "
    End If
    End If

    Randomize()
    If tipo_incontro <> "First Blood" AND tipo_incontro <> "Sottomissione" Then

    Set descri_prima = Nothing
    Set descri_prepa = Nothing
    Set descri_mancato = Nothing
    Set descri_dopo = Nothing
    Set articolo = Nothing
    Set nome_finisher = Nothing
    Set danno_min_fin = Nothing
    Set danno_max_fin = Nothing
    Set bonus_fin = Nothing
    Set tipo = Nothing
    Set mancato = Nothing
    Call controlla_ko("difensore")
    End If
    Else
    incontro = incontro&" <font color=""#0000FF""> "&dif_nome&" "&descri_mancato&"</font>
    "
    att_stato = mancato
    att_att_svolti = 0
    dif_att_svolti = 0
    schivato = "ok"
    End If
    End If



    If fini_tipo = "Sottomissione" Then

    For i = 1 to 3
    danno_inflitto =((Rnd*(danno_max_fin-danno_min_fin))+danno_min_fin)*((livello+10)/10)
    danno_inflitto = Cint(Left(danno_inflitto+(danno_inflitto*att_forza/100),7))
    'TEST PER COLPIRE
    If ((RND*20)+30+att_tecnica+bonus_fin) > ((RND*50)+dif_tecnica+dif_resistenza) Then
    'COLPITO
    If presa_sot <> "ok" Then
    incontro = incontro&" <font color=""#FF0000"">"&descri_dopo&" eseguendo "&articolo&" "&nome_finisher&"</font>
    "
    presa_sot = "ok"
    End If

    dif_punti_vita = dif_punti_vita-danno_inflitto
    'TOLGO I PUNTI VITA
    If dif_punti_vita > 0 Then
    difesa = ((Rnd*50)+dif_resistenza+(dif_punti_vita*5))
    Else
    difesa = ((Rnd*50)+dif_resistenza+(dif_punti_vita))
    End If
    'CONTROLLA CEDIMENTO
    If (att_tecnica+bonus_fin+danno_inflitto+(Rnd*20)) > (difesa+dif_resistenza+dif_tecnica+(Rnd*20)) Then
    'CEDE
    incontro = incontro&" "&att_nome&" continua con la presa di sottomissione!
    "&dif_nome&" non riesce a resistere e cede!

    "
    If tipo_incontro = "Last Man Standing" OR tipo_incontro = "First Blood" Then
    incontro = incontro& "In questo match "&dif_nome&" non puo' essere sconfitto per sottomissione!!
    "&att_nome&" molla la presa!

    "

    Set descri_prima = Nothing
    Set descri_prepa = Nothing
    Set descri_mancato = Nothing
    Set descri_dopo = Nothing
    Set articolo = Nothing
    Set nome_finisher = Nothing
    Set danno_min_fin = Nothing
    Set danno_max_fin = Nothing
    Set bonus_fin = Nothing
    Set tipo = Nothing
    Set mancato = Nothing
    Call attacco_base_attaccante
    End If
    assegna_premi("attaccante")
    Else
    'RESISTE
    incontro = incontro&" "&att_nome&" continua con la presa di sottomissione!
    "&dif_nome&" resiste!

    "
    End If

    Else
    'MANCATO
    dif_stato = "In piedi"
    dif_stato = "In piedi"
    incontro = incontro&" "&att_nome&" continua con la presa di sottomissione!
    "&dif_nome&" riesce a liberarsi!!

    "
    presa_sot = ""
    dif_stato = mancato
    schivato = "ok"
    dif_att_svolti = 0
    att_att_svolti = 0
    i = 3
    schivato = "ok"
    End If
    Next
    incontro = incontro&" "&dif_nome&" si libera dalla presa
    "
    schivato = "ok"
    dif_att_svolti = 0
    att_att_svolti = 0
    presa_sot = ""
    End If


    If fini_tipo = "Pin" Then
    danno_inflitto =((Rnd*(danno_max_fin-danno_min_fin))+danno_min_fin)*((livello+10)/10)
    danno_inflitto = Cint(Left(danno_inflitto+(danno_inflitto*att_forza/100),7))


    If (((Rnd*50)+50)+att_velocita+(bonus_fin*((livello+1 0)/10))) > ((Rnd*100)+dif_tecnica) Then
    'COLPITO
    dif_punti_vita = dif_punti_vita-danno_inflitto
    incontro = incontro&" <font color=""#FF0000"">"&descri_dopo&" eseguendo "&articolo&" "&nome_finisher&"</font>
    "

    If dif_punti_vita > 0 Then
    difesa = ((Rnd*50)+dif_resistenza+(dif_punti_vita*5))
    Else
    difesa = ((Rnd*50)+dif_resistenza+(dif_punti_vita))
    End If

    If (att_tecnica+bonus_fin+danno_inflitto+(Rnd*20)) > (difesa+dif_resistenza+dif_tecnica+(Rnd*20)) Then
    If tipo_incontro <> "Last Man Standing" AND tipo_incontro <> "First Blood" AND tipo_incontro <> "Sottomissione" Then
    incontro = incontro&" L'arbitro esegue il conteggio...
    1...
    2...
    3!!!
    "&att_nome&" vince l'incontro!!!

    "
    Else
    incontro = incontro&" In questo tipo di match non si puo' vincere per shienamento!!!!

    "
    dif_att_svolti = 0
    att_att_svolti = 0
    Set descri_prima = Nothing
    Set descri_prepa = Nothing
    Set descri_mancato = Nothing
    Set descri_dopo = Nothing
    Set articolo = Nothing
    Set nome_finisher = Nothing
    Set danno_min_fin = Nothing
    Set danno_max_fin = Nothing
    Set bonus_fin = Nothing
    Set tipo = Nothing
    Set mancato = Nothing
    Call attacco_base_attaccante
    End If

    Set descri_prima = Nothing
    Set descri_prepa = Nothing
    Set descri_mancato = Nothing
    Set descri_dopo = Nothing
    Set articolo = Nothing
    Set nome_finisher = Nothing
    Set danno_min_fin = Nothing
    Set danno_max_fin = Nothing
    Set bonus_fin = Nothing
    Set tipo = Nothing
    Set mancato = Nothing
    assegna_premi("attaccante")
    Else
    If tipo_incontro <> "Last Man Standing" AND tipo_incontro <> "First Blood" AND tipo_incontro <> "Sottomissione" Then
    incontro = incontro&" L'arbitro esegue il conteggio...
    1...
    2...
    "&dif_nome&" riesce ad alzarsi!!!

    "
    Set descri_prima = Nothing
    Set descri_prepa = Nothing
    Set descri_mancato = Nothing
    Set descri_dopo = Nothing
    Set articolo = Nothing
    Set nome_finisher = Nothing
    Set danno_min_fin = Nothing
    Set danno_max_fin = Nothing
    Set bonus_fin = Nothing
    Set tipo = Nothing
    Set mancato = Nothing
    Call attacco_base_attaccante
    Else
    incontro = incontro&" In questo tipo di match non si puo' vincere per shienamento!!!!

    "
    Set descri_prima = Nothing
    Set descri_prepa = Nothing
    Set descri_mancato = Nothing
    Set descri_dopo = Nothing
    Set articolo = Nothing
    Set nome_finisher = Nothing
    Set danno_min_fin = Nothing
    Set danno_max_fin = Nothing
    Set bonus_fin = Nothing
    Set tipo = Nothing
    Set mancato = Nothing
    Call attacco_base_attaccante
    End If
    End If

    Else
    incontro = incontro&" <font color=""#0000FF""> "&dif_nome&" "&descri_mancato&"</font>
    "
    att_stato = mancato
    dif_att_svolti = 0
    att_att_svolti = 0
    schivato = "ok"
    End If

    End If

    Set descri_prima = Nothing
    Set descri_prepa = Nothing
    Set descri_mancato = Nothing
    Set descri_dopo = Nothing
    Set articolo = Nothing
    Set nome_finisher = Nothing
    Set danno_min_fin = Nothing
    Set danno_max_fin = Nothing
    Set bonus_fin = Nothing
    Set tipo = Nothing
    Set mancato = Nothing

    If schivato <> "ok" Then
    Select Case att_stato
    Case "In piedi"
    Call attacco_base_attaccante
    Case "Piegato"
    Call attacco_piegato_difensore
    Case "A terra"
    Call attacco_terra_difensore
    Case "In corsa"
    Call attacco_corsa_difensore
    Case "Intontito"
    Call attacco_intontito_difensore
    Case "Stordito"
    Call attacco_stordito_difensore
    Case Else
    Call attacco_base_attaccante
    End Select
    Else
    Select Case dif_stato
    Case "In piedi"
    Call attacco_base_attaccante
    Case "Piegato"
    Call attacco_piegato_attaccante
    Case "A terra"
    Call attacco_terra_attaccante
    Case "In corsa"
    Call attacco_corsa_attaccante
    Case "Intontito"
    Call attacco_intontito_attaccante
    Case "Stordito"
    Call attacco_stordito_attaccante
    Case Else
    Call attacco_base_attaccante
    End Select
    End If

    End Sub

  10. #10
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Ma perchè apri i recordset in 3,3 se de vi solo leggere i dati?
    Fai degli updati su Rs?

    Per fare questo
    codice:
    Set Rs = Server.CreateObject("ADODB.Recordset") 
    SQL ="Select * FROM livelli WHERE id_iscritto = "&id_attacco&" AND id_mossa = "&id_mossa&"" 
    Rs.open SQL,conn,3,3 
    livello = Rs("livello") 
    Rs.Close
    Puoi semplicemente fare così:
    codice:
    Set Rs = Conn.Execute(="Select * FROM livelli WHERE id_iscritto = "&id_attacco&" AND id_mossa = "&id_mossa)
    Livello = Rs("livello")
    Rs.Close()
    Cerca La funzione DLookUp che ho postato diverse volte. Il tuo codice diventerebbe :

    codice:
    Livello = DLookUp(Conn,"Select * FROM livelli WHERE id_iscritto = "&id_attacco&" AND id_mossa = "&id_mossa)
    Comunque non usare 3,3! occupa molta più memoria ed è molto più lenta l'apertura.
    Inoltre controlla di aver messo tutti gli rs a Nothing.

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.