38 messaggi dal 19 giugno 2002
Sìììììììììììììììììììììììììììììììììììì, grande!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Funziona!!!!!!!!!!!!!!!!!!!!!!

O meglio mi dice che la query è sbagliata, ma almeno ho oltrepassato lo scoglio "connessione"!
Ti ringrazio, sei un grande!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Adesso provo a correggere la query.
Grazie mille!!!!!!!!!!!!!!!!!
Lisa

Lisa

Lisa
11.886 messaggi dal 09 febbraio 2002
Contributi
Si.. infatti la query è incorretta. Prima, quando cominciavo a fare le prime query, mi sorprendevo del fatto che esistessero interi volumi sull' SQL. "Tanto è solo una stringa, che avrà di complesso?" pensavo... invece il problema non è la stringa in sè (con un po' d'esperienza la sintassi è il problema minore) ma l'approccio che usi per aprire un recordset.
Infati quando nel database hai molti dati (e molti visitatori nel sito) è importantissimo riuscire a velocizzare le operazioni di accesso e scrittura al database. E questo lo fai con query pertinenti allo scopo che devono svolgere (guarda online, ci sono molte guide, per lo meno all'inizio dovresti conoscere quali sono i termini base e cosa puoi fare con loro). Allora tu avevi scritto:

rs.Open "SELECT * rubrica"

manca il FROM... fortunatamente le query sono abbastanza comprensibili anche nel linguaggio naturale, infatti tu diresti:
SELEZIONA tutto DA(lla tabella) rubrica" e di conseguenza la riga giusta è:

rs.Open "SELECT * FROM rubrica"
ciao ciao

-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
38 messaggi dal 19 giugno 2002
Ti ringrazio, quel pezzo l'ho già sistemato, il mio problema ora è con il like.
Devo fare una sorta di rubrica, quindi devo dare la possibilità a chi la usa di fare delle ricerche in base al nome o al cognome delle persone inserite in rubrica.

La query con Access 200 come si scrive?
E' giusto così?
rs.Open "SELECT * FROM rubrica WHERE '" & nomecampo & "' LIKE '" & '% nome'% & "' ", cn, 0, 1


Mi hanno detto che la % è l'equivalente del *, ma che dovevo metterci degli apici per segnalargli che si tratta di un carattere speciale.
E' vero?

Altra domanda:
la stringa '" & nomecampo & "' docvrebbe essere un parametro che gli viene passato dall'altra pagina html e cambia in base al tipo di ricerca che l'utente vuole fare.
Scritta così la riconosce come variabile?
Spero di essermi spiegata bene.
Non ho molta padronanaza dei termini!
Ciao e grazie




Lisa

Lisa
11.886 messaggi dal 09 febbraio 2002
Contributi
si si scritto così nomecampo verrà interpretato, vuol dire che se l'utente vuol cercare indirizzi, nomecampo vale "indirizzi", se invece... beh hai capito. Dovresti togliere gli apici da nomecampo, non ci vanno...
La struttura è questa:
SELECT * FROM tabella WHERE campo LIKE '%ciccio%'

Nel nome in più c'è un errore... il % va tra l'apice e la virgoletta...
Così dovrebbe esser tutto giusto:

<code>
rs.Open "SELECT * FROM rubrica WHERE " & nomecampo & " LIKE '%" & nome &"%'", cn, 0, 1
</code>

La sintassi del like è semplice:

WHERE campo LIKE 'nome'
se lo scrivi così è uguale che dire
WHERE campo = 'nome'
(notare che gli apici stanno ad indicare che si deve cercare una stringa... se vuoi cercare su campo numerici fai: WHERE CAMPO &gt;= 15)
poi LIKE ammette i %. Se vuoi trovare i nomi che finiscono per "uzzi" farai:

WHERE campo LIKE '%uzzi'

Il percento lo puoi mettere prima, dopo o da entrambe le estremità.

-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
38 messaggi dal 19 giugno 2002
Sei un grande!!!!!!!!!!!!!!!!!!!!
Funziona!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ti ringrazio veramente tantissimo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ciao e a presto!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Lisa

Lisa
38 messaggi dal 19 giugno 2002
Son di nuovo qui!
Stai pensando che sono una ropi.......
Hai ragione!


Se volessi fare una query (sempre il nostro caro amico select), che facesse un controllo su più campi, ad es.


SELECT * FROM NOME_TABELLA WHERE

adesso viene il bello:

il nome del campo A deve essere uguale a pippo e il nome del campo B deve essere uguale papirino

come devo scrivere la sintassi?

SELECT * FROM NOME_TABELLA WHERE campoA, campoB=pippo, parino

oppure

SELECT * FROM NOME_TABELLA WHERE campoA=pippo AND campoB= paperino ?

Ho provato con entrambi ma non funziona!

E poi, come faccio a dirgli in asp se hai dei risultati comportati in un certo modo, altrimenti in un altro?

Cioè rs è una stringa?
Posso "giocare" sulla stringa vuota o piena?


Garzie mille!

Lisa

Lisa
11.886 messaggi dal 09 febbraio 2002
Contributi
Hai scritto bene! la sintassi corretta è la seconda:

SELECT * FROM NOME_TABELLA WHERE campoA=pippo AND campoB= paperino

tranne per un piccolo particolare... pippo e paperino sono stringhe, quindi ci vanno gli apici:
"SELECT * FROM NOME_TABELLA WHERE campoA='pippo' AND campoB='paperino'"

se pippo e paperino sono variabili allora è così:

"SELECT * FROM NOME_TABELLA WHERE campoA='"&pippo&"' AND campoB='"&paperino&"'"

poi... si, tu puoi compiere alcune azioni a seconda di cosa è contenuto nel recorset.
Un recordset non è propriamente una stringa... piuttosto una "serie di coppie nome-valore"... più o meno eh!
immaginati un recordset come una tabella, la stessa che vedi quando da access apri un database. Che cosa puoi fare in quella tabella? Selezionare dei record, cambiare o eliminare il valore dei campi, aggiungerne di nuovi. La stessa cosa la puoi fare da script con il recordset.
Come tutti gli oggetti ha dei metodi:
rs.Movenext Questo seleziona il prossimo record
rs.Movelast Va all'ultimo record
rs.MoveFirst Va al primo
rs.Delete Cancella il record selezionato
rs.Update Aggiorna il recordset (necessario per rendere effettive le modifiche)

e così via... ce ne sono altri.

Ha anche delle proprietà e in particolar modo sono queste che devi consultare per eseguire questo o quel codice.

rs.EOF
Questo è importantissimo, ti dice se la query ha restiuto dei record o no. Il recordset si trova in EOF (end of file) quando dopo non ci sono più record. Quindi ti puoi trovare in eof dopo tanti movenext oppure subito, se non c'è alcun record.
Quindi tu fai una select:

rs.Open "SELECT * FROM tabella WHERE nome='pippo'"
if rs.EOF then
Response.write("Mi spiace non c'è nessuno che si chiama pippo")
else
Response.write("ci sono "&rs.RecordCount&" persone che si chiamano pippo")
end if

RecordCount è un'altra proprietà utile, ti dice quanti record si trovano nel recordset.
come avrai capito un rs ha molte proprietà e metodi, nella maggiorparte dei casi tante di queste non servono, così hanno pensato bene di permettere allo sviluppatore quali vuole usare e quali no. Questo lo puoi specificare quando fai una select, cioè quando apri un recordset.
rs.Open "SELECT * FROM tabella", cn, 0, 1
Vedi quel ,cn, 0, 1? L'hai già visti si? Ecco, se scrivi 0 oppure 1 oppure 3 cambia il modo di aprire il recordset per cui puoi compiere certe azioni piuttosto che altre.
,0,1 sono rispettivamente CursorType e LockType, il secondo indica la modalita:
,1 sola lettura (puoi solo leggere i valori dai campi, quindi NON puoi usare rs.Update per aggiornare i cambiamenti, se ne hai fatti)
,2 scrittura pessimistica (puoi cambiare i valori dei campi e aggiornarli usando rs.Update. Pessimistica vuol dire che nessun'altro utente può accedere al database finchè l'utente che sta aggiornando i record non ha finito, frazioni di secondo..)
,3 scrittura ottimistica (come quello di prima soltanto che più utenti possono connettersi al db, anche se altri stanno scrivendo)

Il primo, cioè il cursortype, indica invece quali metodi e proprietà dell'oggetto recordset puoi usare:
,0 Forward only (puoi solo spostarti in avanti usando rs.Movenext, esempio non puoi usare rs.RecordCount, rs.MovePrevious, MoveFirst... non puoi usare la paginazione. E' limitato, però richiede meno tempo per l'accesso, per cui è da preferire se devi fare cose semplici come riportare tutti i record uno di seguito all'altro)
,1 Keyset (ci fai tutto... ma è più lento rispetto al primo)
,2 Dynamic (come quello di prima, mi pare che la differenza è che questo è supportato da SQL server mentre da access no...)
,3 Static (è la via di mezzo, puoi andare avanti e indietro nel recordset, puoi usare la paginazione, il recordcount, tranne poche cose)

ma io sinceramente uso sempre Forwardonly e Static...
pià il primo però ^__^
ciaooo!

-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
38 messaggi dal 19 giugno 2002
Grazie!
Sai un sacco di cose e soprattutto le spieghi bene!
Penso di aver capito tutto, quindi ora faccio le mie prove e poi ti dico.
Grazie molte!

Ciao


Lisa

Lisa

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.