Keresés
Hírlevél
 
Kiemelt témák
»Hogy viszonyul ehhez a család?
»Legjobb metodika emberi relációk tárolására
»A programozó hibája, hogy törik a programját?
»Jogosultság kezelés mezőszinten
Állás/munka
»Wordpress szakértőt keresünk
»Kamu álláshirdetők listája
»Front-end fejlesztő / Sitebuilder
»DataStore Developer
»PHP programozó, webfejlesztő munkát keres
» több téma
Tudástár
?Input mezőből visszakapott adat probléma
Oldalon keresés 8x írja ki az eredményt
?XML-ből sok szövegmező
TinyMCE és az ékezetek
?Rengeteg hasonló kép betöltése gyorsan (PHP)
Ékezetes kar. nem minden táblában jól
?Shelltreeview gond
Grafikon rajzolás probléma
?Onclick= php függvény
?Egyenes megrajzolása
?Access-ből adott xml fájl kinyerése
Listázás időpont szerint
Exportálás változó könyvtárba
*Link eredményének kiolvasása
Imagemapre képet
» több téma
Társalgó
»A programozásból jól meg lehet élni?
»MFC tanulás
»Könyvet adok-veszek
»Hogy viszonyul ehhez a család?
»Nintendo wii
»Letölthető az új Rad Studio XE és Delphi XE
»Weblap véleményezés
»Játékmotor elmélet
»Informatikai bulvárlap
»Delphi-ről C++-ra váltás
» több téma
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Tudástár

»

Delphi 2 MSSQL db szinkronizációja

»

Delphi 2 MSSQL db szinkronizációja

nyitotta: jonnymelone, idő: 2010.03.14., moderátor: netangel
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Programozási nyelvek » Delphi
Adatbázisok » Microsoft SQL Server

Sorrend:
Időzóna:
Blokkméret:
Sziasztok!

A kérdésem a következő lenne:
Van e olyan lehetőség, hogy AdoDataSet használatával az egyik adatbázisból kigyűjtöm egy dátum utáni változásokat (INSERT, UPDATE), és ezt átadom egy másik adatbázisra mutató AdoDataSet-nek, és egyszerűen UpdateBatch-el a változásokat belerakom a 2. adatbázisba? Ha van, akkor hogyan csináljam?

Ui.: Az egyszerűbb, de lassabb módszer már megvalósult, azaz, hogy kiválogatom a változásokat, és egyenként update-elem, vagy insert-álom, attól függően, hogy már létezik -e. Csak érdekelne, hogy van e más módszer.

A segítséget előre is köszönöm.
1. (javasolt megoldás)
az MSSQL-nek van "beépített" replikációja, azaz olyan szolgáltatása, amivel 2 adatbázis tábláit szinkoronizálja. Ez nem jó neked?

2. (kézi, 2 db. utasítás az egész, célszerű egy tárolt eljárásban elhelyezni, és nem a kliensen bohóckodni)

két adatbázis közötti update és insert, ha van egy id (identity) mező a táblán, és egy mező, ami nyilvántartja az utolsó m,ódosítás időpontját

-- megváltozott rekordok
UPDATE cél
SET mező1 = forrás.mező1,
    mező2 = forrás.mező2,
    ...
FROM db1.dbo.tábla forrás
INNER JOIN db2.dbo.tábla cél ON forrás.id = cél.id
WHERE cél.változásIdőpontja >= @adottIdőpont

-- új rekordok:
SET IDENTITY_INSERT db2.dbo.tábla ON

INSERT INTO db2.dbo.tábla(id, mező1, mező2, ....)
SELECT id, mező1, mező2, ....
FROM db1.dbo.tábla
WHERE id not in (SELECT if FROM db2.dbo.tábla)

SET IDENTITY_INSERT db2.dbo.tábla OFF
elírás: az első SQL-ben
WHERE cél.változásIdőpontja >= @adottIdőpont
helyett
WHERE forrás.változásIdőpontja >= @adottIdőpont
értendő
Szia,
Nekem tetszene az első megoldás is, ha tud működni úgy két server között úgy, hogy azok között csak VPN kapcsolat van, és ennek a szinkronizációnak kb 2-5 percenként le kell futnia.

A második megoldással az a baj, hogy elég macerás táblánként dinamikusan összerakni a mezőneveket és az értékeket, és nem mellesleg az id nem autoincrementes, mivel global id-t és id tartományokat használok.

Ha az első megoldásban tudnál részletesebb segítséget nyújtani, azt megköszönném. Hol találom ennek a beállítási lehetőségét, és hogyan állítsam be?

