🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #898

Re: procedurka...

#898
From: Marek Janaszewski USUNTO. z adre...
Date: Mon, 12 Apr 2004 20:52
64 lines
3596 bytes
rozrabiak wrote:
> Użytkownik Marek Janaszewski (USUN_TO. z adresu!) napisał:
>> Witam!
>>
>> W pomocy jest opisany ten wyjątek, na czym polega problem:
>> Represents the exception that is thrown when an action is attempted
>> on a DataRow that has been deleted.
>>
>> Nie należy wykonywać operacji na rekordzie zaznaczonym do usunięcia.
>>
>
> Nie wykonuje na nim operacji! Naciska przycisk, ktory usuwa rekord z
> dataset-u, czyli nastepuje cos na zasadzie (chyba) ukrycie rekordow do
> usuniecia. Wykonuje sie to:

Witam!

Rekord jest oznaczany do usunięcia. DataSet przechowuje tabele w pamięci. Ty
definiujesz jak załadować taką tabele z bazy danych i jak na podstawie
dokonanych zmian dokonać aktualizacji bazy danych. W tym czasie program
nawet nie musi być połączony z bazą danych. Zdaje się, że taki model pracy
nazywa się aktówkowym. Także DataSet musi śledzić wszystkie zmiany w
rekordzie, równie przechowywać stare wartości. Jeśli np. zechcesz po starej
wartość odszukać rekord aby go zaktualizować do nowych lub stwierdzić, że
ktoś w tym czasie także grzebał przy rekordzie w tych samych polach co
użytkownik i np. poproście użytkownika o rozwiązanie konfliktu. To się
nazywa optymistyczny model blokowania. W każdym razie zapytania SQL trzeba
jakość przygotować do takiego DataSetu.

>     if (!Convert.IsDBNull(datas.Tables["capsch"].Rows[context[datas,
> "capsch"].Position]["Fig"]))
>     {
>      fig = (byte[])datas.Tables["capsch"].Rows[context[datas,
> "capsch"].Position]["Fig"];
>
> i wtedy wlasnie nastepuje wyjatek. Nie mam pojecia jak inaczej to
> wytlumaczyc :( nawet, gdy klikne na przycisk odpowiadajacy za
> przejscie
> do nastepnego rekordu lub poprzedniego wyskakuje wtedy wyjatek.
> Procedura kasujaca wyglada tak:
>
> public void delete() //usun rekord
> {
> datas.Tables["capsch"].Rows[context[datas,
> "capsch"].Position].BeginEdit();
>
> datas.Tables["capsch"].Rows[context[datas,
[...]
> Nie mam pojecia jak wytlumaczyc to zjawisko, ale jest ono chore :/
[...]

Po pierwsze zły styl. Powinieneś założyć zmienną, odczytać do niej pola lub
cały wiersz i na tym działać. Nie wstukiwać dwa razy to samo albo korzystać
z Ctrl+C, Ctrl+V. Oprócz stylu to jest także rozwiązanie bardziej efektywne.
Sposób odwoływanie się dużych danych ma znaczenie.

Po drugie, pewnie naprawdę coś wykonuje na rekordzie zaznaczonym do
usunięcia, jak nie bezpośrednio to w zdarzeniu. Skorzystaj z debugera aby to
prześledzić.

-- 
Pozdrawiam,
Marek Janaszewski
[ j_m...@gazeta.pl ]
Technical Details
Message-ID: <c5f0dl$msk$2@news.atman.pl>
Path: mbox-mo1.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.icl.net!proxad.net!newsfeed.tpinternet.pl!news.atman.pl!not-for-mail
References: <c575ud$ak5$1@news.onet.pl> <c59aa3$31jn$2@news.atman.pl> <c59bfs$fgg$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.icl.net!proxad.net!newsfeed.tpinternet.pl!news.atman.pl!not-for-mail
From: "Marek Janaszewski \(USUN_TO. z adresu!\)" <USUN_TO...@gazeta.pl>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Re: procedurka...
Date: Mon, 12 Apr 2004 22:52:12 +0200
Organization: ATMAN
Lines: 65
Message-ID: <c5f0dl$msk$2@news.atman.pl>
References: <c575ud$ak5$1@news.onet.pl> <c59aa3$31jn$2@news.atman.pl> <c59bfs$fgg$1@news.onet.pl>
NNTP-Posting-Host: staticline702.toya.net.pl
Mime-Version: 1.0
X-Trace: news.atman.pl 1081804021 23444 217.113.228.127 (12 Apr 2004 21:07:01 GMT)
X-Complaints-To: use...@atman.pl
NNTP-Posting-Date: Mon, 12 Apr 2004 21:07:01 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit