dynamiczne pola tekstowe i zapytania do bazy

0

Robie maly programik bazodanowy. Zatrzymalem sie na module wyszukiwania rekordow z baz danych. Mam nastepujacy problem:

  1. Baza zawiera niewiadoma ilosc kolumn (moze byc 20 moze byc 120)
  2. Szukanie ma odbywac sie po roznych kolumnach przy rozych kryteriach

No i teraz tak. Zrobilem sobie listview z lista wszystkich kolumn. W drugim listview mam wybrane kolumny, ktore potrzebne sa do raportu.

  • Jak mam skonstruowac SELECTa do bazy? (jak dynamicznie generowac SELECT, bo nie wiem ile parapetrow bedzie posiadal i jakie kryteria - OR/AND itp.)
  • jak wygenerowac pola tekstowe i comboboxy np. zeby wybrac tylko jedno miasto? (dynamicznie, bo tez nie wiem ile ich bedzie)
  • jak dynamicznie wygenerowac kryteria (zawiera, wieksze od, mniejsze od, rozne itp.)

Jak to wszystko polaczyc w calosc. Skonczyly mi sie pomysly i bardzo prosze o pomoc.

z gory dziekuje za odpowiedz.

0

W takiej sytuacji czeka cię klejenie stringów. Jeśli to projekt na uczelnię to można darować sobie weryfikację czy ktoś nie chce ci zrobić psikusa i zabawić się z sql injection. Ale jeśli to projekt gdzieś do pracy, to wprowadzone przez użytkownika wartości tekstowe należy zwalidować, czy nie zawierają jakiegoś niebezpiecznego kodu.
Wszystko zależy od tego jak chcesz umożliwić tworzenie warunków. Bo teoretycznie może być jeden textbox na cały warunek, mogą być textboxy na każdy warunek osobne i łączone za pomocą and/or. Jeśli chcesz dać możliwość jakby wyklikiwania warunków, to sprawa się trochę komplikuje. Wtedy warunek składa się z wybory łącznika and/or, kolumny do warunku, operatora (<,>,=,like,...) oraz wartości. Ewentualnie można rozważyć czy chcemy wprowadzać jeszcze nawiasy, do grupowania warunków.
Z comboboxami jest kłopot, bo musisz jakoś odkryć, że wartości w danej kolumnie pochodzą z jakiegoś słownika i umieć pobrać ten słownik i załadować do combobox.
Kryteria mogą być generowane w zależności od typu wartości w kolumnie, dla string wystarczy =,<>,like, a dla int <,<=,=,=>,>,<>.

Zakładam że to projekt uczelniany i pomijam różne kwestie bezpieczeństwa i mega zabezpieczanie się przed głupotą userów oraz że rozwiązanie ma być generyczne, czyli obsłużyć raport z dowolnej tabeli/tabel.
Z tabel (widoków) systemowych możesz wybrać metadane, na podstawie których będziesz generował odpowiednie elementy do warunków. Nie napisałeś z jakiej bazy danych będziesz korzystał , więc przyjmę że MS SQL Server. Masz sys.objects, sys.systables, sys.columns, sys.foreign_key_columns, sys.index_columns, generalnie zobacz tu http://msdn.microsoft.com/en-us/library/ms189783.aspx Inne bazy danych również posiadają takie systemowe tabele/widoki, z których możesz pobrać takie informacje. Na podstawie kluczy głównych, obcych, typów kolumn możesz spróbować generować odpowiednie elementy do definiowania warunków.
Warto zrobić sobie kontrolki do obsługi warunku dla kolumny int, (n)varchar, decimal, datetime, ... i generować odpowiednią kontrolkę w momencie wyboru kolumny. Kontrolka obsłuży walidację wartości oraz wygeneruje listę możliwych do wyboru operatorów.

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