Foutmelding als “System error 110” vanuit sql zijn soms veroorzaakt door een slechte/trage verbinding.
Best maak je een standaard db-test project dat niets doet behalve de verbinding testen, en dan kan je dat steeds weer gebruiken.
Is de database verbinding nog ok?
- Database gegevens initialiseren.
- Database verbinding openen
- …loop van het programma dat gegevens gebruikt
- Database verbinding sluiten
Het probleem dat hier kan optreden is de duur dat de databaseverbinding open blijft. Hoe langer het programma draait, hoe meer kans dat de database op een bepaald moment niet bereikbaar is. Typisch is na het blijven openstaan gedurende de nacht; eerste handeling de volgende dag doet het programma crashen als de databasefouten niet juist worden opgevangen.
Het alternatief kan zijn bij elke aktie op de database de verbinding te openen en te sluiten.
Of de verbinding te testen en indien niet meer goed, te heropenen.
Hoe best de procedures maken in de Data module?
Je kan een “result” teruggeven, die kan verder verwerkt worden in de aanroepende code:
PUBLIC SUB getWorkedOn(sWork AS String) AS Result ' DIM myResult AS Result DIM sSql AS String ' sSql = "SELECT * FROM reg " sSql &= "WHERE reg_type='U' AND ord_code = &1 " ' TRY myResult = $hConNoxqs.Exec(sSql, sWork) ' IF ERROR sLastError = Error.Text RETURN NULL ELSE RETURN myResult ENDIF ' END
Of je kan een waarde teruggeven:
PUBLIC SUB getEmployeeCount() AS Integer ' DIM iMonthNames AS Integer ' $hResEmployees = MData.getEmployees(MCommon.bActiveOnly) ' iMonthNames = $hResEmployees.Count SetLog("Employees used: " & iMonthNames & ", active employees: " & Str$(MData.activeEmployees("A"))) ' RETURN iMonthNames ' END