Přejít na obsah


Fotka

SQL API


  • Pokud chcete vložit odpověď, přihlašte se
38 odpovědí na toto téma

#1 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 31 říjen 2010 - 20:26

Zas tu mám jeden špek, ale třeba potřebuju jenom nakopnout... (nemyslím do prd..e)

Potřebuji zapisovat do tabulky pomocí SQL API.

Používám toto:
db.ExecSQL('INSERT INTO some_table VALUES(xxx,xxx,xxx,xxx)');
Funguje to perfektně, ale mám s tím ten problém, že je to strašně pomalý. Zapisuje se řádek po řádku a když jich je i třeba jenom stovka, tak to trvá už přes 10 sekund.

Nedaří se mi zapsat více řádků najednou, např. takto:
db.ExecSQL('INSERT INTO some_table VALUES(1,1,1,1),(2,2,2,2),(3,3,3,3)');
našel jsem to v nějaký specifikaci MySQL, ale neprojde to.

Třeba na to jdu úplně blbě, ale potřebuji z jedné databáze (negeogetí) zapsat tabulku do databáze GG a ještě to je tabulka, která není podporovaná strukturou GEOGET_DB, potřebuju tam vytvořit tabulku, která tam není. Jiný jednoduchý způsob než přes ExecSQL jsem zatím neobjevil.

Neporadí mi někdo jak to udělat lépe než po jednom řádku?
(Omlouvám se, že vrtám do věcí, kterým moc nerozumím)

Díky.
  • 0

LG G3 + a:Drake


#2 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 31 říjen 2010 - 22:24

Tak blbej sem byl zase já :D Nakonec mi poradil LudekV. Myslel jsem, že je tam vždycky autocommit a ono stačí založit transakci, zavolat sekvenci dotazů a pak commit. Hned je to o něčem jiným :-)
  • 0

LG G3 + a:Drake


#3 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 01 listopad 2010 - 9:19

Autocommit tam prave je. Takze [po kazdem tom insertu se ti to commitovalo. A to zdrzuje, protoze SQlite pouzivam v tom nejbezpecnejsim rezimu, kdy se pri kazdem commitu i vyprazdnuji diskove cache, aby byla jistota, ze data jsou zapsana. Zavolani explicitni transakce zpusobi, ze pak commitnes vsechno najednou.
  • 0

#4 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 01 listopad 2010 - 12:08

Ano ano, tak nějak se to chová a je to asi pro mě ideální - blbuvzdorný :D Jenom sem si teď všiml, že mi to někde chodí rychle a někde pomalu, přitom to mám udělaný stejně, to ale musím ještě prověřit. Edit: Tak nevím proč to dělalo, ale po nějakých úpravách, které by na to však neměly mít vliv, už to nedělá a pracuje to dobře. Čili závada byla asi opět na mém přijímači :-)
  • 0

LG G3 + a:Drake


#5 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 24 leden 2011 - 15:22

Tak tu mám zase jeden špek.
Potřeboval bych pracovat s binárními daty a číst/zapisovat z/do databáze (pomocné, mimo geoget databázi).
Zkoušel jsem toto:
StringToFile(db.FieldAsBlobText(i), file);

To mi sice do souboru data uloží, ale jsou trochu v jiné podobě než jsou v databázi. Jedná se konkrétně o obrázky (mapové kachle pro PD)

Je nějaká možnost, pokud možno jednoduchá, jak s blob daty ve skriptu pracovat?
  • 0

LG G3 + a:Drake


#6 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 24 leden 2011 - 15:36

V cem se ta jina podoba lisi? protoze tohle by melo skutecne precist obsah tak jak lezi a bezi. Ostatne, s binarnim obsahem se v Geogetu pracuje rutinne. Tvuj postup je totiz v zasade spravny.
  • 0

#7 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 24 leden 2011 - 15:46

