Delphi - TQuery - ako "nezadať" autoinc, iba všetko ostatné?
Mám tabuľku:
ID autoinc
Meno varchar(25)
Tabuľka je otvorená jedným SQl príkazom:
select * from tabulka
Potrebujem do nej pridať záznam ďalším SQL príkazom (tým prvým je stále otvorená:
insert into tabulka ('Meno') values ('asd')
Výsledok:
Invalid use of keyword. Token: )
Ďalší pokus:
insert into tabulka values (,'asd')
Výsledok:
Invalid use of keyword. Token: ,'asd')
To je podľa mňa pochopiteľné.
Ďalší pokus:
insert into tabulka values (NULL,'asd')
Výsledok:
INSERT and UPDATE operations are not supported on autoincrement field type.
To je taktiež pochopiteľné, lenže neviem ako ako obísť položku ID pri zadávaní hodnôt, keďže mi to nejde prvým spôsobom.
Proste ho tam nenapises... :)
Nie som si celkom isty, ale tie uvoddzovky pri vymenovavani stlpcov by asi nemali byt...
edit: ano - tie uvodzovky si odtial vyhod a pojde to...
default.asp
Problém som vyriešil. SQL príkaz funguje. Ďakujem obom za pomoc.
Lenže po jeho vykonaní vidím v DBGrid stále to čo predtým. Mám teda spustiť metódu QueryTabulka.ExecSQL? Vlastnosť Active komponenty QueryTabulka je True, takže teoreticky by sa to malo zaktualizovať samé, nie?
Takže ExecSQL generovalo výnimku, zrejme za to, že Active je True. Urobil som teda to, že som Active zmenil na False a hneď naspäť na True. Pomohlo to, ale zdá sa mi to nevhodné riešenie. Ako teda aktualizovať SQL príkaz, ak došlo v ním spravovanej tabuľke k zmene?
Mříž máš napájenou jedním TQuery a jiným děláš do téže zdrojové tabulky změnu? Chápu to dobře? Pak udělej jen:
//Edit: Éééé, asi to děláš jinak. Popiš problém blíže.
Áno. Pochopil si to správne, ale nepomohlo mi to Refresh. V DBGrid mám stále to isté. Keď ukončím program a spustím, tak novýá záznam vidím, inak nie. Zatiaľ ako jediné riešenie vidím Active := False; Active := True; a všetko ide ako hodinky.
Ale Refresh nedělá nic jiného, než automaticky Active:=false; Active:=true . Navíc si akorát zapamatuje, kde byl nastaven.
Tak to teda nejde ani mne do hlavy, vyskúšam si nájsť zdroják, kde je zádrhel. Dalo som naspäť tie riadky s Active a ide to.
Edit: Pozeral som ten zdroják, ale na mňa je to zložité.
Aha V helpu píšou:
Na tom Query co se vokazuje v mříži, nastav v objekt inspectoru RequestLive na true. Nebo to dělej s tím Active false/true, však voni to doproručujou taky .
Super. Ďakujem. Funguje to. Keď si spomínal, že ostane to tam, kde to bolo, tak ma napadlo, že čo keby sa to nastavilo tam, kde bol pridaný nový záznam. Ale samozrejme aj pri utriedenom zozname. Takže tam musím použiť Locate a hľadať zadané meno.
Takže, aby som urobil aj niečo sám, tak som skúsil hľadať na poradni a aj som našiel:
http://pc.poradna.net/question/view/77800-delphi-7- hladanie-zaznamu-locate-vararrayof
Funguje teda už aj nastavenie práve vytvoreného záznamu. Ďakujem za pomoc a označujem za vyriešené.
Ak robis zapis, mazanie, update do tabulky, vzdy to vykonavas... takze vzdy to davas do metody ExecSQL... pokial robis len vypis "select" tak tam staci dat uz len active:= true... Vzdy ked nieco robis s tabulkou, tak je vhodne si vytvorit vlastnu metodu ExecSQL, ktora pri vstupe hodi active:= false a na vystupe active:= true... to iste plati aj pre selecty, akurat nepouzijes ExecSQL... Najlepsie bude urobit si vlastnu metodu, ktora bude riesit tieto dva stavy...