ďťż
 
Jak to robicie w MSSQLu? ďťż
 
Jak to robicie w MSSQLu?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Jak to robicie w MSSQLu?



Norbert - 07-07-2006 02:22
Jak to robicie w MSSQLu?
  Witam Grupowiczow,

Mam aplikacje ktorej SQL'owy engine byl rozwijany w PostgreSQL. Jestem z
tego zadowolony.
Muszę jednak stworzyc wersje tej aplikacji dzialajaca w MS SQLu.

W sumie nie jest tak trudno, ale zacialem sie (z logicznego punktu widzenia)
na jednej rzeczy.
W MS SQLu nie ma parametru LIMIT, OFFSET.

"Odpowiednikiem" tego parametru jest TOP, niestety nie ma offsetu.
Teoretycznie mozna sobie z tym poradzic, ale kosztem wydajnosci.

W zwiazku z tym mam pytanie do praktykow. W jaki sposob przygotowujecie dane
typu data-grid stronicowane np. co 10 rekordów. W postgresie i kilku innych
bazach wystarczyloby "select * from tabela LIMIT 10,0" a nastepnie "select *
from tabela LIMIT 10,10", itd. Jak zacznę kombinowac z MS SQL to jesli
korzystam z TOP i subselecta wyrzucajacego mi część danych, to powstają
problemy wydajnościowe. Tak samo jesli zrobie "select top 10 * from tabela",
a nastepnie "select top 20 * from tabela" i pokaze dopiero od 11 rekordu to
im dalej sie przemieszczam po tabeli tym wolniej to dziala.

Jak Wy to robicie?

Z gory dzieki za pomoc

Pozdrawiam

Norbert





Grzegorz Danowski - 07-07-2006 02:22

  Użytkownik "Norbert" <norbertn_at_post.pl.i.dont.like.sp_a_m> napisał w
wiadomości news:44aceee6$1@news.home.net.pl...
> Witam Grupowiczow,
>
> Mam aplikacje ktorej SQL'owy engine byl rozwijany w PostgreSQL. Jestem z
> tego zadowolony.
> Muszę jednak stworzyc wersje tej aplikacji dzialajaca w MS SQLu.
>
> W sumie nie jest tak trudno, ale zacialem sie (z logicznego punktu
> widzenia) na jednej rzeczy.
> W MS SQLu nie ma parametru LIMIT, OFFSET.
>
> "Odpowiednikiem" tego parametru jest TOP, niestety nie ma offsetu.
> Teoretycznie mozna sobie z tym poradzic, ale kosztem wydajnosci.
>

Której wersji SQL Servera używasz? Jeśli 2005, to będzie łatwiej.
G.




g0mez - 07-07-2006 02:22

  Użytkownik "Norbert" <norbertn_at_post.pl.i.dont.like.sp_a_m> napisał w
wiadomości news:44aceee6$1@news.home.net.pl...
> Witam Grupowiczow,
> Mam aplikacje ktorej SQL'owy engine byl rozwijany w PostgreSQL. Jestem z
> tego zadowolony.
> Muszę jednak stworzyc wersje tej aplikacji dzialajaca w MS SQLu.
> W sumie nie jest tak trudno, ale zacialem sie (z logicznego punktu
> widzenia) na jednej rzeczy.
> W MS SQLu nie ma parametru LIMIT, OFFSET.
> "Odpowiednikiem" tego parametru jest TOP, niestety nie ma offsetu.
> Teoretycznie mozna sobie z tym poradzic, ale kosztem wydajnosci.
> W zwiazku z tym mam pytanie do praktykow. W jaki sposob przygotowujecie
> dane typu data-grid stronicowane np. co 10 rekordów. W postgresie i
> kilku innych bazach wystarczyloby "select * from tabela LIMIT 10,0" a
> nastepnie "select * from tabela LIMIT 10,10", itd. Jak zacznę
> kombinowac z MS SQL to jesli korzystam z TOP i subselecta wyrzucajacego
> mi część danych, to powstają problemy wydajnościowe. Tak samo jesli
> zrobie "select top 10 * from tabela", a nastepnie "select top 20 * from
> tabela" i pokaze dopiero od 11 rekordu to im dalej sie przemieszczam
> po tabeli tym wolniej to dziala. Jak Wy to robicie?
> Z gory dzieki za pomoc
> Pozdrawiam
> Norbert

Jak piszesz za pomocą ADO to można iść w zupełnie inną stronę. Otwierasz
zapytanie (Recordset) bez używania top czy offset, a jedynie klucz stawiasz
po stronie serwera. Określasz wcześniej rozmiar strony (PageSize) i
poruszasz się między stronami za pomocą AbsolutePage, pobierając dane dla
określonej liczby rekordów. Możesz też używać AbsolutePosition, aby
przemieszczać się pomiędzy poszczególnymi rekordami.
Jeśli używasz BDS to tam stron nie ma ale za jest RecNo, który ustawia
AbsolutePosition (tak mi się wydaje, że on to robi). Ja używam tego tak:
otwieram recordset, przechodzę do pierwszego wyświetlanego rekordu, pobieram
dane do bufora aż do ostatniego wyświetlanego, na koniec wyświetlam dane
buforowane. Przesuwanie okna podglądu danych powoduje uzupełnianie bufora.
Buforem jest lista o rozmiarze RecordCount zawierająca instancje klas
reprezentujących rekord danych.




kubik - 08-07-2006 00:13

 
Norbert napisał(a):
> W sumie nie jest tak trudno, ale zacialem sie (z logicznego punktu widzenia)
> na jednej rzeczy.
> W MS SQLu nie ma parametru LIMIT, OFFSET.
Polecam artykuł: http://www.codeproject.com/aspnet/PagingLarge.asp

pozdrawiam
Adam Kubiczek





Norbert - 11-07-2006 00:09

 
"Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> wrote in message
news:e8is4s$bor$1@inews.gazeta.pl...

> Której wersji SQL Servera używasz? Jeśli 2005, to będzie łatwiej.
> G.

Używam MS SQL 2000.

Norbert




Norbert - 11-07-2006 00:09

  > W MS SQLu nie ma parametru LIMIT, OFFSET.
Polecam artykuł: http://www.codeproject.com/aspnet/PagingLarge.asp

Dzięki

Norbert
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Skrypt listowania plików Kompresja lepsza niz w PS program do duzej ilosci zdjec =?ISO-8859-2?Q?kr=F3tkie_pytanie_o_d=B3ugie_przetwarzanie_(PS )?= Bezpieczne korzystanie z tabeli przez kilku użytkowników Konwersja bazy PARADOX do CSV z LATIN2 na UTF8 SQL Server 2000 dobry edytor oczy dziewczyny - gdzie free foto? Trigger ... pytanie do prawdziwych wyjadaczy
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • latwa-kasiora.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com