Keresés

Részletes keresés

ZaphodBeeblebrox Creative Commons License 2005.12.09 0 0 145
Ha úgy érted az update-et, hogy sql-el update-ltem akkor nem. Megadtam a form rekordforrását, majd amikor végzett az ügyfél az adatok szerkesztésével rákattintott az OK gomra és egy save paranccsal (DoCmd.RunCommand acCmdSaveRecord) elmentette. Semmi sql-es machináció nem volt.

ZB
Előzmény: crockl (137)
NevemTeve Creative Commons License 2005.12.09 0 0 144
NevemTeve Creative Commons License 2005.12.09 0 0 143
A végeredmény: egy adatot egyszerre tetszőleges számú folyamat olvashat, de csak egyetlenegy írhatja.
De melyik? Általánosan sok olvasás vagyon, amikből csak néhány akar módosítással folytatódni... legjobban a programozó tudja megmondani, hogy akarja-e zárolni a rekordot vagy sem...
Előzmény: Strasszer (138)
crockl Creative Commons License 2005.12.09 0 0 142
viszont ha nem. akkor megis csak belathatjuk, hogy mssql nem tamogat for update lehetoseget :)
Előzmény: Strasszer (140)
crockl Creative Commons License 2005.12.09 0 0 141
olvasom: tól: "De SELECT esetén kell-e zárolni? ... A végeredmény: egy adatot egyszerre tetszőleges számú folyamat olvashat, de csak egyetlenegy írhatja. " -ig. nekem valahogy ez jon le.
Előzmény: Strasszer (140)
Strasszer Creative Commons License 2005.12.09 0 0 140
nemnem. olvasd el a doksit.
Előzmény: crockl (139)
crockl Creative Commons License 2005.12.09 0 0 139
ki fogom probalni:) de ezek szerint, ha kiadom a select * from table-t; akkor azt a tablat senki sem fogja tudni irni amig en a tranzakcioma be nem fejezem? ez eleg lol:)
Előzmény: Strasszer (138)
Strasszer Creative Commons License 2005.12.09 0 0 138
ajánlom figyelmedbe:
http://www.netacademia.net/publikacio/cikk/doc/0202deadlock.doc
Soczó Zsolt irta az mssql lockolási mechanizmusáról. Idézek:

Ha a zárolási rendszerről beszélünk, óhatatlanul felmerül a gondolat: mely műveletek során van szükség zárak használatára? Az UPDATE, INSERT és DELETE műveleteknél egyértelmű a válasz: adatmódosítás történik, tehát kell a lakat. Ilyenkor az SQL Server úgynevezett exclusive lockot, kizárólagos felhasználásra jogosító zárat tesz az érintett sorra/lapra/táblára (az eszkaláció szerint), s azt a tranzakció végéig fenn is tartja - más még csak nem is olvashatja a megbűvölés alatt álló adatokat.
De SELECT esetén kell-e zárolni? Ilyenkor adatmódosítás nyilvánvalóan nem történik - minek ide zár? Ilyen esetben a zárolás célja, hogy lehetetlenné tegye azon adatok módosítását, melyeket éppen olvasunk. Az SQL Serverben alapértelmezésben minden olvasás konzisztens adatokat, lezárt tranzakciók utáni állapotot ad vissza. Erre azért képes, mert minden olvasott sorra/lapra/táblára (az eszkaláció szerint) úgynevezett shared lockot, megosztott zárolást helyez. Azért megosztott, mert egy így zárolt objektumra tetszőleges számú további olvasó csimpaszkodhat, és olvashatja párhuzamosan a többiekkel.
A végeredmény: egy adatot egyszerre tetszőleges számú folyamat olvashat, de csak egyetlenegy írhatja.