Előre is köszi!
MSDN
Az ott olvasottakból az derül ki, hogy Express Edition alatt nincs replikáció. Mivel én azt használok, akkor ez a dolog nem fog működni. Jól gondolom?
valamint én csak visszatérnék az eredeti kérdésre, hogy Delphiben ezt hogyan tudom megoldani?
Az egyszerűbb, de lassabb módszer már megvalósult,
Döntsd el, mit szeretnél.
Csabi31 javaslata egyszerűbb és gyorsabb.
Delphi alatt bármit kreálsz e témában, az bonyolultabb és időigényesebb lesz (a hibalehetőségekről nem is beszélve).
Csabi31 első javaslata nem működhet, mivel írtam, hogy express edition-t használok. A második javaslatára pedig már korábban leírtam, hogy szerintem nekem nem jó, mivel elég macerás lenne táblánként tárolt eljárást írni,és lényegében ugyanezt már megírtam kliens oldalon "lassabb módszer" címen.
Ezért kértem, hogy ha lehet, akkor az eredeti kérdésemre szeretnék választ kapni.
Természetesen örülök, hogy vannak, akik egyáltalán javaslatokat adnak, amit ezúton is köszönök, de sajnos véleményem szerint nem tudom a jelen problémámnál ezeket használni megoldásként, a fent leírtak miatt.
csak egy tárolt eljárást kell írnod. nincs más teendőd, csak annyi, hogy az INSERT és UPDATE triggerekben átadod a táblanevet, az egyedi azonosítót, és hogy INSERT vagy UPDATE történte-e. ezen információk birtokában össze tudsz állítani egy dinamikus sql uatsítást, majd exec-el futtatod. ha jól csinálod, akkor struktúra módosítás esetén sem kell többet módosítanod. csak annyi a teendőd, hogy ha létrehozol egy új táblát akkor a triggerekbe beleteszed a tárolt eljárást
A második javaslatára pedig már korábban leírtam, hogy szerintem nekem nem jó, mivel elég macerás lenne táblánként tárolt eljárást írni,és lényegében ugyanezt már megírtam kliens oldalon "lassabb módszer" címen.

Bocsi, de ha egyszer már elbvetetted Csabi31 1. ötletét, akkor miért gondolod, hogy azt ajánlom?
Bármit kreálsz Delphi-ben, az csak lassabb lehet, mint egy server oldali adatbázis kezelő funkció.
Macerás ha még nem ismered, de érdemes megismerni, ha már ilyen témába vágtál..
Egyébként milyen távol van egymástól a két server?
Egymástól távoli településeken vannak a serverek.
Lehet, hogy félreértettem, hogy azt is ajánlod, elnézést ezért!
Elfogadom, hogy jobb a server oldalon letudni ezeket, és hogy Delphi alatt ez lassabb és nehezebb, de mivel ezen a vonalon indultam el, és a határidő szorít, ezért szeretném a jelenlegi struktúrából kihozni, amit lehet. A későbbiekre nézve viszont valóban tanulságos dolgokat mondtatok.

De a kérdésem továbbra is az, hogy logikailag tud -e az működni, hogy két dataset két külön db-re mutat, az egyik datasetbe kigyűjtöm a változásokat az 1. db-ből, azt átrakom a másik datasetbe, és updatebatch-el beemelem a 2. db-be.
Kérlek, erre adj választ! Megigérem, hogy legközelebb tárolt eljárással oldom meg.
Köszönöm a segítséget!
Bár jelen problémámra nem kaptam megfelelő megoldást, de a jövőre nézve sok hasznos információt kaptam.
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Micu1.030
»Interlock280
»mezofi150
»Pitta_100
»Frostech0100
»szbzs.2100
»Riha60
»Akhiles50
»mrchandra50
»Bakter50
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Balucinho
»Kelemzol
» ugrás a wikire
A nap kifejezései
»Algoritmus
»Hogyan kezdjem el
»Perl
» ugrás a wikire
Hírek
»Megérkezett a PostgreSQL 9.0 kiadásra jelölt változata
»Letölthető az új Rad Studio XE és Delphi XE
»Function-X digitális művészeti találkozó és demoscene party
»Webfejlesztőknek szóló közösségi oldalt indított a Microsoft
»Letölthető a hardvergyorsított Chrome 7 első fejlesztői kiadása
» több hír
PC Fórum hírek
»Itt az első kép az AMD nyolcmagos processzoráról
»"Szuperdizájnos" érintő-egeret mutatott be a Microsoft
»Szabadalmaztatta a számítógép kikapcsolását a Microsoft
»Vírusriadót váltott ki a webezőknél a Google
»Ingyen iWiW-ezhetnek mobiljaikról a T-Mobile-osok
»Automatikusan kiválogatja legfontosabb leveleink a Google
»OOo4Kids - ingyenes Office csomag gyerekeknek
»Új, gyorsabb Core i3 és Pentium processzorokat jelentett be az Intel
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen