SQLite, REALbasic i el ROWID
dijous 11 octubre 2007Bé, doncs resulta que SQLite inclou la possibilitat de generar automaticament un ID autoincrementat, per cada registre d’una taula. Això vol dir que quan definim l’estructura de la taula ens podem estalviar de crear un camp ID amb AUTOINCREMENT, perque SQLite ja ho fa de facto per nosaltres.
REALbasic inclou SQLite com a motor incrustat per bases de dades (a banda de poder treballar amb MySQL, Oracle, …) per tant podem compilar aplicacions amb REALbasic que treballaran comodament amb una base de dades (SQLite) sense necessitat de llibreries ni motors de bases de dades externs. Això és molt pràctic per projectes en que una petita base de dades ja compleix amb les necessitats.
Arribats ha aquest punt si estic treballant amb REALbasic i el Data Source REALSQLdatabase (que utilitza SQLite) i necessito obtenir tots els registres d\’una consulta a una taula, un tipic (per exemple):
SELECT * FROM usuaris
Em retornara un RecordSet (conjunt de registres) amb tots els camps del registre, … EXCEPTE el ROWID que ve definit per defecte.
Si necessito que el RecordSet inclogui un camp amb el ROWID que identifica automaticament a cada registre, em cal fer la consulta aixi:
SELECT *,ROWID FROM usuaris
Es a dir, demanant explicitament que a més a més de TOTS els camps, vull el ROWID.
Això és un aspecte no documentat en la documentació de REALbasic, malgrat que parlen en ocasions del ROWID. I et pot tornar una mica ximple si necessites accedir a un ID unic per cada registre i es clar, no vols definir un camp ID concret perque per això SQLite ja ho fa ell.
En resum, si tenim una taula (per exemple: usuaris) amb els camps:
- Nom
- Edat
I ens cal un RecordSet amb aquests camps i a més el camp ROWID per cada registre, el codi tindra aquest aspecte:
Dim rs As RecordSet
rs = db.SQLSelect("SELECT *,ROWID FROM usuaris")
I fent un recorregut pel RecordSet obtindriem una sortida com la següent (exemple):
|
A la web de SQLite és parla en detall d’aquest concepte del ROWID