a többi ott van a doksiban.
Előzmény: NevemTeve (134)
crockl Creative Commons License 2005.12.09 0 0 137
a protokol szerintem mind1, de a programodba eddig is select, update, delete utasitasok voltak nem?:D)
Előzmény: ZaphodBeeblebrox (136)
ZaphodBeeblebrox Creative Commons License 2005.12.09 0 0 136
ODBC-n keresztül. Access-ben minde ment mint eddig. Tsak a forrás volt ODBC-n keresztül bekötve.

ZB
Előzmény: NevemTeve (131)
crockl Creative Commons License 2005.12.09 0 0 135
nem tudom mirol beszelsz, minden normalisnak tekintheto adatbazis ismeri a for updatet. es ez is csak 1 utasitas, csak mssql nem kepes vegrehajtani :D) de a patch cuccot amit irtam elobb, az kivalthatja ezt.
Előzmény: Strasszer (132)
NevemTeve Creative Commons License 2005.12.09 0 0 134
Most megleptél... szerintem teljesen jogos igény, hogy a rekord a lekérdezés és a visszaírás között ne módosuljon... (persze nem úgy képzelem, hogy a lockolás és a feloldás között felhasználói tevékenység legyen)
Előzmény: Strasszer (132)
NevemTeve Creative Commons License 2005.12.09 0 0 133
Akkor bocsánat, én Oracle-t használok, azért gondoltam...
kicsit mersterkélt megoldás, hogy egy rekordra szóló kurzort nyitok FOR UPDATE opcióval... és csak az UPDATE után zárom le a kurzort
Előzmény: Strasszer (127)
Strasszer Creative Commons License 2005.12.09 0 0 132
egyáltalán nem gáz. az sqlnek pont ez a lényege. kérdezel, kapod a választ. utasitasz, végrehajtja. egy sql server több száz ügyfelet is kiszolgál egyszerre. képzeld el, micsoda lockolások lennének, egy idő után.
persze lock van, de azt mind a server intézi, és elvileg mindegyik csak rövid időre műx. kivéve a tranzakciókat.
Előzmény: crockl (128)
NevemTeve Creative Commons License 2005.12.09 0 0 131
Miért, eddig hogyan kommunikált a szerverrel?
Előzmény: ZaphodBeeblebrox (130)
ZaphodBeeblebrox Creative Commons License 2005.12.09 0 0 130
Sziasztok!

Akkor, ha most jól értem, át kell írnom az egész programot úgy, hogy végig SELECT, DELETE, UPDATE... SQL utasításokkal kommunikáljon a szerverrel...????!!!!

ZB
Előzmény: Strasszer (125)
crockl Creative Commons License 2005.12.09 0 0 129
viszont talaltam ilyet:
http://www.jpox.org/servlet/jira/browse/CORE-2462

Talan ez a patch segit.
Előzmény: crockl (128)
crockl Creative Commons License 2005.12.09 0 0 128
pedig szerintem a for update kell mukodjon mssql 2000-ben is, es nem csak cursor-ra. Ha ez az alapveto dolog sem mukodik benne, akkor az mar gaz:)
De akkor max lock-olja a tablat :D) Vagy sajat jelzo bit-el oldja meg a dolgot.
Előzmény: Strasszer (127)
Strasszer Creative Commons License 2005.12.09 0 0 127
elolvastam, kipróbáltam. a QA ezt mondja rá:
FOR UPDATE clause allowed only for DECLARE CURSOR.
azaz ez csak arra jó, ha tsql-lel végigmész egy cursoron, akkor arra az időre, amig éppen az adott soron állsz és módositasz, zárolhatod. de ez csak cursorra igaz.
Előzmény: NevemTeve (126)
NevemTeve Creative Commons License 2005.12.09 0 0 126
Azért a 124-est megnézhetted volna: a "FOR UPDATE" záradék jelzi a zárolást
Előzmény: Strasszer (125)
Strasszer Creative Commons License 2005.12.09 0 0 125
az sql-ben viszont nincs ilyenfajta zárolás. kiadsz egy selectet,, erre kapsz egy adathalmazt. ha vmelyiken módositasz, akkor kiadsz egy update-et. a select és az update között zárolni nem tudsz. csak az irás idejére zárolhatod a sort (illetve nem is te, hanem a server). arról neked kell gondoskodnod, hogy más addig ne irhassa azt a sort (pl újraolvasás, illetve egy tábla, amiben jegyzeteled a kiolvasott sorokat).
Előzmény: ZaphodBeeblebrox (123)
crockl Creative Commons License 2005.12.09 0 0 124
select * from tabla where felteteleim a sorra for update; ?
Előzmény: ZaphodBeeblebrox (123)
ZaphodBeeblebrox Creative Commons License 2005.12.09 0 0 123

