Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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.

Předmět Autor Datum
Proste ho tam nenapises... :) insert into tabulka (stlpec2) values ('asd') Nie som si celkom isty,…
Intex 20.02.2007 13:39
Intex
default.asp
MM.. 20.02.2007 16:00
MM..
Problém som vyriešil. SQL príkaz funguje. Ďakujem obom za pomoc. Lenže po jeho vykonaní vidím v DBG…
msx. 20.02.2007 23:07
msx.
Takže ExecSQL generovalo výnimku, zrejme za to, že Active je True. Urobil som teda to, že som Active…
msx. 20.02.2007 23:12
msx.
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 u…
Rce 20.02.2007 23:22
Rce
Mříž máš napájenou jedním TQuery a jiným děláš do téže zdrojové tabulky změnu? Áno. Pochopil si to…
msx. 20.02.2007 23:50
msx.
Ale Refresh nedělá nic jiného, než automaticky Active:=false; Active:=true ::). Navíc si akorát zapa…
Rce 20.02.2007 23:57
Rce
Tak to teda nejde ani mne do hlavy, vyskúšam si nájsť zdroják, kde je zádrhel. Dalo som naspäť tie r…
msx. 21.02.2007 00:12
msx.
Aha:i: V helpu píšou: TQuery components do not support the Refresh method if the query is not “live…
Rce 21.02.2007 00:20
Rce
Super. Ďakujem. Funguje to. Keď si spomínal, že ostane to tam, kde to bolo, tak ma napadlo, že čo ke…
msx. 21.02.2007 00:42
msx.
Ak robis zapis, mazanie, update do tabulky, vzdy to vykonavas... takze vzdy to davas do metody ExecS… poslední
Intex 21.02.2007 08:14
Intex

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?

Á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.

Aha:i: V helpu píšou:

TQuery components do not support the Refresh method if the query is not “live”. To refresh a static TQuery, close and reopen the dataset

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...

Zpět do poradny Odpovědět na původní otázku Nahoru