Fórum Root.cz

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

Název: SQL algoritmus v Delphi
Přispěvatel: thcom 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

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 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á.
Název: Re:rada s algoritmem
Přispěvatel: Filip Jirsák 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.
Název: Re:rada s algoritmem
Přispěvatel: JardaP . 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.
Název: Re:rada s algoritmem
Přispěvatel: ehmmm 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
Název: Re:SQL algoritmus v Delphi
Přispěvatel: thcom kdy 31. 10. 2016, 23:35:40
prikladam aktualni stav z meho projektu:

SQL zadane v IDE delphi primo v komponente Query

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

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

diky moc !!