HTML.it è il sito italiano del web publishing

Studiando il recordset.



scegli un altro forum
  Pagine (2): [ 1   2   > ]  Indietro   Ricarica   Avanti Invia una risposta

Autore
Discussione     
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ:

MSN: resinov@email. it

Skype: resinov@email.it


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

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

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

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

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)

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 12:11
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ :

MSN : resinov@email. it

Skype : resinov@email.it


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.

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 13:42
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
Roby_72
Moderatore di ASP e MS Server



Registrato il: Aug 2001

Provenienza: Roma

Messaggi: 19477


ICQ :

MSN :

Skype :


Io vorrei capire come leghi quelle tabelle...
Non hanno campi in comune? Non esegui JOIN né UNION?

Roby


__________________

www.creamweb.it [v. 3.0]
:: Script ASP!
:: Web directory gratuita!
:: Campioni del mondo!

Segnala ad un moderatore | IP: Collegato | Permalink

Roby_72 è offline Old Post 01-06-2012 13:50
Clicca qui per vedere il profilo dell'utente Roby_72 Clicca qui per inviare all'utente Roby_72 un messaggio privato Visita l'homepage dell'utente Roby_72 Visualizza ulteriori messaggi scritti dall'utente Roby_72 Aggiungi l'utente Roby_72 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ :

MSN : resinov@email. it

Skype : resinov@email.it


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.

Ultima modifica ad opera dell'utente laugher il 01-06-2012 alle 14:03

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 13:58
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ :

MSN : resinov@email. it

Skype : resinov@email.it


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.

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 15:51
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
optime
Utente di HTML.it



Registrato il: Sep 2002

Provenienza:

Messaggi: 22769


ICQ :

MSN :

Skype :


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


__________________
La mia risposta ti ha aiutato? Clicca qui e ringraziami con un "Mi Piace", non ti costa niente ;-)
Software Gestione Studi Legali|Blog

Segnala ad un moderatore | IP: Collegato | Permalink

optime è offline Old Post 01-06-2012 15:57
Clicca qui per vedere il profilo dell'utente optime Clicca qui per inviare all'utente optime un messaggio privato Visita l'homepage dell'utente optime Visualizza ulteriori messaggi scritti dall'utente optime Aggiungi l'utente optime alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ :

MSN : resinov@email. it

Skype : resinov@email.it


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.

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 16:19
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
optime
Utente di HTML.it



Registrato il: Sep 2002

Provenienza:

Messaggi: 22769


ICQ :

MSN :

Skype :


Citazione:
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.

Citazione:
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


__________________
La mia risposta ti ha aiutato? Clicca qui e ringraziami con un "Mi Piace", non ti costa niente ;-)
Software Gestione Studi Legali|Blog

Segnala ad un moderatore | IP: Collegato | Permalink

optime è offline Old Post 01-06-2012 16:24
Clicca qui per vedere il profilo dell'utente optime Clicca qui per inviare all'utente optime un messaggio privato Visita l'homepage dell'utente optime Visualizza ulteriori messaggi scritti dall'utente optime Aggiungi l'utente optime alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ :

MSN : resinov@email. it

Skype : resinov@email.it


Citazione:
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.

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 16:47
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
optime
Utente di HTML.it



Registrato il: Sep 2002

Provenienza:

Messaggi: 22769


ICQ :

MSN :

Skype :


Citazione:
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


__________________
La mia risposta ti ha aiutato? Clicca qui e ringraziami con un "Mi Piace", non ti costa niente ;-)
Software Gestione Studi Legali|Blog

Segnala ad un moderatore | IP: Collegato | Permalink

optime è offline Old Post 01-06-2012 17:03
Clicca qui per vedere il profilo dell'utente optime Clicca qui per inviare all'utente optime un messaggio privato Visita l'homepage dell'utente optime Visualizza ulteriori messaggi scritti dall'utente optime Aggiungi l'utente optime alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ :

MSN : resinov@email. it

Skype : resinov@email.it


Non dubito che ci siano molte sciocchezze nel codice.

L'ha fatto Br1 (che non finirò mai di ringraziare), io ho solo messo i campi che mi servivano e gira al 90% come serve a me.

Io ho iniziato da 3 mesi...lo sto studiando meglio appunto per capirci qualcosa in +.

