Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, ADO-SQL] pFields->GetItem (index)->GetValue () - throws an exception when field is empty - błąd pustego pola

Ostatnio zmodyfikowano 2013-04-23 20:08
Autor Wiadomość
berkov
Temat założony przez niniejszego użytkownika
[C++, ADO-SQL] pFields->GetItem (index)->GetValue () - throws an exception when field is empty - błąd pustego pola
» 2013-04-23 09:51:43
hey ho

Uzywam ADO do kontaktu z WinAPI do db na MS Access.
Wszystko dziala idelanie, bez problemu zapisuje i odczytuje, madre to ADO choc czasami troche upierdliwe.
W kazdym badz razie nie moge sobie poradzic z jednym bledem, a mianowicie keidy zczytuje wartosci pol a jedno pole jest puste (blank) to GetValue() wyrzuca blad (exception):

pFields->GetItem( nIndex )->GetValue() )

oczywiscie moge to wychwycic przez try catch (_com_error & ) ale nie chce bo uzywam tego do "prawdziwych bledow".
Nie chce tez zmuszac uzytownika do wypelniania wszystkich pol, bo niektore nie sa obowiazkowe - jesli pole jest puste to chce  otrzymac pointer do pustego stringu ('\0'):

_bstr_t jakisstring = _bstr_t( pFields->GetItem( nIndex )->GetValue() );
ale niestety program natychmiast wywala blad.

jakies pomysly?

berkov
P-81038
DejaVu
» 2013-04-23 12:51:22
http://forums.codeguru.com/showthread.php?536477-C-ADO-SQL-pFields-gt-GetItem-(index)-gt-GetValue-()-throws-an-exception-when-field

C/C++
_bstr_t jakisstring = _bstr_t( pFields->GetItem( nIndex ) ? pFields->GetItem( nIndex )->GetValue()
    : "" );
P-81041
berkov
Temat założony przez niniejszego użytkownika
» 2013-04-23 13:58:13
@DejaVu nie za bardzo rozumiem ten kod.
btw, link jest do mojego posta :-)
P-81044
DejaVu
» 2013-04-23 14:13:00
A działa?
P-81046
berkov
Temat założony przez niniejszego użytkownika
» 2013-04-23 14:24:29
hehe hmm.. nie wiem, ale az jestem ciekawy, wroce do domum, wrzuce w kompilator i sprawdze wieczorem :-)
P-81049
berkov
Temat założony przez niniejszego użytkownika
» 2013-04-23 19:10:28
Niestety, nie dziala,  pFields->GetItem( nIndex ) zawsze zwraca true bo zawsze cos w nim jest, nawet jesli indeks odnosi sie do pustego pola.
Okazuje sie ze problem nie jest w GetValue(), ktory myslalem ze nie potrafi "obsluzyc" pustego pola ale w _bstr_t, ktory jako wskaznik nie potrafi wskazac na pusty string.

Najpierw trzeba uzyc variant_t, zobaczyc czy nie puste i dopiero wpisac do _bstr_t

C/C++
variant_t vtName = pFields->GetItem( nIndex )->GetValue();
_bstr_t jakisstring = _bstr_t(( vtName.vt == VT_NULL ) ? " "
    : vtName );

zrodlo:
http://forums.codeguru.com/showthread.php?350603-ADO-error-reading-an-empty-field
dzieki
P-81070
DejaVu
» 2013-04-23 20:08:09
No to zamykam skoro znalazłeś rozwiązanie :) Mimo wszystko chodziło o nulla :)
P-81073
« 1 »
  Strona 1 z 1