Obsah fóra www.proxima-soft.sk www.proxima-soft.sk
Px Framework - ASP.NET komponenty pre rýchly vývoj databázových aplikácii
 
 FAQFAQ   HľadaťHľadať   Zoznam užívateľovZoznam užívateľov   Užívateľské skupinyUžívateľské skupiny   RegistráciaRegistrácia 
 NastaveniaNastavenia   Súkromné správySúkromné správy   PrihláseniePrihlásenie 

Vkladanie nového riadku???

 
Pridať novú tému   Zaslať odpoveď    Obsah fóra www.proxima-soft.sk -> PxWebQuery - komponenta na načítanie dát z databázy
Zobraziť predchádzajúcu tému :: Zobraziť nasledujúcu tému  
Autor Správa
Peter



Založený: 20 júl 2010
Príspevky: 31
Bydlisko: B. BYSTRICA

PríspevokZaslal: Po august 02, 2010 2:06 pm    Predmet: Vkladanie nového riadku??? Odpovedať s citátom

Po zapojeni komponent PxWebQuery a PxSuperGrid, sa mi nedal vytvoriť nový riadok? Funkcie, ako editacia a mazanie fungovali.

Naposledy upravil Peter dňa Ut august 03, 2010 2:28 pm, celkom upravené 1 krát.
Návrat hore
Zobrazit informácie o autorovi Odoslať súkromnú správu
admin
Site Admin


Založený: 17 jún 2010
Príspevky: 54
Bydlisko: ŠKODA Peter, PODBREZOVÁ

PríspevokZaslal: Po august 02, 2010 2:07 pm    Predmet: Platí len pre Oracle !!! Odpovedať s citátom

Here you will find an article about PxWebQuery component in English:
http://www.proxima-soft.sk/articles/Data-loading-from-Oracle-MSSQL-MySQL-FireBird-Interbase-database-by-means-of-PxWebQuery-components.html

http://www.proxima-soft.sk/articles/PxWebQuery-component-for-working-with-databases.html

http://www.proxima-soft.sk/articles/Program-inserting-editing-deleting-of-new-row-into-database-by-means-of-PxWebQuery-component.html

Na to aby ste prostredníctvom komponenty PxWebQuery vkladali nove riadky potrebujete vytvorit sequenciu, z ktorej si komponenta PxWebQuery načíta jedinečné ID pre svoj primárny klúč.
Ďalej tento návod platí pre Oracle server.

Názov sequencie, by ste mali vytvoriť nasledujúcim spôsobom.

kód:
SEQ_"názov stĺpca primárneho kľúča"



Preto, keď tvoríte nové tabuľky nedávajte názov stĺpcu s primárnym kľúčom len "ID", ale napríklad ID+"názov tabuľky". Takže aby vo vašom príklade, fungovalo aj vkladanie dát do databázy, vytvorte si sequenciu SQL príkazom, ktoréj názov vytvoríte podľa hore uvedenej definície:

kód:
CREATE SEQUENCE SEQ_IDADRESAR
START WITH 1
INCREMENT BY 1
MAXVALUE 1E18
NOMINVALUE
NOORDER
NOCACHE
NOCYCLE;


Naposledy upravil admin dňa Ut január 31, 2012 1:53 pm, celkom upravené 5 krát.
Návrat hore
Zobrazit informácie o autorovi Odoslať súkromnú správu Odoslať e-mail Zobraziť autorové WWW stránky
Peter



Založený: 20 júl 2010
Príspevky: 31
Bydlisko: B. BYSTRICA

PríspevokZaslal: Po august 02, 2010 2:22 pm    Predmet: Odpovedať s citátom

Pri databáze Mysql, sa tato sequencia vytvára inak ???

Naposledy upravil Peter dňa Ut august 03, 2010 2:29 pm, celkom upravené 1 krát.
Návrat hore
Zobrazit informácie o autorovi Odoslať súkromnú správu
admin
Site Admin


Založený: 17 jún 2010
Príspevky: 54
Bydlisko: ŠKODA Peter, PODBREZOVÁ

PríspevokZaslal: Po august 02, 2010 3:49 pm    Predmet: Vytvorenie sequencie / generátora pre MySQL server Odpovedať s citátom

Na to aby ste prostredníctvom PxWebQuery vkladali nove riadky, potrebujete vytvoriť sequenciu,
z ktorej si komponenta PxWebQuery načíta jedinečné ID pre svoj primárny kľúč. Mysql Server
sequencie nepodporuje, preto bolo zvolené riešenie, ktoré tieto sequencie nahradzuje. Teda ak
chcete pracovať s Px Frameworkom pod databázou Mysql, musíte si vytvoriť sequenciu
nasledujúcim spôsobom. Túto sequenciu si vytvoríte dvoma nasledujúcimi krokmi.

1. Vytvorenie tabuľky, kde sa odkladá posledná načítaná hodnota pre každú tabuľku
2. Vytvorenie procedúry, ktorá bude manažovať, načítanie a inkrementovanie hodnoty daného riadka tabuľky