Ultima modifica ad opera dell'utente laugher il 01-06-2012 alle 17:28

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 17:23
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
optime
Utente di HTML.it



Registrato il: Sep 2002

Provenienza:

Messaggi: 22769


ICQ :

MSN :

Skype :


quindi? dove sta il problema?


__________________
La mia risposta ti ha aiutato? Clicca qui e ringraziami con un "Mi Piace", non ti costa niente ;-)
Software Gestione Studi Legali|Blog

Segnala ad un moderatore | IP: Collegato | Permalink

optime è offline Old Post 01-06-2012 17:24
Clicca qui per vedere il profilo dell'utente optime Clicca qui per inviare all'utente optime un messaggio privato Visita l'homepage dell'utente optime Visualizza ulteriori messaggi scritti dall'utente optime Aggiungi l'utente optime alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ :

MSN : resinov@email. it

Skype : resinov@email.it


Come hai detto tu, ho bisogno di studiare, e sto studiando. Tutto qui.

Nel particolare non riesco a capire perchè l'inserimento di una tabella vuota nel recordset, mai richiamata, su cui non opero e che non si usa nelle select debba dare tutti questi problemi.

Ora so che li causa (anche se non so il perchè), e ci ho messo una tombola di tempo e di esperimenti a capirlo ci starò attento. E' tutta esperienza per un povero niubbo come me.

Grz della tua disponibilità.

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 17:32
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
optime
Utente di HTML.it



Registrato il: Sep 2002

Provenienza:

Messaggi: 22769


ICQ :

MSN :

Skype :


se tu metti una tabella nella query, che tu la usi o no, comunque il motore la interroga.

come nell'esempio di prima, se ti dico di portarmi una cassetta di mele e una di pere, anche se poi prendo solo una mela tu la fatica di portare due cassette la fai comunque: ma non sei tu che fai una fatica assurda per una mela, sono io che ti ho dato l'ordine sbagliato.

quindi la regola è di fare una query (dare un ordine) più snella possibile.

hai bisogno del campo "Nome" dalla tabella Clienti?

SELECT Nome FROM Clienti

invece una query così

SELECT * FROM Clienti, Fornitori, Prodotti

anche se formalmente corretta (infatti non dà errore) fa inutilmente lavorare il motore database (ma non è stupido lui, sei tu che hai scritto la query sbagliata!)


__________________
La mia risposta ti ha aiutato? Clicca qui e ringraziami con un "Mi Piace", non ti costa niente ;-)
Software Gestione Studi Legali|Blog

Segnala ad un moderatore | IP: Collegato | Permalink

optime è offline Old Post 01-06-2012 17:40
Clicca qui per vedere il profilo dell'utente optime Clicca qui per inviare all'utente optime un messaggio privato Visita l'homepage dell'utente optime Visualizza ulteriori messaggi scritti dall'utente optime Aggiungi l'utente optime alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
laugher
Utente di HTML.it



Registrato il: Jan 2012

Provenienza: Roma

Messaggi: 139


ICQ :

MSN : resinov@email. it

Skype : resinov@email.it


Certo che sono io che ho sbagliato. Il problema è che il programma gira uguale, solo che non esce il risultato ed allora pensi che hai sbagliato l'elaborazione, non il recordset.

Il problema degli errori non è tanto farli, ma che meno del 50% ti dicono di che si tratta. Ti scordi una parentesi, un end if, un loop, persino una virgola, e non ti si dice nulla. Vedi solo il programma che non gira, e ti devi guardare il programma passo passo per vedere dove sta l'errore.

Segnala ad un moderatore | IP: Collegato | Permalink

laugher è offline Old Post 01-06-2012 19:54
Clicca qui per vedere il profilo dell'utente laugher Clicca qui per inviare all'utente laugher un messaggio privato Visita l'homepage dell'utente laugher Visualizza ulteriori messaggi scritti dall'utente laugher Aggiungi l'utente laugher alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
Tutte le ore sono con fuso orario CET. Ora sono le 12:44.     

  Pagine (2): [ 1   2   > ]  Ultima discussione   Prossima discussione Invia una risposta
Versione per la stampa | Invia il thread via email | Ricevi aggiornamenti sul thread | Scarica il thread
 

Cerchi un argomento specifico e hai fretta? Usa il motore di ricerca