

"Numeric value out of range." (Sybase SQL Anywhere 5.5)
Po spustení databázovej procedúry (alebo ako to nazvať) cez program písaný v Delphi 2007 mi vyskočí chyba:
Project *.exe raised exception class EOleException with message '[Sybase][ODBC driver]Numeric value out of range: value 808335409 out of range for destination'.
Vždy mi vypíše chybu s tou istou hodnotou, pritom údaje, ktoré vkladám do databázy sú VŽDY iné!
Nechcem tú dávať tých 150 riadkov zdrojového kódu v Delphi a zdrojový kód tej procedúry, preto mi určite presne neporadíte, kde je chyba. Len chcem vedieť, kedy sa táto chyba vyskytuje, pretože na Googli som toho veľa nenašiel.
Muj tip je, ze pri predavani dat z delphi do databaze tam posilas uplne jinou (nenaplnenou) promennou nebo jen ukazatel na pametove misto s promennou. To by vysvetlovalo, proc to ma porad stejnou hodnotu... a ta je mimochodem vyssi, nez co se tam da narvat. Ale bez zdrojaku Ti asi nikdo vic neporadi...
Môže to byť tým, že tam posielam toto(??):
Je pole len ukazovateľom na miesto s premennou v pamäti???
No pokud mas nekde nad timto radkem neo typu
a do db predavas
a ne
, tak to mas relativne dobre. Poslat sem cely zdrojak, tak Te asi admin kuchne a navic nevim, kdo by se tim prokousaval. Na programovani je nejzajimavjejsi hledani vlastnich chyb...
Hlavne, keď mám do termínu urobenia toho programu už len jeden týždeň a zaseknem sa na takejto blbosti...
Tak mám tu hodiť 300 riadkov zdrojáku v Delphi (je to len čisto to, čo vkladá do databázy), tú databázovú procedúru a dátové typy jednotlivých stĺpcov (je ich 46) tabuľky, do ktorej to vkladám?
to dej na uloz.to v textovém souboru s příponou .txt![]:)](https://static.poradna.net/images/smiley/evilsmile.gif)
Tak už som to všetko dal na Problem.txt
Dal som tam celú procedúru Vklad, ktorú potom 2-krát využívam v programe. Dal som ju tam celú hlavne, aby ste sa mohli pozrieť na deklarácie premenných. Potom sa mrknite hlavne za poznámku // Pre Crystal Reports, pretože kód pred ňou bezproblémovo funguje a robí, čo má.
Inak procedúra frmZaklad.NacitanieSQL robí toto:
Ďalej procedúra frmZaklad.VykonanieSQL robí toto:
A nakoniec funkcia frmZaklad.BodkaNaCiarku robí toto:
Môžete mi z toho zdrojáku poradiť? ...
A jsi si jisty, ze vsechny polozky pole Doby[] jsou naplnene? V tom cyklu je ruzne preskakujes.
Zjisti si aspon, co tam posilas. Prece neni problem odrokovat program a precist si ri tom hodnoty promennych, ktere ti jsou jako parametry.
Aha, díky. Ja som tam všade mal premennú i, potom som ten cyklus celý prepisoval a zamenil som aj to, čo som nemal. Idem vyskúšať.
Ak je problém vo volaní uloženej procedúry (a nie je k dispozícii nejaký profiler), tak by som na tvojom mieste postupoval nejako takto:
- Zmenil by som telo uloženej procedúry tak, aby nerobila vôbec nič (napríklad namiesto INSERT INTO t(c1,c2) VALUES (?,?) by som dal SELECT ? AS c1,? AS c2). Ak by to stále padalo, tak by som postupne odstraňoval parametre procedúry - až kým by to neprestalo padať.
- V prípade, že by to po zrušení tela procedúry začalo fungovať, tak by som postupne menil procedúru tak, aby namiesto parametrov vkladala nejaké konštanty, ktoré určite ide do tabuľky vložiť - až kým by to neprestalo padať.
Ďalší postup by závisel od dátového typu problémového parametra a hodnoty, s ktorou sa procedúra volá.
PS: Zdrojový kód som zatiaľ nepozeral.
Díky, idem skúsiť.
Síce mi to zaberie množstvo času, ale lepšie ako hľadať na Googli niečo, čo mi vlastne vôbec nemusí pomôcť.
Tak problém je vyriešený. Díky všetkým, ale hlavne autorovi PSPadu, ktorý to s Delphi naozaj umí.