Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Delphi7][Paradox] Sortowanie bazy danych Paradox

prymas76 18 Mar 2012 11:21 1505 9
  • #1 18 Mar 2012 11:21
    prymas76
    Poziom 8  

    Witam.
    Mam małe pytanie o sortowanie danych w tabelach Paradox. Czy możliwe jet sortowanie według jednych pól rosnąco a według innych malejąco jednocześnie? Nie wykorzystując przy tym zapytań SQL.
    Np. Mamy w bazie klika takich samych towarów od kilku dostawców, od każdego dostawcy każda partia w innej cenie. Sortuje według pola towar i dostawca rosnąco a dodatkowo według pola cena malejąco.

    0 9
  • #3 18 Mar 2012 15:07
    prymas76
    Poziom 8  

    Dżyszla napisał:
    A w jaki sposób sortujesz obecnie?


    Mam stworzone trzy indeksy - jeden dla pola autoincrement aby wyświetlał nieposortowane i dwa dla pola z nazwą przedmiotu - jeden malejący a drugi rosnący. W programie zmieniam tylko bieżący indeks. Tworzyłem je w bde. Chciałbym tworzyć je dynamicznie tzn. w trakcie pracy programu w zależności jakie Kolumny i jaki rodzaj sortowania wybierze użytkownik. Wybór kolumn i wybór rodzaju sortowania już mam. Teraz myślę nad realizacją tworzenia indeksów w programie.

    0
  • #4 18 Mar 2012 15:28
    Dżyszla
    Poziom 42  

    Jesteś pewny że tego potrzebujesz? Utworzenie indeksu tylko na potrzeby wyświetlenia posortowanych wyników w sposób rzadko wykorzystywany jest bezsensowne, bardziej czasochłonne i z pewnością nie przyniesie żadnych pozytywnych rezultatów. Powinieneś tak zaprojektować bazę, aby znaleźć kompromis pomiędzy danymi, indeksami oraz sposobem wykorzystania.

    0
  • #5 18 Mar 2012 15:43
    prymas76
    Poziom 8  

    Dżyszla napisał:
    Jesteś pewny że tego potrzebujesz? Utworzenie indeksu tylko na potrzeby wyświetlenia posortowanych wyników w sposób rzadko wykorzystywany jest bezsensowne, bardziej czasochłonne i z pewnością nie przyniesie żadnych pozytywnych rezultatów. Powinieneś tak zaprojektować bazę, aby znaleźć kompromis pomiędzy danymi, indeksami oraz sposobem wykorzystania.


    Danych nie będzie aż tak dużo (przewiduję max 100 pozycji, a pól raptem 6. Zastanawiam sie cały czas jak to najkorzystniej zrobić ale jestem w tym temacie początkujący.

    0
  • #7 18 Mar 2012 21:15
    prymas76
    Poziom 8  

    Dżyszla napisał:
    Załóż tylko te, które będą najczęściej wykorzystywane. Resztę pozostaw nieindeksowane.


    Ok. Rozsądne. Jednakże moje pytanie nadal pozostaje bez odpowiedzi, a skoro zapytałem to chciałbym wiedzieć bo wiedza zawsze się przyda :) Czy możliwe jest sortowanie "mieszane" czyli malejąco-rosnące (bądź rosnąco-malejące :) ) dla baz Paradoxa?

    0
  • #8 18 Mar 2012 21:58
    Dżyszla
    Poziom 42  

    Dla baz nie wykorzystując SQL - to stoi w sprzeczności z samym sobą. To dla baz czy nie dla baz? Bo jak dla baz, to ORDER BY kolumna1 DESC, kolumna2 ASC... Jak nie dla baz, to część komponentów np ma wbudowane mechanizmy sortowania z callbackowaną funkcją zdarzenia OnCompare, gdzie bez problemu można to osiągnąć. Jeśli nie - można samemu napisać stosowną funkcję sortującą. Algorytm sortowania i metoda sortowania w żaden sposób w żadnym przypadku się nie wykluczają nawzajem i nawet porządek np q, w, e, r, t, y ... może być uznany za ciąg posortowany

    0
  • #9 19 Mar 2012 10:11
    arnoldziq
    Moderator Programowanie

    Słuchajcie. Skoro ma być maksymalnie 100 rekordów, to czytaj cały plik, wstaw go do dowolnej listy a potem programowo robisz sortowanie, jakie ci się zamarzy.

    0
  • #10 13 Kwi 2012 17:10
    prymas76
    Poziom 8  

    arnoldziq napisał:
    Słuchajcie. Skoro ma być maksymalnie 100 rekordów, to czytaj cały plik, wstaw go do dowolnej listy a potem programowo robisz sortowanie, jakie ci się zamarzy.

    Trochę zbyt skomplikowane - 6 kolumn po ponad 100 rekordów, do tego dochodzą kombinacje wyborów kolumn. O wiele prościej wykorzystać SQL


    Dżyszla napisał:
    Dla baz nie wykorzystując SQL - to stoi w sprzeczności z samym sobą. To dla baz czy nie dla baz? Bo jak dla baz, to ORDER BY kolumna1 DESC, kolumna2 ASC... Jak nie dla baz, to część komponentów np ma wbudowane mechanizmy sortowania z callbackowaną funkcją zdarzenia OnCompare, gdzie bez problemu można to osiągnąć. Jeśli nie - można samemu napisać stosowną funkcję sortującą. Algorytm sortowania i metoda sortowania w żaden sposób w żadnym przypadku się nie wykluczają nawzajem i nawet porządek np q, w, e, r, t, y ... może być uznany za ciąg posortowany

    Wykorzystałem SQL, zamiast komponentu TTable użyłem TQuery. Sortuje ok, tak jak chcę. Pojawił się jednak kolejny problem - w przypadku wyświetlania posortowanych wyników nie mogę edytować danych w DBGridzie :( Jak to uzyskać?

    0