Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z Konwersja na DECIMAL
neon85
post 31.03.2009, 10:07:26
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.03.2009

Ostrzeżenie: (0%)
-----


Witam!

Proszę o pomoc. Próbowałem juz kilkoma sposobami i cały czas mi nie wychodzi.
A mianowicie mam taką procedurę:


  1. CREATE PROC AktualizujTowar
  2. @IDtowar int,
  3. @Nazwa varchar(255) = NULL,
  4. @Symbol varchar(20) = NULL,
  5. @Opis text = NULL,
  6. @Zdjecie varchar(25) = NULL,
  7. @Cena decimal(5,2) = NULL,
  8. @Waga decimal(3,3) = NULL,
  9. @StanMag int = NULL
  10. AS  UPDATE Towary 
  11.   SET 
  12.   Nazwa=@Nazwa,
  13.   Symbol=@Symbol,
  14.   Opis=@Opis,
  15.   Zdjecie=@Zdjecie,
  16.   Cena=@Cena,
  17.   Waga=@Waga,
  18.   StanMag=@StanMag
  19.  WHERE IDtowar=@IDtowar


Probując zmodyfikować jakiś rekord np:

  1. EXEC AktualizujTowar 8, 'Test', '5', 'Opis', 'zdjecie', 22.36, 24.565, 1


otrzymuję komunikat:

Msg 8114, Level 16, State 1, Procedure AktualizujTowar, Line 0
Error converting data type numeric to decimal.

Nie wiem jak sobie z tym poradzić. Fukncja CONVERT() nie pomaga.

Z góry dzieki.
Go to the top of the page
+Quote Post
Zbłąkany
post 31.03.2009, 15:42:26
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

Ostrzeżenie: (0%)
-----


Odpowiedź znajdziesz tutaj. Zerknij na tabelę konwersji i wykorzystaj poradę pod tabelą smile.gif .


--------------------
Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox
Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..."
Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL"
Go to the top of the page
+Quote Post
neon85
post 1.04.2009, 07:38:35
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.03.2009

Ostrzeżenie: (0%)
-----


To już wcześniej widziałem i albo cos do końca nie rozumiem albo już sam nie wiem.

Zmieniłem Procedurę na taką:

  1. ALTER PROC AktualizujTowar
  2. @IDtowar int,
  3. @Nazwa varchar(255) = NULL,
  4. @Symbol varchar(20) = NULL,
  5. @Opis text = NULL,
  6. @Zdjecie varchar(25) = NULL,
  7. @Cena float = NULL,
  8. @Waga float = NULL,
  9. @StanMag int = NULL
  10. AS  UPDATE Towary 
  11.   SET 
  12.   Nazwa=@Nazwa,
  13.   Symbol=@Symbol,
  14.   Opis=@Opis,
  15.   Zdjecie=@Zdjecie,
  16.   Cena=@Cena,
  17.   Waga=@Waga,
  18.   StanMag=@StanMag
  19.  WHERE IDtowar=@IDtowar



i jak daję takie wywołanie:

  1. exec AktualizujTowar 8, @Cena=2.4


to jest dobrze. 

Natomiast, gdy zamienię na to:

  1. exec AktualizujTowar 8, @Waga=2.4


to pojawia sie komunikat:

  1. Msg 8115, Level 16, State 6, Procedure AktualizujTowar, Line 12
  2. Arithmetic overflow error converting float TO DATA type numeric.
  3. The statement has been terminated.



co jest nie tak?

Ten post edytował neon85 1.04.2009, 07:39:20
Go to the top of the page
+Quote Post
prachwal
post 2.04.2009, 17:09:34
Post #4





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

Ostrzeżenie: (0%)
-----


Cytat(neon85 @ 1.04.2009, 07:38:35 ) *
To już wcześniej widziałem i albo cos do końca nie rozumiem albo już sam nie wiem.

Zmieniłem Procedurę na taką:

  1. ALTER PROC AktualizujTowar
  2. @IDtowar int,
  3. @Nazwa varchar(255) = NULL,
  4. @Symbol varchar(20) = NULL,
  5. @Opis text = NULL,
  6. @Zdjecie varchar(25) = NULL,
  7. @Cena float = NULL,
  8. @Waga float = NULL,
  9. @StanMag int = NULL
  10. AS UPDATE Towary
  11. SET
  12. Nazwa=@Nazwa,
  13. Symbol=@Symbol,
  14. Opis=@Opis,
  15. Zdjecie=@Zdjecie,
  16. Cena=@Cena,
  17. Waga=@Waga,
  18. StanMag=@StanMag
  19. WHERE IDtowar=@IDtowar



i jak daję takie wywołanie:

  1. exec AktualizujTowar 8, @Cena=2.4


to jest dobrze.

Natomiast, gdy zamienię na to:

  1. exec AktualizujTowar 8, @Waga=2.4


to pojawia sie komunikat:

  1. Msg 8115, Level 16, State 6, Procedure AktualizujTowar, Line 12
  2. Arithmetic overflow error converting float TO DATA type numeric.
  3. The statement has been terminated.



co jest nie tak?


jaki typ danych masz w tabeli Towary dla pola Waga?

jest coś takiego jak convert(float,@liczba)
Go to the top of the page
+Quote Post
neon85
post 2.04.2009, 22:13:51
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.03.2009

Ostrzeżenie: (0%)
-----


Cytat(prachwal @ 2.04.2009, 18:09:34 ) *
jaki typ danych masz w tabeli Towary dla pola Waga?

jest coś takiego jak convert(float,@liczba)


Mam tak jak w pierwszym poście w deklaracjach czyli decimal(3,3). convert nie pomaga:/
Go to the top of the page
+Quote Post
prachwal
post 3.04.2009, 18:51:50
Post #6





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

Ostrzeżenie: (0%)
-----


Cytat(neon85 @ 2.04.2009, 22:13:51 ) *
Mam tak jak w pierwszym poście w deklaracjach czyli decimal(3,3). convert nie pomaga:/


pomoże za to zmiana typu z decimal (3,3) an decimal(4,3) lub decimal(3,2)

nie wiem dlaczego ale jak tak zmienisz to ma ochotę działać

przykład:

select convert(decimal(4,3),cast(3.303 as float))
Go to the top of the page
+Quote Post
neon85
post 17.04.2009, 07:35:47
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.03.2009

Ostrzeżenie: (0%)
-----


Cytat(prachwal @ 3.04.2009, 19:51:50 ) *
pomoże za to zmiana typu z decimal (3,3) an decimal(4,3) lub decimal(3,2)

nie wiem dlaczego ale jak tak zmienisz to ma ochotę działać

przykład:

select convert(decimal(4,3),cast(3.303 as float))


Na to wygląda, że pierwsza wartość określa całkowitą długość liczby, a druga tylko jej część dziesiętną, a ja cały czas myślałem, że pierwsza ilość znaków przed przecinkiem a druga za nim. 


W każdym bądź razie wielkie dzięki, gdyż DZIAŁA:)

Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 3.05.2025 - 04:45