Files
comun/docs/conventie_null_vfp.md
Marius Mutu c4d869921d verificare partener: garda pe cont NULL, hook-uri de disciplina, docs compactate
- ooperatii_comune: verific_partener nu mai construieste SQL NULL cand contul
  primit e NULL (EMPTY(.NULL.) e .F. in VFP)
- utile\context_watch.ps1 si utile\docs_revizie_check.ps1: masurarea contextului
  sesiunii si cadenta reviziei de documentatie, prin hook-uri Claude Code
  (instalare in docs\monitorizare-context.md)
- reguli_lucru: delegare la subagenti, modificari minime si scoped, scrierea si
  revizuirea documentatiei, changelog strictul necesar (regulile 3, 6, 9, 11, 12)
- scripturi-migrare-db: continutul unui script (scoped, fara select, idempotent)
- teste noi pentru cele doua erori din achizitia de import
- restul documentatiei compactata, fara pierdere de reguli

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RYbiinqXxdEqXi53x4Ro7K
2026-08-02 22:30:44 +03:00

889 B

Garzi pe valori NULL (VFP)

Campurile din cursoarele intoarse de Oracle pot fi .NULL.. In VFP EMPTY(.NULL.) intoarce .F., deci o garda scrisa doar cu EMPTY() nu prinde NULL, iar concatenarea cu NULL face tot sirul NULL (inclusiv un SQL construit prin +).

Forma corecta, cu tipul evaluat primul ca sa opreasca acolo:

If Type('tcCont') # 'C' Or Empty(Nvl(tcCont, ''))
	Return
Endif
  • Nvl(x, '') in interiorul lui Empty(), nu Isnull(x) Or Empty(x).
  • TYPE() pe o variabila cu NULL de tip caracter intoarce tot 'C' - nu tine loc de Nvl.
  • Acelasi tratament la orice text construit prin + din campuri de cursor (SQL, mesaje, chei): un singur camp NULL anuleaza tot sirul.

Simptom tipic cand lipseste garda: SQL statement parameter is required for non-prepared SQLEXEC() calls in OEXECUTOR.OEXECUTE - SQL-ul ajuns la SQLEXEC era .NULL..