nella form allegata ho definito due serie di oggetti di connessione al mio DB SQLite3 tramite zeos.
Nello spezzone di codice seguente appare come, durante la lettura dati tramite join di 2 tabelle, si presenta, non sempre, la necessità di accedere ad una terza tabella per rilevare altri dati da presentare poi nella stringGrid in costruzione:
procedure FaiGridDescr(); // Ricerca per Descrizione
. . .
begin
nuRec:= DbContaRecInOpen(sql);
if (nuRec > 0) then
begin
. . .
swOpenErro:= OpenDbZQuery1(sql);
if not swOpenErro then
begin
Form6.ZReadOnlyQuery1.First; // Accesso alla Tabella DB.movimgg
iRg:= 0;
while not Form6.ZReadOnlyQuery1.EOF do
begin
iRg:= iRg + 1;
dtMov:= Form6.ZReadOnlyQuery1.FieldByName('dtContMov').AsString;
Form6.GridMovvComune.Cells[1, iRg]:= RightStr(dtMov, 2) + '/' + Copy(dtMov, 5, 2) + '/' + LeftStr(dtMov, 4); // data contabile del movimento corrente
importo:= Form6.ZReadOnlyQuery1.FieldByName('Importo').AsFloat;
impEdt:= EdtImp(importo, Form6.ZReadOnlyQuery1.FieldByName('lirEur').AsString);
end;
coVoSotCtoCassa:= Form6.ZReadOnlyQuery1.FieldByName('coVoMovg').AsString; // Codice Voce del conto di movimentazione
sql:= 'SELECT NomeVoce, ContrPartSiNo FROM piancont WHERE NumVoce = ' + coVoSotCtoCassa;
//-------------------------------------------------------------------- fin qui FUNZIONA ---------------------------------------------------------------------------------------------------------
striMia:= EstraiVocePianCont(sql); // da qui NON ritorna
per comodità di lettura riporto qui sotto, e non sopra, il codice della function EstraiVocePianCont e della OpenDbZQuery2 richiamata da quest'ultima:
function OpenDbZQuery2(sql: String): Boolean; // funzione usata per accedere alla lettura di un solo Record della TB.piancont o dalla TB.racodvoci
var
swOpenErro: Boolean = False;
begin
WriteLn('function OpenDbZQuery2');
//----------- Open del DB ------------------------------------------------------
Form6.ZConnect2.Database := dbCorr;
Form6.ZReadOnlyQuery2.SQL.Text := sql;
try
Form6.ZReadOnlyQuery2.Open;
except
on E: Exception do
begin
WriteLn('ERRORE nella OPEN del ContabFamdb (sql: "' + sql + '" ' + IntToStr(E.HelpContext) + ': ' + E.Message);
swOpenErro:= True;
end;
end;
Result:= swOpenErro;
end;
function EstraiVocePianCont(sql: String): String; // Estrae la Voce contabile, a cui accoda il contenuto del campo "ContrPartSiNo"
var
swOpenErro: Boolean = False;
estratto: String;
begin
swOpenErro:= OpenDbZQuery2(sql); // qui dentro va in ERRORE
case swOpenErro of
False:
begin
Form6.ZReadOnlyQuery2.First;
estratto:= Form6.ZReadOnlyQuery2.FieldByName('NomeVoce').AsString;
estratto:= estratto + Form6.ZReadOnlyQuery2.FieldByName('ContrPartSiNo').AsString;
end
else begin
estratto:= '*?*'; // CODICE DI errore PER recor NON TROVATO
end;
end;
Form6.ZReadOnlyQuery2.Close;
Result:= estratto;
end;
L'esecuzione si interrompe a causa dii un Errore nell'apertura del DB come si legge nella WriteLn di controllo:
ERRORE nella OPEN del ContabFamdb (sql: "SELECT NomeVoce, ContrPartSiNo FROM piancont WHERE NumVoce = 101018070" 0: Requested database driver was not found
A prescindere dal fatto che penso avere abbondato nelle definizioni degli oggetti (un unico ZConnect nella mia logica sarebbe bastato), il codice scritto avrebbe dovuto funzionare, invece non è così.
Allora devo ammettere che continuo a non capire come muovermi per l'accesso e la gestione di dati di DB tramite Zeos.