Poszukuje proste rozwiązanie do tworzenia zapytań SQL

Poszukuje proste rozwiązanie do tworzenia zapytań SQL
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
0

Witam.
Potrzebuje pomocy w kwestii generowania zapytań. Mam napisaną aplikację do wysyłania powiadomień do klientów z systemu Comarch Optima. Mój program filtruje odpowiednie dane za pomocą zapytań SQL do tabeli odpowiadającej za stworzone dokumenty w Optimie.
Potrzebuje teraz stworzyć do tego interfejs ale na tyle "idiotoodporny" żeby (powiedzmy) prawie każdy mógł stworzyć sobie takie "zapytanie".
Myślałem nad czymś podobnym do filtrów na poczcie o2 (załącznik)
Wybieramy kolumnę -> opcje -> wartość

Do dyspozycji mam DevExpress.

0

Jeżeli to aplikacja Winformsowa to masz w Devexpressie kontrolkę do diagramów.

AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
0

Graficzne "łączenia" odpadają. Ma być proste, a uniwersalne. Nie mogę dać tylko kilku standardowych opcji typu data wystawienia dokumentu, typ dokumentu (faktura, WZ, korekta). Musi to być bardziej obszerne np.: zagraniczny kontrahent, kwota na dokumencie większa niż. Im więcej użytkowników, tym więcej możliwości, więc muszę być przygotowany na najgorsze :D
Boje się, że będę musiał przysiąść do tego i zwyczajnie każdą kolumnę w tabeli nazwać i pozwolić na dowolną opcję na niej, typu: mniejsze, większe, zawiera, zaczyna od, równe, podziel, odejmij itp itd.
Wiecie o co chodzi :D

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

wiemy. Najpierw odpowiedz na jedno bardzo ważne pytanie - użytkownicy mogą pytać tylko jedną tabelę (lub widok, który im zrobisz) czy kilka? Bo jak kilka to poza SQL albo graficzna budowa zapytań - przy kilku tabelach coś takiego jak dałeś w załączniku jest niewykonalne (a przynajmniej czas na napisanie tego będzie większy niż zysk)


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
AdamWox
Kilka tabel połączonych joinem. W teorii dwie - dokumentów i kontrahentów ale może dojść do tego tabela pozycji na dokumencie
abrakadaber
abrakadaber
chodzi o to czy user może wybrać z których (ilu) tabel chce dane. Bo jeśli tak to dochodzą warunki złączenia tych tabel (chociaż przy kilku tabelach można je próbować oprogramować "na sztywno")
JP
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Postów:1065
0

A może użyć filtrów z gridów. Tylko musialbys ppdpiac pod gridy jakies dane.

abrakadaber
abrakadaber
to chyba nie chodzi o to, żeby do gridów załadować miliony rekordów, żeby sobie user mógł wybrać z nich 10. Równie dobrze można to zrobić warunkami jak na screenie pytacza
JP
Nawet na pewno nie o to chodzi. Myślałem raczej o jakimś wykorzystaniu samego edytora filtrów przy zaladowanym np. jednym rekordzie i odczytaniu warunków filtra. Ale nawet nie wiem czy to jest możliwe. Trzeba by źródła pooglądać.
PA
Ale można dać tak luźny filtr, że zwróci "miliony", warto rozważyć jakiś sensowny TOP
JP
Nie. Ten filtr działa na danych załadowanych do grida.
AdamWox
Filtr odpada, za dużo danych żeby cokolwiek zrobić.
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

@AdamWox: nie odpowiadaj w komentarzach na główny temat!


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
AdamWox
Sory, nie mam czasu na czytanie regulaminu jak korzystać z forum ;)
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
0

Dla przykładu pokaże kilka zapytań napisanych przeze mnie ręcznie:
Faktura polska

Kopiuj
select tn.TrN_TrNID, tn.TrN_NumerPelny, tn.TrN_Bufor from CDN.TraNag tn
left join CDN.Kontrahenci k on tn.TrN_PodID = k.Knt_KntId
where (k.Knt_KrajISO like 'PL' or k.Knt_KrajISO like '') and tn.TrN_TypDokumentu = 302 and tn.TrN_Bufor = 1 and tn.TrN_Korekta = 0 and TrN_TrNID > 203662

Faktura zagraniczna różni się, wiadomo, tylko tym:

Kopiuj
where (k.Knt_KrajISO not like 'PL' and k.Knt_KrajISO not like '')

Korekta faktury

Kopiuj
tn.TrN_Korekta = 1 --korekta ilości
tn.TrN_Korekta = 2 --korekta wartości

WZ polskie

Kopiuj
where (k.Knt_KrajISO like 'PL' or k.Knt_KrajISO like '') and tn.TrN_TypDokumentu = 306

Dodatkowo mogą dojść do tego płatności. Powiadamia danego klienta mailem o niezapłaconym dokumencie:

Kopiuj
select tn.TrN_TrNID, tn.TrN_NumerPelny, tn.TrN_Bufor from CDN.TraNag tn
left join CDN.BnkZdarzenia bz on tn.TrN_TrNID = bz.BZd_DokumentID
where tn.TrN_TypDokumentu = 302 and tn.TrN_Korekta = 0 and tn.TrN_Bufor = 0
and bz.BZd_DokumentTyp = 1
and datediff(d, GETDATE(), bz.BZd_Termin) = 1 and bz.BZd_Rozliczono = 1 and bz.BZd_Rozliczono2 = 1

