Rekord w bazie danych - zamiana "," na "."

0

Mam taki problem.

W bazie danych mam zapisane liczby np. 3,4 (typ REAL). W programie chcę wyszukać dane rekordy do których pasują 2 parametry.

Zapytanie SQL wygląda tak:
SELECT toys FROM tabela WHERE cena1 ="' + ComboBox4.Text + '" AND cena2 ="' + ComboBox3.Text + '"');

Do ComboBox'ów juz wcześniej wczytuję wartości jakie można wybrać i są to liczby w formacie "3,40" - czyli z przecinkiem. Do zapytania SQL muszą trafić dane z kropką, inaczej nic nie znajdzie.

Jak to rozwiązać? Mam zamienić StrtoStr xD czy jest jakaś funkcja zmiany przecinka na kropkę? Czy mam tworzyć bazę danych zapisującą ceny w polach TEXT?

0

wartości liczbowe porównuje się z liczbami a nie z tekstem

0

Nie rozumiem.

Z bazy danych została wczytana wartość 2,4 do pola ComboBox. Później wybieram to 2,4 i następuje zapytanie do bazy z wykorzystaniem tej wartości jako parametru. Podaję go za pomocą ComboBox.Text. Mam wartości wczytać do zmiennych i w zapytaniu SQL podać zamiast ComboBox.Text np. x ?

3

czego nie rozumiesz? Twoje zapytanie końcowo wygląda tak

SELECT toys FROM tabela WHERE cena1 ="3,5" AND cena2 ="5,3"

czyli porównujesz pole numeryczne z wartością tekstową. Powinno wyglądać tak

SELECT toys FROM tabela WHERE cena1 = 3.5 AND cena2 = 5.3

a jeszcze lepiej zamiast brzydko składać zapytanie użyj parametrów

SELECT toys FROM tabela WHERE cena1 = :cena1 AND cena2 = :cena2

a potem w kodzie uzupełniaj parametry

Query.ParamByName('cena1').AsFloat := StrToFloat(ComboBox.Text);
Query.ParamByName('cena2').AsFloat := StrToFloat(InnyComboBox.Text);
0

Faktyczne, sprawdziłem w showmessage i podaje ze cena jest tekstem. Zrobiłem tak bo kopiowałem z przykładu. Teraz rozumiem.
Dzięki wielkie

0

Jednak nie wychodzi, bo jakoś mi zawsze pobiera daną typu string. Dodaje do listy liczbe z przecinkiem i potem nie wyszukuje w bazie danych. Dla StrToFloat wywala błąd. :(

SQLiteTabela := SQLiteBaza.GetTable('SELECT cena FROM tabela');
ComboBox4.Items.Add(SQLiteTabela.FieldByName['cena']);  // tak dodaje do listy wyboru w ComboBox

Na razie nie wiem co jest nie tak...

0

jeśli FloatToStr wywala błąd to najpierw wypadało by go PRZECZYTAĆ a potem zastanowić się dlaczego tekst, który próbujesz zmienić na liczbę nie jest poprawną liczbą. Być może powinna tam być kropka a nie przecinek lub na odwrót. Hm co by tu zrobić w takim razie? Może np. zamienić niepoprawny separator na poprawny. Jak to zrobić to już znajdź sam - najprościej w googlu i od razu mówię, że JEST. Możesz też zabłysnąć i "zgadnąć" jak się może nazywać funkcja zamieniająca coś w ciągu na coś innego :p

0
AnsiReplaceStr lub StringReplace

Kiedyś szukałem takiej funkcji i w końcu odpuściłem myśląc, że takie coś nie istnieje XD

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