Tvorba SQL dotazu z PRG   otázka

VB.NET

Zdravim,

potřeboval bych vedět jestli je možné nasledujicí ulohu udělat efektivnejsi.

Mam formular, který pomoci kriterii filtruje data( to je celkem jednoduche), ale ja dopředu nikdy nevim, které kriteria si uzivatel zvoly. Takže nemohu mít pevný SQL dotaz a jen dosazovat podmínky WHERE.

S součastnosti to dělám tak, že podle toho, které kriteria vyberu jsou vyplněné, tak doplnuji SQL. Kriterii je opravdu moc 15 tak je to velmi složite a nefunguje to vyzdy na 100%. Neexistuje elegantnejsi reseni a nebo jestli nekdo z vas neresil podobny pripad.

Diky Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na tomto řešení nevidím nic špatného. Jen bych doporučil, aby se dotaz skládal až těsně před odesláním na SQL Server a ne při klepnutí na ovládací prvky na kterých závisí část dotazu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ja bych to resil tak, ze SQL dotaz bych si pripravil napriklad pri load formulare v nejake funkci. Sestavil bych ho s parametry, ktere by byly nastaveny na NULL.

Pri kliknuti na ovladaci prvek bych do toho parametru priradil spravnou hodnotu a pri kliknuti na tlacitko bych zkontroloval, zda bylo neco vybrano a prikaz bych vykonal...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, vřele doporučuji napsat si na to nějakou třídu CommandBuilder, která bude mít například seznam sloupců, které chcete vybírat, pak třeba seznam podmínek, podle kterých chcete záznamy filtrovat atd.

Při konstrukci samotného SQL si pak vytvoříte novou instanci této třídy, do jejího seznamu Where naflákáte všechny podmínky, do seznamu Columns sloupce, které chcete vybrat (nebo jen hvězdičku, aby se vybraly všechny), a pak zavoláte nějakou metodu, která seznamy vezme, do SQL je dosadí na patříčná místa, a nakonec vyplivne hotový SQL příkaz.

Výhodou je, že řešení není závislé na počtu podmínek a můžete jej stejným způsobem použít v libovolném počtu formulářů. Když to napíšete správně, bude to fungovat na 100%.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj Tome,

Tvuj napad na reseni se me velmi zamlouva, ale moje znalosti Visual Basicu nejsou tak daleko. Mohl bys me poradit jak takou tridu udelat. Nechci, aby jsi cely kod napsal, ale chtel bych je systemove poradit co precist a kde se podivat. To ze to sice napises je hezke, ale pro me "prdel".

Diky za pomoc

Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

http://www.vbnet.cz/clanek--107-vb_net_o...

Bohužel tam není všechno, věci jako dědičnost mám rozepsané, ale ještě ne úplně hotové.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tak jse precetl tvuj clanek, celkem jsem snad pochopil o co jde, ale nevim co delám špatně.

vytvořil jsem novou tridu v již stavajicím projektu a kdyz jej chci pouzit "TEST" tak mě to píše hlášku

Odkaz na objekt není nastaven na instanci objektu.

 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        Dim podminka1 As fce_utl_trida
        Dim podminka2 As fce_utl_trida
        podminka1.nazev_pole = "test"
        podminka1.hodnota_podminky = "123"
        podminka2.nazev_pole = "testovaci"
        podminka2.hodnota_podminky = "456"

    End Sub

kde dělám chybu?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, vy si musíte vytvořit instanci té třídy. Napsáním

Dim podminka1 As fce_utl_trida

jen vytváříte proměnnou, do které můžete uložit nějaký objekt tohoto typu. Abyste vytvořil objekt, musíte za As přidat ještě slovo New. Tím vytvoříte instanci jeden konkrétní (exemplář).

Ale pak by to chtělo ještě udělat nějakou metodu na spojení těchto všech podmínek a vygenerování celého výrazu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud použijet linq, tak nemusíte skládat SQL dotaz jako text ale můžete se rovnou odkazovat na obsah ovládacích prvků, které můžete nasytit seznamem obsažených hodnot. Když před zpracováním dotazu defaultně nastavíte podmínku pro případný prázdný ovládací prvek tak, aby vybral všechny záznamy, tak si tím ušetříte spoustu práce.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém je s tom, že potřebuji poskladat SQL příkaz tak, aby obsahoval podmínky podle uživatele. Potom filtrovat data ve výběru a tento výběr bude vložen to tabulky Export dat. Zobrazovaní všech dat je velmi časově náročně (19000 řádku a každý den jsou další).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback