SQL algoritmus v Delphi

thcom

  • ***
  • 149
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
SQL algoritmus v Delphi
« kdy: 31. 10. 2016, 20:39:25 »
Ahoj, snazim se tu nacist sql dotazy ze souboru .dfm (textova definice formularu pro delphi)

format zjednodusene vypada takto

Kód: [Vybrat]
SQL = 'SELECT castka, pomer, typ'
'FROM tabulka_osoby  WHERE cast'
'ka = 1 ORDER BY pomer DESC;'

pdle me je to navrzene nestastne, protoze kdyz sql slepite bez mezer muzete se dostat k chybne konstrukci typFROM a pokud s mezerami ziskate zase WHERE cast ka

asi neexistuje jina moznost nez to parsovat a kotnrolovat klicova slova SQL a platne fieldy z danych tabulek

nenapada nekoho jina finta

diky TH
« Poslední změna: 31. 10. 2016, 22:15:23 od Petr Krčmář »


Martin Dráb

Re:rada s algoritmem
« Odpověď #1 kdy: 31. 10. 2016, 21:03:47 »
Ty SQL dotazy jsou řetězcová hodnota nějaké položky na formuláři?

Přijde mi nejjednodušší to parsovat. Pokud víte, jaké možné dotazy se tam budou vyskytovat, bude navíc ta gramatika dosti jednoduchá.

Re:rada s algoritmem
« Odpověď #2 kdy: 31. 10. 2016, 21:06:26 »
Pochybuju, že jeto tam uložené opravdu takhle, protože to by to stejným způsobem musely parsovat i Delphi při běhu toho programu. Což navzdory svému názvu určitě nedělaly. Takže moje doporučení je podívat se na ten formát znovu a lépe.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:rada s algoritmem
« Odpověď #3 kdy: 31. 10. 2016, 21:13:59 »
Nemuzete predpokladat, ze pridate mezeru vzdy za prvni radek a za druhy nikoliv? Nebo nelze predpokladat, ze prihodite mezeru pred kazdy radek, pokud zacina slovem s velkymi pismeny, ovsem s vyjimkou prvniho?

Videl jste zdrojak algoritmu, ktery ta data takto podivne porizuje? Mozna by z toho slo neco vykoukat.

BTW, by me zajimalo, kdo a hlavne proc to vymyslel prave takto.

ehmmm

Re:rada s algoritmem
« Odpověď #4 kdy: 31. 10. 2016, 21:21:32 »
Vyjimecne souhlasim s Filipem Jirsakem. Takhle divne Delphi zase nejsou.

Je zvlastni, ze nejaky "robsoft" to tam ma s mezerama:
http://stackoverflow.com/questions/2513483/is-there-a-tool-which-can-extract-all-sql-command-strings-from-delphi-form-files


thcom

  • ***
  • 149
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:SQL algoritmus v Delphi
« Odpověď #5 kdy: 31. 10. 2016, 23:35:40 »
prikladam aktualni stav z meho projektu:

SQL zadane v IDE delphi primo v komponente Query

Kód: [Vybrat]
SELECT
 objednavky_polozky.id,
 TRIM(CONCAT(suroviny.nazev, " ", IF(ISNULL(suroviny_rozliseni.nazev), "", suroviny_rozliseni.nazev ))) AS nazev,
 suroviny.mj_obj AS mj, pocet
FROM
 objednavky_polozky LEFT JOIN
  suroviny ON objednavky_polozky.suroviny_id = suroviny.id
   LEFT JOIN
     suroviny_rozliseni ON objednavky_polozky.suroviny_rozliseni_id = suroviny_rozliseni.id
WHERE
 objednavky_id = :par_objednavky_id
AND
( suroviny.nazev LIKE :par_search OR suroviny_rozliseni.nazev LIKE :par_search)
ORDER BY
 sortik
  DESC;


sekce z DFM souboru prislusna k danemu Query

Kód: [Vybrat]
    SQL.Strings = (
      'SELECT'
      ' objednavky_polozky.id, '
     
        ' TRIM(CONCAT(suroviny.nazev, " ", IF(ISNULL(suroviny_rozliseni.n' +
        'azev), "", suroviny_rozliseni.nazev ))) AS nazev, '
      ' suroviny.mj_obj AS mj, pocet'
      'FROM'
      ' objednavky_polozky LEFT JOIN '
      '  suroviny ON objednavky_polozky.suroviny_id = suroviny.id '
      '   LEFT JOIN '
     
        '     suroviny_rozliseni ON objednavky_polozky.suroviny_rozliseni' +
        '_id = suroviny_rozliseni.id'
      'WHERE'
      ' objednavky_id = :par_objednavky_id'
      'AND'
     
        '( suroviny.nazev LIKE :par_search OR suroviny_rozliseni.nazev LI' +
        'KE :par_search)'
      'ORDER BY'
      ' sortik '
      '  DESC;')
    Params = <


parametry jsem pro zkraceni vynechal

TH

Jenda

Re:SQL algoritmus v Delphi
« Odpověď #6 kdy: 31. 10. 2016, 23:41:27 »
Všimni si těch plusek na konci některých řádků. Znamenají "tohle slep bez mezer". Ostatní slepíš s mezerou.

ehmmm

Re:SQL algoritmus v Delphi
« Odpověď #7 kdy: 01. 11. 2016, 07:36:48 »
Podle toho prikladu bych to formuloval trochu jinak: Kdyz tam je na konci radku plus, tak radek jeste neskoncil. Pokud na konci plus neni, tak dalsi radek je novy radek. (Ze si pak misto konce radku da mezeru, je dalsi vec.)

Re:SQL algoritmus v Delphi
« Odpověď #8 kdy: 01. 11. 2016, 08:55:57 »
Jak píšou předřečníci, je to pole stringů, každá položka je jeden řádek (případně můžete konec řádku nahradit jiným bílým znakem), znak „+“ stringy spojí (tedy v poli je to výsledně jedna položka, tj. jeden řádek).

thcom

  • ***
  • 149
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:SQL algoritmus v Delphi
« Odpověď #9 kdy: 01. 11. 2016, 19:47:35 »
dekuji jsem kokes, ty plusy mi unikly

diky moc !!