Newsgroup: it.comp.www.php
Titolo: Domande da novizio

Salve,
potreste spiegarmi il significato di queste istruzioni? Metto anche la 
spiegazione che conosco io.
$connessione = new COM("ADODB.Connection");
// Creo un'oggetto per connettermi ad database
$stringaconn = "DRIVER={Microsoft Access Driver 
(*.mdb)};DBQ=".realpath("negozio.mdb");
// Questa e' la riga per specificare il tipo di database e la path in cui si 
trova.
$connessione->Open($stringaconn);
// Uso l'oggetto $connessione per connettermi al database.
$recordset = new COM("ADODB.Recordset");
// Questo non ho capito bene a cosa serve... anche perché ho trovato esempi 
in rete che non lo usano... forse serve per // accedere alle tabelle del 
database?
$recordset->Open($query, $connessione);
// L'oggetto viene usato per connettersi ed anche eseguire la query?
$res = $connessione->execute($query);
// Qui uso l'oggetto $connessione per eseguire la query e assegno il 
risultato a $res.
Il punto e' che non capisco bene quando sia necessario usare quell'oggetto 
recordset.
Grazie

 risultato a $res.
Questo sistema invece è più adatto per query di INSERT o UPDATE o 
DELETE, in cui non c'è un ritorno di dati organizzati per righe e 
colonne ma solo un valore true o false che indica se la query è andata a 
buon fine e/o un numero che indica quante sono state le righe coinvolte 
dall'operazione. Avrebbe quindi poco senso usare questo sistema per una 
select.
Queste comunque sono cose che non riguardano il php ma la gestione dati 
via odbc. Magari puoi trovare info più dettagliate su un ng più specifico.
Lucignolo
-- 
Sign in progress

 No. Devi già avere eseguito la connessione affinchè ti funzioni.
Ma si usa sempre chiamando Open e passando la query e l'oggetto connessione?
Oppure si usa Open solo la prima volta?
Ciao 

 Oppure si usa Open solo la prima volta?
La prima che hai detto.
E sarebbe buona norma, una volta terminati i lavori sul recordset, usare 
il metodo close prima di fare una nuova open.
In pratica l'oggetto recordset e' il cursore, il contenitore dei dati 
derivati dalla select.
Ogni open ne decide sia la struttura che la lunghezza.
se per esempio la query è
$query = 'select pippo, pluto from tabella';
il recordset che ne risulterebbe (da $recordset->open($query, 
$connessione) )avrebbe tante righe quante quelle di tabella e due 
colonne: pippo e pluto.
Quindi potresti fare una cosa del genere:
---
$query = 'select pippo from tabella';
$recordset->open($query, $connessione);
for ($i=1;$i<$recordset->RecordCount();$i++)
{
	echo $recordset->fields('pippo')->value . '<br>';
         $recordset->MoveNext();
}
$recordset->Close();
---
e vedresti il contenuto di tutti i campi PIPPO della tabella TABELLA.
PS: ho scritto il codice "a braccio", quindi potrebbe non essere esatto 
al 100%, ma in linea di massima dovremmo esserci.
Ripeto: non è una particolarità del PHP, quindi questo non è il posto 
più adatto dove discuterne.
Riguarda di più la gestione dei dati via odbc, quindi scommetto che ci 
sono gruppi più adatti dove potranno darti maggiori e migliori informazioni.
Io l'oggetto recordset lo uso da Visual Basic, per esempio, non da PHP.


 Io l'oggetto recordset lo uso da Visual Basic, per esempio, non da PHP.
Infatti mi sa che sia legato soprattutto ad Access.
Grazie 

 $recordset->Close();
volevo estrarre da una tabella il campo ID dell'ultima riga. Ma ho provato
il seguente codice per contare quanti sono i record e ottengo un valore 
sbagliato:
$connessione = new COM("ADODB.Connection");
$stringaconn = "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=".realpath("negozio.mdb");
$connessione->Open($stringaconn);
$recordset = new COM("ADODB.Recordset");
$query = "select * from Carrello";
$recordset->Open($query, $connessione);
Se provo a leggere il valore $recordset->RecordCount() ottengo -1, eppure
nella tabella i record ci sono. Anche recordset->movelast() mi da errore 
(proprio perché non ha estratto nessun recordo penso). Forse mi serve 
qualche altro metodo per sapere quanti sono i record? 

 sbagliato:
Ho cambiato il tipo di cursore impostandolo a adOpenDynamic e adesso posso 
chiamare movelast().
Saluti