Vorrei aggiungere al mio programma un ulteriore livello di sicurezza sui dati contenuti nel DB-SQLite3 che ho in costruzione. Nel gestore DB (Sqliteman) ho notato ed utilizzato la funzione "Dump Database". Detta funzione crea un unico file in formato .txt di tutto il DB, dalle impostazioni alle tabelle coi loro dati. Solo che che il file che ne viene fuori si presenta così:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE 'RacCodVoci' ( 'NumVoCassa' INTEGER, 'NumVoColleg' INTEGER, PRIMARY KEY ( 'NumVoCassa') );
CREATE TABLE 'Movimgg' ( 'DtMovvgg' INTEGER, 'OraMovvgg' INTEGER, 'NuProMovvgg' BYTE DEFAULT NULL, 'CoVocMovvgg' INTEGER DEFAULT NULL, 'DescrMovvgg' VARCHAR(100) DEFAULT NULL, 'MonMovvgg' CHAR(1) DEFAULT NULL, 'ImpMovvgg' FLOAT DEFAULT NULL, 'BenefMovvgg' CHAR(1) DEFAULT NULL, PRIMARY KEY ( 'DtMovvgg', 'OraMovvgg') );
CREATE TABLE 'RestaCassagg' ( 'DtCassagg' INTEGER, 'CoVoResCasgg' INTEGER, 'ValCasgg' CHAR(1) DEFAULT NULL, 'ImpCasgg' FLOAT DEFAULT NULL, PRIMARY KEY ( 'DtCassagg', 'CoVoResCasgg') );
...............................................................................
INSERT INTO "CausaliFreq" VALUES('bar',20090525);
INSERT INTO "CausaliFreq" VALUES('fotografie per tessera mia',20090409);
CREATE TABLE 'PianCont' ( 'NumVoce' PRIMARY KEY, 'NomeVoce' VARCHAR(50) DEFAULT NULL, 'ContrPartSiNo' CHAR(1) DEFAULT NULL, 'DtPrimoUso' INTEGER DEFAULT NULL );
INSERT INTO "PianCont" VALUES(10000000,'ATTIVO','N',NULL);
INSERT INTO "PianCont" VALUES(10100000,'CASSA','N',NULL);
INSERT INTO "CausaliFreq" VALUES('bar',20090525);
INSERT INTO "CausaliFreq" VALUES('fotografie per tessera mia',20090409);
CREATE TABLE 'PianCont' ( 'NumVoce' PRIMARY KEY, 'NomeVoce' VARCHAR(50) DEFAULT NULL, 'ContrPartSiNo' CHAR(1) DEFAULT NULL, 'DtPrimoUso' INTEGER DEFAULT NULL );
INSERT INTO "PianCont" VALUES(10000000,'ATTIVO','N',NULL);
INSERT INTO "PianCont" VALUES(10100000,'CASSA','N',NULL);
...............................................................................
INSERT INTO "PianCont" VALUES('00000000','Record Flag nuovi inserimenti','S','NULL');
INSERT INTO "PianCont" VALUES(NULL,'NULL','NULL','NULL');
COMMIT;
Ogni record è diverso dall'altro, come lunghezza ed ovviamente come contenuto, ma tutti finiscono col ";".
Da ieri cerco una formula per la lettura di tutto il record, a prescindere dalla sua lunghezza, ma non ho ancora scoperto come fare. Nel programma ho inserito le seguenti istruzioni:
PRIVATE h_File AS File
PRIVATE $_Eof AS String
PRIVATE $_File AS String
PRIVATE $_Rec AS String
PUBLIC SUB _new()
..............................................
OPEN $_File FOR READ AS #h_File
...........................................
SELECT CASE ModuliVari.$_FlgNmTab
CASE "piancont"
ME.Popolapiancont
END SELECT
END
PUBLIC SUB Popolapiancont()
DIM i_PoStri AS Integer
DO UNTIL $_Eof = "FiFi"
ME.Leggi_FlTabSeq
i_PoStri = InStr($_Rec, "piancont")
IF i_PoStri <> 0 THEN
...................................................
ENDIF
LOOP
END
PUBLIC SUB Leggi_FlTabSeq()
READ #h_File, $_Rec, -512
IF Eof(h_File) THEN
$_Eof = "FiFi"
ENDIF
END
l'istruzione READ così com'è impostata legge sempre 512 byte, per cui se il record è più lungo, viene troncato al 512° crt, se invece è più corto, vengono compresi nei 512 crt anche i successivi, pur essendo appartenenti a uno o più record seguenti.
Come posso fermare la mia lettura al solo record effettivo, ciè quello compreso fra un ";" ed il ";" successivo?
:
Ciao.