Obsługa pola null pobranego z bazy MSSQL

0

Witajcie,
mój program pobiera z bazy danych MSSQL rekordy towarów (zapytanie łączy ze sobą 3 tabele: Towary, Stan_towarów, Dostawcy_towarów).
Wynik zapytania często pobiera dla niektórych towarów z tabeli Stan_towarów wartość null, która mówi ze nie ma towaru ze stanem.
poniżej zapytanie:

SELECT t.id_towaru_int, t.NAZWA_TOWARU, t.ilosc_jedn_zakupu, t.min_stan, s.ilosc_dostepna, e.symbol_towaru 
FROM  TOWARY t left join stan_magazynowy s on(t.id_towaru_int=s.id_towaru_int) left join dostawcy_towarow e on (t.id_towaru_int=e.id_towaru_int) 
where e.id_kth_alt like ''%D2F64E93AC78%'' and t.id_typu_towaru=''{793DFF79-61DF-43B0-86B2-D17D93C42D78}'' and t.czy_blokada_zakupu=''N'' and t.czy_ewidencjonowac=''T''

obsługa zapytania w delphi:

 while not SQL.Eof do
  begin
    ListItem := ListView.Items.Add;
    ListItem.Caption := (SQL.FieldValues['symbol_towaru']);
    ListItem.SubItems.Add(SQL.FieldValues['NAZWA_TOWARU']);
    ListItem.SubItems.Add(SQL.FieldValues['ilosc_jedn_zakupu']);
    **ListItem.SubItems.Add(SQL.FieldValues['ilosc_dostepna']);**
    ListItem.SubItems.Add(SQL.FieldValues['min_stan']);
                  end;
    SQL.Next;
  end;
  SQL.Close;

i niestety przy dodawaniu SubItemsa z polem ilosc_dostepna jesli wartość jest null wywala błąd:
c87d897068.png

czy ktoś wie jak obsłużyć tą wartość null?

0

a czemu jest

end;

przed SQL.Next;

 ?
0

Najprościej pobrać SQL.FieldValues['ilosc_dostepna'] do jakiejś zmiennej np Variant i sprawdzić czy nie jest null'em, można by też zamieniać na jakiś tekst pole ilosc_dostepna przy wywoływaniu zapytania ale to z kolei mogło by zabić db przy dużych porcjach danych.

2

Konwertuj funkcją VarToStr czyli:

ListItem.SubItems.Add(VarToStr(SQL.FieldValues['ilosc_dostepna']));
0

dzięki kolego kAzek :) udało się

0

Albo jak chcesz mieć 0 zamiast pustego napisu to prosta funkcja:

function VariantTo0Str(AValue: Variant): string;
begin
  result:= '0';
  if AValue = null then exit;
    result:= AValue;
end;
0

A z zamiana na wartość 0 to już sobie poradzę, jeszcze raz dzięki ;)

1

a nie lepiej tak :

sql.fieldbyname('ilosc_dostepna').asfloat ;

lub tak 

sql.fieldbyname('ilosc_dostepna').asinteger ;

1 użytkowników online, w tym zalogowanych: 0, gości: 1