Když uložím obsah záznamu např. z SQLite Manageru, tak obsah začíná takto:
GIF89a  ÷     ˙˙˙ďďÚąÔ•ąÓ•¸Ň•ŇĐŃţúţúöúRNTVUXRRT223úúţLMQóöú@xyŁĹŽ°ĚFx ^‰«ŐáęăëńíňöQ`q}Ĺ×㦿Î)f…¸ËŐ…«ş{—ˇöúűúţţ‘´±É×Ö›˝©¤ÄĄúţúmnm¬Éžˇ­™öúó«Ę’Ą˛›¶Ö™±Î—ŞĆ’Ąµ–˛ŇŹŞÂ·Ńť´Ěš®Ć–Şľ–®ÂšŘÚÖ¶Ö’˛Î‘¶Ň–®Ć’˛Ę–®Â–Ą¸­·˘ÔŰ̉´Q¶Ň’şÖ–ľÚšĽŐ›łĆśŞş–~ˆqôűëşÖ’ľÚ–®ĹŤ˛Ę’¶Î–©ż‹¤¸ˆ®Â’˛Ć–ťŻ…“˘‰•x˝Í¦t{jćń×nsg¶Î’şŇ–Ă١¶Ę–ÉÜ«Şş‘®ľ–ĺóĐĆÎşÎŐĂîôĺ¶ĎŤşŇ’ľÖ–˛Ć‘˛Á™ľÖ’şÎ”¶Ę‘Ňᶸż«ŮćżÄ˵ď÷Ţôűĺęďŕ_`]µĘƒÍÓ˝ćę
.........

Když ho uložím skriptem, pak to vypadá takto:
䥇㡆愹ĀĀ÷  ďżżîżżó‹˛ąë¦•é—“íŠ¸íŠ•í‡ď«ľď«ľď«¶äą’ĺ™”ĺˇ•ĺ‰’ă‰”ăŚ˛ď«şäłľĺ…Ťď›łËşçˇ€ęŤąč»…ě˛°çˇ†ĺş ę®‰î‡•îŹŞď‡«ď‹­ŕ»¶č…‘ç… ě•˝îŹ—ëľ¦â§Žč•¦ě®¸č—•ëŞ«éť»ďšˇďŻşď»şé‡ľë†´íź‰éŻ–ę¦˝ě’¤ďŞĄď«ľćą­ę±­é»‰ę¶ˇďš™ďŹşěŞ«ę–’é®˛íš¶ë†™éźŽěšŞę–’éšµíŠ˛ęŞŹéƒ‚í†·ë’ťé«Śěš®ęŞ–éšľěŠ®đ¶«šíš¶ëŠ’é‡ŽíŠ¶ęş–é‹†ěŞ˛ęş–é›‚ë˘Ąę¶ęŠ·ô…‡Śĺ†´íŠ¶ëŞ’é›–ňż˘šéŻ•ěšłęŞśéšşčˇľď‘±îŻ»íšşëş’é›šě–®ëŠŤé‹Šěş¶ę¦–č®żë˘¤ęşˆé‹‚ěš˛é¶–č–ŻęŠ“čĄżç˘•ě¶˝ç’¦ć©»ď‡¦ć»—ćťłěş¶ëŞ’é›’ň€şˇé›Šń‚š«é†şëş®î––íƒłě»†ěşşěŹ•ď“®ë›Ąč·ŹíŠşëş’é›–ěš˛ëŠ‘é§íšľëŞ’é“ŽěŞ¶íŠ‘ë›ˇëľ¸ńşż¦ěŻ„îľµóŤż´î«ĄîƒŻćźë•ťčŹŠíŹŤîš˝ôŠŻźî“…ěł«íź’ëż‚ëƒƒćĄ¨î™¤íŹŞó…§…ńˆ»®ó†§ˇëľ´ě‘´é·Šď«¶ó‡«ťň†żŠëŻŤë’łë‚Şĺľ¶îŹ˘î—Ží‹¦ďŻ»ď‹í‹˛ď›¶ď‹šóŚ«¶ďŻžî“»îł¬ď‹–󌫮ﳚ啕佐ä
......

  • 0

LG G3 + a:Drake


#8 mikrom

mikrom

    Advanced Member

  • Members
  • PipPipPip
  • 1 748 příspěvků(y)

Publikováno 24 leden 2011 - 17:16

nejaky UtfToAnsi(), ne? jen hadam..
  • 0

#9 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 24 leden 2011 - 17:32

Hádáš správně :-) Jojo zkoušel jsem několik možností, ale spíš to bylo horší než lepší. Možná předbíhám a taky tak daleko jsem se ještě nedostal, ale už vůbec nedokážu přijít na to, jak bych případně blob data do databáze zapsal. Přečíst, sice blbě, je dokážu, ale zapsat vlastně nevím jak :@
  • 0

LG G3 + a:Drake


#10 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 24 leden 2011 - 17:47

