Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: thcom 31. 10. 2016, 20:39:25

Název: SQL algoritmus v Delphi
Přispěvatel: thcom 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
Název: Re:rada s algoritmem
Přispěvatel: Martin Dráb 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á.
Název: Re:rada s algoritmem
Přispěvatel: Filip Jirsák 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.
Název: Re:rada s algoritmem
Přispěvatel: JardaP . 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.
Název: Re:rada s algoritmem
Přispěvatel: ehmmm 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
Název: Re:SQL algoritmus v Delphi
Přispěvatel: thcom 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
Název: Re:SQL algoritmus v Delphi
Přispěvatel: Jenda 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.
Název: Re:SQL algoritmus v Delphi
Přispěvatel: ehmmm 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.)
Název: Re:SQL algoritmus v Delphi
Přispěvatel: Filip Jirsák 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).
Název: Re:SQL algoritmus v Delphi
Přispěvatel: thcom 01. 11. 2016, 19:47:35
dekuji jsem kokes, ty plusy mi unikly

diky moc !!