Article View: alt.pl.comp.lang.csharp
Article #898Re: procedurka...
From: Marek Janaszewski USUNTO. z adre...
Date: Mon, 12 Apr 2004 20:52
Date: Mon, 12 Apr 2004 20:52
64 lines
3596 bytes
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-mailReferences:
<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