Hali!

 

Zárolt egy rekord akkor, ha valaki már szerkeszti és másnak nem engedi meg, hogy szerkessze. Tulajdonképpen hibát generál, ha szerkeszteni próbáljuk. Legalábbis az Access-ben. Ugye az Access-ben van pesszimista és optimista zárolás. Én pesszimista zárolást szeretnék elérni.

 

ZB

Előzmény: crockl (122)
crockl Creative Commons License 2005.12.08 0 0 122
mit is ertesz Te zarolas alatt?
Előzmény: ZaphodBeeblebrox (121)
ZaphodBeeblebrox Creative Commons License 2005.12.08 0 0 121

Sziasztok!

 

Most kezdtem el ismerkedni az SQL Serverrel és a következő problémám lenne:

 

Hogyan tudok zárolni egy rekordot? Access alól tsatlakozunk az adatbázishoz, de zárolni már nem akarja a szerkesztett rekordot.

 

ZB

Strasszer Creative Commons License 2005.07.29 0 0 120
Mostanában elég furcsa dolgokat produkál az enterprise manager. létrehozok egy táblát. azt mondom neki, hogy jobb gomb, open table, return all rows... erre azt mondja, hogy
An unexpected error happened during this operation.
[MS Design Tools] - You might not have permission to perform this operation. or the object might no longer exist in the database.
Pedig sa vagyok, domain admin, és a tábla is létezik. Ha jobb gombnál azt mondom neki, hogy Return Top... vagy azt, hogy Query, akkor simán megnyitja. Sőt, query módban, ha hozzá akarok adni egy táblát, akkor ezt sem engedi, ugyanez a hibaüzenet.
Viszont ugyanezeket a korábban (kb 2 hónappal ezelött) létrehozott táblákkal simán meg tudom tenni. Volt közben egy server-csere (w2k -> w2k3) az sql alatt, és kb azóta van ez az állapot. lehet, hogy ennek köze van hozzá?
Találkozott vki ilyennel? és ha igen, sikerült-e megoldania?
Strasszer Creative Commons License 2005.06.28 0 0 119
Előzmény: mindustry (117)
pint Creative Commons License 2005.06.28 0 0 118
nem esküdnék rá tutira, de szerintem az eljárás is ezt csinálja
Előzmény: mindustry (117)
mindustry Creative Commons License 2005.06.27 0 0 117

Hm, köszönöm a tippet. Már csak az lenne a kérdésem, hogy ezeket a tárolt eljárásokat kívülről, PHPból hogy tudom kiprovokálni? Tudom hogy ez már OFF és bocsi, de hátha erre téved egy guru... :)

 

Ettől függetlenül lehet, hogy egy ideiglenes oszlop létrehozása, adatmozgatás, régi oszlop törlése és újracsinálása, majd még egy mozgatás lesz a megoldás.

 

[mind]

Előzmény: Strasszer (116)
Strasszer Creative Commons License 2005.06.23 0 0 116
pl ez:

sp_rename
Changes the name of a user-created object (for example, table, column, or user-defined data type) in the current database.

Syntax
sp_rename [ @objname = ] 'object_name' ,
[ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]

(books online)
Előzmény: Strasszer (115)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!