Aby nám fungovalo aj vkladanie dát do databázy, vytvoríme SQL príkazom najprv tabuľku a
potom procedúru. Názov tabuľky a procedúry musí zostať nezmenení.
Tabuľku pre generovanie sequencie, vytvoríte zadaním nasledujúceho SQL príkazu:

kód:
--VYTVORENIE TABULKY PRE SEQUENCIU,
--GENEROVANIE NOVEHO ID PRE MYSQL
create table All_Sequence(
seq_name varchar(30),
start int,
increment int,
currval int,
flag char(1));



Vytvorenie procedúry, ktorú využíva Px Framework na načítanie jedinečnej hodnoty kľúča pre
danú tabuľku, vytvoríte zadaním nasledujúceho SQL príkazu:

kód:
--VYTVORENIE PROCEDURY SEQUENCIE
CREATE DEFINER = 'root'@'localhost'
PROCEDURE Get_Sequence(
in SeqName varchar(255),
out NextVal int
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
begin
declare rowcount int;
declare v_flag char(1);
select Count(*) into rowcount from All_Sequence where seq_name=SeqName;
if rowcount=0 then
insert into All_Sequence values(SeqName,1,1,1,'A');
set NextVal = 1;
else
set v_flag='N';
while (v_flag='N') do
select flag into v_flag from All_Sequence where seq_name=SeqName;
end while;
update All_Sequence set flag='N' where seq_name=SeqName;
select currval+INCREMENT into NextVal from All_Sequence where seq_name=SeqName;
update All_Sequence set flag='A',currval=NextVal where seq_name=SeqName;
end if;
end;


Do sekcie „CREATE DEFINER“ procedúry, treba ešte zmeniť meno užívateľa a meno hostu na ktorom
beží MySQL databáza, v našom prípade to je „'root'@'localhost'“.
Hore uvedená procedúra sa dala skompilovať bez chyby na servery MySQL verzia 5.1..
Pokiaľ, by nám neprešla kompilácia hore uvedenej procedúry, ďalej uvádzam upravenú procedúru,
ktorá by mala zbehnúť na MySQL servery verzia 5.0.. a nižšej verzii, tu sú doplnené definície
delimiterov.

kód:
DELIMITER $$
CREATE DEFINER = 'root'@'localhost'
PROCEDURE Get_Sequence(
in SeqName varchar(255),
out NextVal int
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
begin
declare rowcount int;
declare v_flag char(1);
select Count(*) into rowcount from All_Sequence where seq_name=SeqName;
if rowcount=0 then
insert into All_Sequence values(SeqName,1,1,1,'A');
set NextVal = 1;
else
set v_flag='N';
while (v_flag='N') do
select flag into v_flag from All_Sequence where seq_name=SeqName;
end while;
update All_Sequence set flag='N' where seq_name=SeqName;
select currval+INCREMENT into NextVal from All_Sequence where seq_name=SeqName;
update All_Sequence set flag='A',currval=NextVal where seq_name=SeqName;
end if;
end$$
DELIMITER ;



Hneď po vytvorení tabuľky a procedúry, môžeme začať pracovať s Px Frameworkom a vkladať
nové riadky. Pokiaľ pre dané ID tabuľky, nebol v tabuľke All_Sequence vytvorení riadok, tak tento
riadok sa automaticky vytvorí pri jej prvom zavolaní. Pri každom ďalšom zavolaní sa inkrementuje
o hodnotu 1 smerom hore alebo o hodnotu Increment, zadanú v tabuľke All_Sequence.


Naposledy upravil admin dňa Ut január 31, 2012 1:53 pm, celkom upravené 2 krát.
Návrat hore
Zobrazit informácie o autorovi Odoslať súkromnú správu Odoslať e-mail Zobraziť autorové WWW stránky
Peter



Založený: 20 júl 2010
Príspevky: 31
Bydlisko: B. BYSTRICA

PríspevokZaslal: Po august 09, 2010 1:22 pm    Predmet: Odpovedať s citátom

A ako je to pri platforme MS SQL???
Návrat hore
Zobrazit informácie o autorovi Odoslať súkromnú správu
admin
Site Admin


Založený: 17 jún 2010
Príspevky: 54
Bydlisko: ŠKODA Peter, PODBREZOVÁ

PríspevokZaslal: Po august 16, 2010 1:30 pm    Predmet: Odpovedať s citátom

MS SQL Server sequencie nepodporuje, preto bolo zvolené riešenie, ktoré tieto sequencie nahradzuje. Teda ak chcete pracovať s Px Frameworkom pod databázou MS SQL, musíte si vytvoriť sequenciu nasledujúcim spôsobom.
Túto sequenciu si vytvoríte dvoma nasledujúcimi krokmi.

1. Vytvorenie tabuľky, kde sa odkladá posledná načítaná hodnota pre každú tabuľku
2. Vytvorenie procedúry, ktorá bude manažovať, načítanie a inkrementovanie hodnoty daného riadka tabuľky

Aby nám fungovalo aj vkladanie dát do databázy, vytvoríme SQL príkazom najprv tabuľku a
potom procedúru. Názov tabuľky a procedúry musí zostať nezmenení.
Tabuľku pre generovanie sequencie, vytvoríte zadaním nasledujúceho SQL príkazu:

kód:
--VYTVORENIE TABULKY, KDE SA BUDU UKLADAT HODNOTY SEQUENCII
Create table All_Sequences (
SeqName nvarchar(255) primary key, -- name of the sequence
Start int not null default(1), -- seed value
Increment int not null default(1), -- incremental
CurrVal int
)
GO



Vytvorenie procedúry, ktorú využíva Px Framework na načítanie jedinečnej hodnoty kľúča pre
danú tabuľku, vytvoríte zadaním nasledujúceho SQL príkazu:

kód:
--PROCEDURA NA NACITANIE SEQUENCIE
create procedure Get_Seguence
@SeqName nvarchar(255),
@result int OUTPUT,
@start int = 1,
@incr int = 1,
@currvalue int = 1
as
begin
declare @NewSeqVal int
set NOCOUNT ON
update All_Sequences
set @NewSeqVal = CurrVal = CurrVal+Increment
where SeqName = @SeqName
if @@rowcount = 0 begin
if exists (
select 1 from All_Sequences
where SeqName = @SeqName )
begin
print 'Sequence already exists.'
return 1
end
if @start is null set @start = 1
if @incr is null set @incr = 1
set @currvalue = @start
insert into All_Sequences (SeqName, Start, Increment, CurrVal)
values (@SeqName, @start, @incr, @currvalue)
set @result = @currvalue
RETURN
end
set @result = @NewSeqVal
return
end
GO


Hneď po vytvorení tabuľky a procedúry, môžeme začať pracovať s Px Frameworkom a vkladať nové riadky. Pokiaľ pre dané ID tabuľky, nebol v tabuľke All_Sequences vytvorení riadok, tak tento riadok sa automaticky vytvorí pri jej prvom zavolaní. Pri každom ďalšom zavolaní sa inkrementuje o hodnotu 1 smerom hore alebo o hodnotu Increment, zadanú v tabuľke All_Sequences.


Naposledy upravil admin dňa Ut január 31, 2012 1:53 pm, celkom upravené 2 krát.
Návrat hore
Zobrazit informácie o autorovi Odoslať súkromnú správu Odoslať e-mail Zobraziť autorové WWW stránky
Peter



Založený: 20 júl 2010
Príspevky: 31
Bydlisko: B. BYSTRICA

PríspevokZaslal: Ut august 17, 2010 12:54 pm    Predmet: FireBird / Interbase??? Odpovedať s citátom

A ako je to pri platforme FireBird / Interbase???
Návrat hore
Zobrazit informácie o autorovi Odoslať súkromnú správu
admin
Site Admin


Založený: 17 jún 2010
Príspevky: 54
Bydlisko: ŠKODA Peter, PODBREZOVÁ

PríspevokZaslal: St august 18, 2010 2:19 pm    Predmet: Vkladanie nového riadku??? Odpovedať s citátom

Na to aby ste prostredníctvom PxWebQuery vkladali nove riadky do databazy Firebird / Interbase, potrebujete vytvoriť generátor,
z ktorej si komponenta PxWebQuery načíta jedinečné ID pre svoj primárny kľúč. Názov generátora, by ste mali vytvoriť nasledujúcim spôsobom.

kód:
SEQ_“názov stĺpca primárneho kľúča“


Preto, keď tvoríte nové tabuľky nedávajte názov stĺpcu s primárnym kľúčom len „ID“, ale napríklad ID+“názov tabuľky“.
V našom príklade, aby nám fungovalo aj vkladanie dát do databázy, vytvoríme generátor SQL príkazom:

kód:
CREATE GENERATOR “SEQ_IDADRESAR“;


Pokiaľ pracujete aj s diakritikou, je potrebné pod serverom Interbase do ConnectionStringu zadať aj character set, pretože
provider pre Interbase, dodávaný s Px Frameworkom, vyhadzuje chybovú hlášku pri zadaní diakritiky, a nezadefinovaní tejto znakovej sady do prihlasovacieho reťazca.

kód:
character set=WIN1250;


Výsledný ConnectionString bude vyzerať nasledovne:

kód:
wquAdresar.ConnectString = "DataSource = localhost;Database=C:\\WINNT\\DATA27.GDB;UserID = SYSDBA;Password = masterkey;character set=WIN1250;";
Návrat hore
Zobrazit informácie o autorovi Odoslať súkromnú správu Odoslať e-mail Zobraziť autorové WWW stránky
Zobraziť príspevky z predchádzajúcich:   
Pridať novú tému   Zaslať odpoveď    Obsah fóra www.proxima-soft.sk -> PxWebQuery - komponenta na načítanie dát z databázy Časy uvádzané v GMT + 1 hodina
Strana 1 z 1

 
Prejdi na:  
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.


Powered by phpBB © 2001, 2005 phpBB Group
phpBB podpora - Slovenský preklad - www.pcforum.sk