#doklejam tutaj to co wpisałem wcześniej nie tam gdzie trzeba
Teoretycznie mam dwa wyjścia: 1. Opisać każdą kolumnę tak żeby użytkownik wiedział czego się tyczy, 2. Zrobić legendę gdzieś pod guzikiem za jakie dane konkretna kolumna odpowiada. Co za tym idzie? Muszę sprawdzać typ kolumny, aby dobrać odpowiednią opcję np.: string - equals, contains, starting with, datetime - equals, more than, less than itp itd, dalszy ciąg już znacie. Mamy sporo klientów, którzy korzystają z Optimy. Powiedzmy, że połowa z nich z tego skorzysta. Jest to wartę czasu?

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0
  1. to LIKE czy NOT LIKE to jakaś masakra. Nie używaj LIKE jeśli nie jest to niezbędnie konieczne.
  2. Wg mnie jakbyś zamiast się zastanawiać po prostu wziął się za to to już byś miał to zrobione. Wcale nie trzeba do tego "nazywać" ładnie kolumn ani dawać userom dostęp do SQLa. Proste okienko z możliwymi warunkami
  • dla dat do wybrania data od - do z możliwością niewypełnienia którejś,
  • zamiast warunków typu k.Knt_KrajISO NOT LIKE 'PL' AND k.Knt_KrajISO NOT LIKE '' to prostą listę wyboru polskie/zagraniczne a warunki sam sobie wstawisz na podstawie wyboru
  • czy zapłacone
  • czy klient powiadomiony
    itd., itp. A jak userom będzie mało to dołożysz kolejne pola, które będą mogli uzupełnić. Także dodanie czegoś na kształt pole wybór_mniejsze/większe/równe edit_wartość to parę linijek kodu

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
AdamWox
To co proponujesz, owszem, było by dawno zrobione. Ja szukam rozwiązania uniwersalnego, tak żeby można było filtrować po czym się żywnie podoba. Twoja propozycja sprowadza się do totalnych podstaw, które nie wchodzą w grę ;)
abrakadaber
abrakadaber
NIE ODPOWIADAJ W KOMENTARZACH!
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

uniwersalne rozwiązanie już ktoś wymyślił - nazywa się SQL i możesz w nim zrobić praktycznie wszystko. Możesz nazwy tabel i kolumn opakować w coś ładnego i mówiącego cokolwiek przeciętnemu Kowalskiemu. Możesz zamiast or pisać lub a zamiast and i. Możesz zrobić, że zamiast pisania SQLa będzie go można układać graficznie. Ale to nadal jest SQL, nadal trzeba znać powiązania między tabelami, nadal trzeba wiedzieć czemu np. TrN_TrNID > 203662 a nie 123456. W końcu możesz to wszystko zrobić, siedzieć nad tym tydzień, miesiąc, rok. A na koniec przyjdzie user i powie, że on chce żeby mógł sobie wybrać czy faktura PL czy zagraniczna i na jaką datę bo to co ma to skomplikowane i myśleć trzeba.

Ja wiem, że Ty jako programista chciałbyś dać userom jak największe możliwości - też tak kiedyś miałem :). Teraz robię tak, że tylko to co jest zebrane w nowych wymaganiach plus ew. jeśli jestem pewny na 100% że coś będzie jako kolejny request a prościej mi to zrobić od razu. I wszyscy są szczęśliwi :).

BTW mam tylko jednego klienta (w sensie jednego człowieka z zakładów, które obsługuje firma, w której pracuję), który by się czymś takim zapewne ucieszył. Ale jest to człowiek, który pilnuje swojego biznesu i wie dokładnie czego mu trzeba. On jako jedyny ma w programie dostęp do pisania zapytań (chociaż często jako request przychodzi prośba o gotowego SQLa a on sobie potem warunki tylko zmienia) a wyniki sobie eksportuje do excela i tam je dalej mieli.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
JP
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Postów:1065
0
AdamWox napisał(a):

#doklejam tutaj to co wpisałem wcześniej nie tam gdzie trzeba
Teoretycznie mam dwa wyjścia: 1. Opisać każdą kolumnę tak żeby użytkownik wiedział czego się tyczy, 2. Zrobić legendę gdzieś pod guzikiem za jakie dane konkretna kolumna odpowiada. Co za tym idzie? Muszę sprawdzać typ kolumny, aby dobrać odpowiednią opcję np.: string - equals, contains, starting with, datetime - equals, more than, less than itp itd, dalszy ciąg już znacie. Mamy sporo klientów, którzy korzystają z Optimy. Powiedzmy, że połowa z nich z tego skorzysta. Jest to wartę czasu?

Jak ze 20 klientów zapłaci za to po 1500 to może się opłacić. Tylko trzeba by te tabele zamienić na obiekty z typowaniem, żeby odpowiednie operatory i edytory wstawić dla odpowiednich typów. Czyli trzeba przygotować model obiektowy dla tych danych i potem to już łatwizna.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)