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

    Studiando il recordset.

    Andando avanti nel mio "studio" del recordset ho avuto questo problema.
    nella riga Set rs =... (contrassegnata dalle x) se metto tabella4, il codice gira ma non restituisce assolutamente nulla. Se tolgo tabella 4 invece il codice restituisce il risultato giusto.

    Preciso che:

    a) la tabella 4, ha due colonne, contrassegnate da nomi non utilizzati altrove e completamente VUOTI, e non utilizzati in nessuna parte del programma

    b) unione è un campo della tabella3

    ---codice

    Dim cn, rs, sql

    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Provider="Microsoft.Jet.OLEDB.4.0"
    cn.open "Data Source=D:\Inetpub\webs\laugherit\mdb-database\database3.mdb;"
    Set rs = Server.CreateObject("ADODB.Recordset")

    rs.Open "select * from tabella1, tabella2, tabella3, tabella4", cn

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Set rs = cn.execute("select * from tabella1, tabella3, tabella4")

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    dim carte3
    carte3 = carte1&carte2

    dim len_trovato, elem_trovato
    len_trovato = 0
    elem_trovato = 0

    'acquisisco cercato
    dim cercato, lungo
    cercato = lcase(carte3) ' metti la tua
    lungo = Len(cercato)


    Do Until rs.eof
    dim unione, contatore
    unione = Trim(LCase(rs("unione"))) ' personalizza

    contatore = 0
    If Len(unione) = lungo Then ' gli altri li scarto
    dim i, c, l
    For i = 1 To lungo
    c = Mid(cercato, i, 1)
    l = InStr(unione, c)
    if l>0 then
    contatore = contatore + 1
    'response.write(unione)
    unione = Left(unione, l - 1)&Mid(unione, l + 1)
    end if
    next

    If contatore > len_trovato Then
    len_trovato = contatore
    elem_trovato = rs("unione") ' personalizza
    response.write(elem_trovato)
    End If

    End If
    rs.movenext
    Loop

    rs.close
    set rs = nothing


    cn.close
    set cn = nothing

    ---fine codice---

    Perchè l'inserimento della tabella4 nel recordset fa saltare il programma? (nel senso che non restituisce alcun risultato)

  2. #2
    Con tabella2 invece, che contiene dati che non uso nelle elaborazioni in due colonne (a denominazione non presente in altre cartelle) e poche centinaia di righe, il risultato esce, ma dice che si è esaurito il tempo.

    Vorrei capire il concetto che lega queste situazioni.

  3. #3
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Io vorrei capire come leghi quelle tabelle...
    Non hanno campi in comune? Non esegui JOIN né UNION?

    Roby

  4. #4
    Questo è l'intero codice: i campi della tabella 4 si chiamano carte7 e carte8 e, come vedi, non compaiono proprio. Quelli della tabella2 si chiamano carte3 e carte4 (che nel programma si vedono ma unicamente come variabili che non prendono il loro valore dalla tabella2 quindi sono una cosa del tutto distinta).
    Unione è un campo della tabella3 e basta.


    <%@ Language = VBScript %>
    <% Option Explicit %>

    <%
    'Prendo i dati dal form

    Dim carte1, carte2
    carte1= replace(request.form("carte1"), "'", "''")
    carte2= replace(request.form("carte2"), "'", "''")

    'Misuro la lunghezza delle due variabili

    Dim Lungcarte1, Lungcarte2
    Lungcarte1=Len(carte1)
    Lungcarte2=Len(carte2)
    'Response.write(Lungcarte1)
    'Response.write(Lungcarte2)

    Dim cn, rs, sql

    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Provider="Microsoft.Jet.OLEDB.4.0"
    cn.open "Data Source=D:\Inetpub\webs\laugherit\mdb-database\database3.mdb;"
    Set rs = Server.CreateObject("ADODB.Recordset")

    rs.Open "select * from tabella1, tabella2, tabella3, tabella4", cn, 3, 3

    Set rs = cn.execute("select * from tabella1, tabella3, tabella2")

    dim carte3
    carte3 = carte1&carte2

    dim len_trovato, elem_trovato
    len_trovato = 0
    elem_trovato = 0

    'acquisisco cercato
    dim cercato, lungo
    cercato = lcase(carte3) ' metti la tua
    lungo = Len(cercato)

    ' leggo il recordset -> rs
    'Set rs = cn.execute("select unione from tabella3") ' metti la tua query
    Do Until rs.eof
    dim unione, contatore
    unione = Trim(LCase(rs("unione"))) ' personalizza

    contatore = 0
    If Len(unione) = lungo Then ' gli altri li scarto
    dim i, c, l
    For i = 1 To lungo
    c = Mid(cercato, i, 1)
    l = InStr(unione, c)
    if l>0 then
    contatore = contatore + 1
    'response.write(unione)
    unione = Left(unione, l - 1)&Mid(unione, l + 1)
    end if
    next

    If contatore > len_trovato Then
    len_trovato = contatore
    elem_trovato = rs("unione") ' personalizza
    response.write(elem_trovato)
    End If

    End If
    rs.movenext
    Loop

    rs.close
    set rs = nothing


    cn.close
    set cn = nothing

    %>


    </body>
    </html>

    Ho provato a togliere la tabella1 ed a mettere la tabella2. Ed il risultato esce lo stesso senza andare in overflow. Quindi qui è una questione di spazio.

    Invece l'inserimento di tabella4 continua a non far uscire il risultato. Una tabella VUOTA, CON COLONNE MAI USATE...non permette al risultato di uscire.

    P.s.: vado a prendere un caffè se no esplodo.

  5. #5
    Ho verificato. La tabella vuota fa completamente saltare il recordset, nel senso il campo vuoto impedisce qualunque tipo di elaborazione. Quindi...se scrivo:

    Set rs = cn.execute("select * from tabella1, tabella3, tabella2")

    i dati non escono.

    Inoltre l'aggiunta indiscriminata di tabelle al recordset appesantisce in modo indecoroso i tempi di elaborazione. Quindi, in caso di necessità conviene senz'altro pulire il recordset e farne un altro.

  6. #6
    laura, le query debbono avere un senso, e a me una "select * from tabella1, tabella3, tabella3" sembra che non ne abbia. spiega bene cosa ti serve estrarre, e posta anche la struttura delle tabelle

  7. #7
    Nella mia niubbaggine, dovendo operare su + tabelle, pensavo di fare un recordset solo nel quale mettere tutte le tabelle. Quindi una volta fatto il programma, e considerato che girava ho provato, a parte ovviamente, a modificarne la struttura mettendo tutte le tabelle nel recordset e prendendo di volta in volta i campi che servivano.

    Ma analizzando la cosa e con molteplici tentativi MI SEMBRA di aver visto che:

    a) il tempo aumenta in modo esponenziale al numero delle tabelle (non so se valga anche per il numero dei campi - forse qualcuno lo sa -, ma per le tabelle di sicuro); l'operazione di pulitura del recordset, consente di risparmiare tempo in modo esponenziale.

    b) le tabelle inserite nel recordset devono avere un senso. Ci possono stare tabelle con colonne vuote ma non tabelle completamente vuote che impediscono al recordset di formarsi e quindi di operarci sopra.

    Va beh, tutta esperienza.

  8. #8
    Originariamente inviato da laugher
    a) il tempo aumenta in modo esponenziale al numero delle tabelle (non so se valga anche per il numero dei campi - forse qualcuno lo sa -, ma per le tabelle di sicuro); l'operazione di pulitura del recordset, consente di risparmiare tempo in modo esponenziale.
    questo perché la tua query è malformata. se fai una query mirata arrivi al risultato voluto coi tempi giusti.

    Originariamente inviato da laugher
    b) le tabelle inserite nel recordset devono avere un senso. Ci possono stare tabelle con colonne vuote ma non tabelle completamente vuote che impediscono al recordset di formarsi e quindi di operarci sopra.
    come sopra. puoi tranquillamente avere tabelle vuote: se la query è fatta bene non danno fastidio.

    studia un po' di SQL e capirai

  9. #9
    Originariamente inviato da optime
    come sopra. puoi tranquillamente avere tabelle vuote: se la query è fatta bene non danno fastidio.

    studia un po' di SQL e capirai
    La prima parte mi torna anche se...io uso un solo campo di tutto il recordset nel codice che segue; e basta questo per aumentare i tempi di elaborazione in modo esponenziale. Mi pare un limite non piccolo.

    La parte seguente mi è un po' meno chiara.

    Nel senso...la tabella è vuota, non entra in select, update, delete, nulla di nulla, non ci faccio NESSUNA operazione di NESSUN tipo e non la uso per NESSUNA query. Eppure...se la metto nel recordset, il programma gira ma il risultato NON ESCE. Cosa c'entra se la query è fatta bene o male?

    Ossia...scrivo:

    rs.open...quello che ti pare

    set rs = cn.execute(select - qui fai la select che ti pare - from tabella1, tabella2, tabella3, tabella4")

    se una delle 4 tabelle è COMPLETAMENTE VUOTA non esce nulla.

    Ho fatto prove molteplici ed è sempre stato confermato. Se invece riempio almeno una colonna della tabella vuota, il risultato esce senza problemi.

  10. #10
    Originariamente inviato da laugher
    La prima parte mi torna anche se...io uso un solo campo di tutto il recordset nel codice che segue; e basta questo per aumentare i tempi di elaborazione in modo esponenziale. Mi pare un limite non piccolo.

    La parte seguente mi è un po' meno chiara.

    Nel senso...la tabella è vuota, non entra in select, update, delete, nulla di nulla, non ci faccio NESSUNA operazione di NESSUN tipo e non la uso per NESSUNA query. Eppure...se la metto nel recordset, il programma gira ma il risultato NON ESCE. Cosa c'entra se la query è fatta bene o male?

    Ossia...scrivo:

    rs.open...quello che ti pare

    set rs = cn.execute(select - qui fai la select che ti pare - from tabella1, tabella2, tabella3, tabella4")

    se una delle 4 tabelle è COMPLETAMENTE VUOTA non esce nulla.

    Ho fatto prove molteplici ed è sempre stato confermato. Se invece riempio almeno una colonna della tabella vuota, il risultato esce senza problemi.
    scusa, ma se tu usi solo un campo di una tabella, PERCHE' metti tutti i campi di tutte le tabelle? se io ti chiedo: portami UNA MELA tu mi porti tutto il negozio di frutta?

    comunque ti confermo che hai bisogno di studiare, dici molte inesattezze e nel codice ci sono molte sciocchezze

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.