MS Access - wszystko już działa, do zamknięcia

0

Witajcie ponownie. Otóż mam kolejny ostatnio, lecz już mam nadzieję ostatni problem. Otóż w moim programie windows form, połączonym z bazą danych w Accessie 2010 próbuje wyświetlić informacje z pewnego przedziału czasowego. W bazie, w jednej z tabel mam kolumnę o nazwie DataOdbioru. Gdy mam takie zapytanie:

 "SELECT Dostarczone as zmienna FROM Przesylki WHERE DataOdbioru < date()"

Wszystko ładnie działa. Ale nie na tym mi zależy, użytkownik przecież ma sam wybierać daty. I gdy już mam tak:

 "SELECT Dostarczone as zmienna FROM Przesylki WHERE DataOdbioru < '"+dateTimePicker1.Value+"' "

Przestaje działać, informując o nieprawidłowym typie danej w zapytaniu. Nie rozumiem tego, skoro dateTimePicker podaję właśnie typ date.
Ostatecznie chodziło by mi o coś w stylu:

  "SELECT Dostarczone as zmienna FROM Przesylki WHERE DataOdbioru between '"+dateTimePicker1.Value+"' and '"+dateTimePicker2.Value+"' "

Czy wie ktoś może jak ten select powinien wyglądać by to poprawnie działało? Próbowałem konwertować do stringa, DateTime, daty krótkiej, długiej i nic.

0
 "SELECT Dostarczone as zmienna FROM Przesylki WHERE DataOdbioru between #"+dateTimePicker1.Value.ToString("MM/dd/yyyy")+"# and #"+dateTimePicker2.Value.ToString("MM/dd/yyyy")+"# "
0

może zacząć brać pod uwagę uwagi innych Masz odpowiedź

0

Panczo - nie działa. Ze znakiem # wywala mi błąd syntax error, gdy zamienię go na ', wywala znów błąd na temat złego typu danych.

abrakadaber - chyba spróbuje zastosować w tym przypadku. Pierwszy raz robię taki projekt i wpisywałem to co znalazłem w poradniku na youtube. Ale reszty raczej nie będę zmieniał, projekt mam do oddania w ten weekend, a znając życie coś się pewnie by przestało działać, a oprócz tego jednego reszta działa już tak jak chcę. Ale w przyszłych projektach z pewnością zastosuję się tamtych porad.

0

Skoro masz syntax error to pokaż zapytanie jakie uruchamiasz...

0

Dokładnie przy tym zapytaniu co mi wcześniej podałeś Panczo.

 "SELECT Dostarczone as zmienna FROM Przesylki WHERE DataOdbioru between #"+dateTimePicker1.Value.ToString("MM/dd/yyyy")+"# and #"+dateTimePicker2.Value.ToString("MM/dd/yyyy")+"# "

Ma problemy z tymi #.

Co śmieszne stworzyłem takie zapytanie:

 "SELECT Dostarczone as zmienna FROM Przesylki WHERE DataOdbioru like '" + dateTimePicker1.Value.Date.ToShortDateString() + "'"

I działa. Kiedy jednak próbuje dodać between... and, lub po prostu zamiast like dać < to przestaję działać. Już kompletnie nic nie rozumiem.

0

Podałeś JAK tworzysz zapytanie, a nie JAKIE przesyłasz do bazy to różnica...

0

Dobra już ogarnąłem i wszystko działa jak należy. Ale też by nie tworzyć kolejnego tematu mam jeszcze pytanie związane z czym innym - potrzebuję pobrać wartość z bazy danych accessa i zamienić ja na decimal O ile pobranie to nie jest problem, tak później mam schodki przy próbie zmiany typu danej. Niestety Visual cały czas wyrzuca mi informację "Nieprawidłowy format ciągu wejściowego.". Próbowałem już wielu rzeczy - od zwykłego parse i convert, przez replace przecinka z kropką, po cultureinfo, niestety nic z tego nie pomaga i cały czas wyskakuje ta informacja o formacie ciągu.

0
 data = "SELECT Pensja as zmienna FROM Pracownicy";
            OleDbCommand com5 = new OleDbCommand(data, connection);
            DateTime date = new DateTime();
            DateTime date2 = new DateTime();
            date = dateTimePicker1.Value;
            date2 = dateTimePicker2.Value;
            TimeSpan wynik = date2 - date;
            MessageBox.Show(wynik.ToString());
            int a = Convert.ToInt32(wynik.Days.ToString());            
            if (a < 30m)
            {
                a = 1;
            }
            else
            {
                a /= 30;
            }            
            czytaj = com5.ExecuteReader();
            while(czytaj.Read())
            {                
                odczyt = czytaj["zmienna"].ToString();               
                pensja = Convert.ToDecimal(odczyt);                           
                koszty += pensja * a;                
            }
            koszty_text.Text = koszty.ToString();

Nie wiem czy potrzebne, ale odczyt jest typu string, pensja i koszty są typu decimal.

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