Tak, jak jsi to napsal sem, by ti to fakt melo precist spravne. Zadna konverze tam neni. Zapis je jednoduzsi, protoze staci mit ta binarni data zase ve stringu a predas je jako textovy parametr. (ano textovy parametr preda opravdu i binarni data!) Jen to musi byt opravdu pres parametr, nejde to zapsat primo do SQL.
  • 0

#11 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 24 leden 2011 - 17:50

Díky za info, budu zkoušet dál. S tím parametrem jsem to vzdal hned po přečtení poznámky v dokumentaci "Nepoužívat, pouze pro interní využití".
  • 0

LG G3 + a:Drake


#12 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 24 leden 2011 - 17:54

??? to jsi koukal asi na neco jineho... pouziva se to napriklad takto:

  geotable.AddParamText(':ld', zcompress(longdesc));
  geotable.AddParamText(':sd', zcompress(shortdesc));
  geotable.AddParamText(':hint', hint);
  geotable.AddParamInt(':ldf', longdescflag);
  geotable.AddParamInt(':sdf', shortdescflag);
  geotable.AddParamInt(':key', key);
  geotable.ExecSQL('UPDATE geolist SET'
    + ' shortdesc=:sd'
    + ', longdesc=:ld'
    + ', hint=:hint'
    + ', longdescflag=:ldf'
    + ', shortdescflag=:sdf'
    + ' WHERE key=:key'
    );

  • 0

#13 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 24 leden 2011 - 17:55

To sem asi zase koukal jinam, na jiné parametry :P Beru tedy zpět a jdu makat!
  • 0

LG G3 + a:Drake


#14 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 24 leden 2011 - 18:35

Tak by to možná fungovalo, ale muselo by se to ukládast i číst jako text. Problém možná bude v tom, že v té databázi to je uloženo jako typ blob, viz. screenshot. Mám šanci to uložit taky jako blob? TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16LE). BLOB. The value is a blob of data, stored exactly as it was input.
  • 0

LG G3 + a:Drake


#15 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 24 leden 2011 - 19:14

pockej, pockej. kdyz zapisujes do BLOBu, tak se tam zapisi data tak jak jsi je predal. Takze pri zapisu dat ve stringu by se melo ulozit presne to co v nem je. Takze kdyz to pak ctes jako blob, mel bys dostat totez. Ach, budu si to muset nejak zkusit. Jen je mi divne, ze opacny pripad, zapis binarky do TEXT pole a jeho cteni pres BLOB dosahuje stejnych vysledku, ackoliv by teoreticky melo dojit taky ke zmrseni dat, ne?
  • 0

#16 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 24 leden 2011 - 20:42

Mě se zdá, že to "mrší" při zápisu i při čtení. Při zápisu vidíš z toho obrázku, že je to tam uložený jinak, tedy opravdu jako string, kdežto origo záznam je blob. Když je to jako string, nedokážu to z SQLite manageru vyexportovat jako blob, tak nevím jak je to tam vlastně uloženo, jestli správně či už jinak, co se obsahu týče. Bohužel neprojde ani když si záznam (obrázek ze souboru) uložím jako text do databáze sám a pak ho zase přečtu a uložím na disk, to je taky zmršený. V těch formátech UTF, ANSI, atd... se nevyznám, čili vlastně nevím co se to tam při tom děje, ale zřejmě to tam ty binární data ukládá jako text, přičemž zřejmě dojde k nějakému překódování.
  • 0

LG G3 + a:Drake


#17 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 24 leden 2011 - 21:10

Ted jsem ve vane (klasicka heureka!) vymyslel, ci to ze to asi je, a proc se to takto chova tobe a pro me se to chova jinak. ;) Ale jeste to proverim.
  • 0

#18 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 24 leden 2011 - 21:11

mimochodem, ja z toho sqlitemanageru ten BLOB ukladas? Ja na to nejak neprisel... :o
  • 0

#19 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 24 leden 2011 - 21:19

Zkus si na te tvoji databazi zavolat SQL prikaz: PRAGMA encoding; Co ti to odpovedelo?
  • 0

#20 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 24 leden 2011 - 21:21

Jinak jsem koukal, ze v pouzivane verzi wrapperu uz mam i novou funkci AddParamBlob, akorat tam neni aktualizovany export do skriptu, takze ze skriptu si to jeste nezavolas. Az v pristi verzi. :/
  • 0




1 uživatel(ů) prochází toto téma

0 uživatelů, 1 návštěvníků 0 anonymních uživatelů

Reklama