D+MySQL - nowy rekord i procedury wbudowane

0

Sytuacja wyglada tak:

są dwa DataSety - jeden Masterowy (Naglowek), drugi Detailowy (Pozycje)- nie są w aplikacji tak powiązane, ale maja taki logiczny zwiazek w bazie.

uzytkownik dodaje nowy rekord w Naglowku (aplikacja wykonuje operacje Insert-Post-Edit, zeby uzyskac kolejny identyfikator dla klucza glownego - pole AUTO_INCREMENT), wybiera z DBLookupow wartosci ze slownikow, w tym jedno kluczowe.

po drodze nie robi zapisu naglowka.

Przechodzi do dodawania rekordow w Pozycjach. Po zapisaniu rekordu w Pozycjach wykonywana jest operacja UPDATE z wywolaniem funkcji skladowanej, ktora wykonuje pewne obliczenia i opiera sie o pole kluczowe z Naglowka.

Klopot polega na tym, ze dla naglowka nie zostala wywolana metoda Post i dane nie trafily do bazy, bo ta operacja wykonywana jest przy zapisuwaniu calosci.

Wiem, ze popelniam tutaj kilka bledow logicznych, ale ten modul zostal napisane juz dosc dawno temu, kiedy jeszcze raczkowalem (teraz pewnie jest niewiele lepiej, ale przynajmniej zaczynam cos rozumiec).

Pytanie brzmi: Jak logicznei poukladac zapisy, zeby wbudowane funkcje i procedury dostawaly poprawne dane (takie jak uzytkownik wprowadza na biezaco), kiedy wykorzystuja one dane zawarte w logicznie powiazanych datasetach Master i Detail.

mam nadzieje, ze nie zagmatwalem tematu - jakby co bede pojasnial bardziej.

0

raz piszesz że zrobiłeś post nagłówka.. innym razem że nie.. to jak w końcu?
chyba że POST jest ale COMMIT nie.. wtedy problem wynikałby prawdopodobnie z osobnej transakcji dla pozycji.. czy jest jedna?

0

Widocznie zagmatwalem.

napisalem, ze aplikacja po kliknieciu "Nowy" wykonuje operacje Insert-Post-Edit, zeby uzyskac nowy identyfikator w tabeli Masterowej (i miec po czym zwiazac Master z Detailem). Dalej dataset dziala w trybie Edit. W tym trybie aktualizowane jest tez pole kluczowe dla dalszych obliczen.

tryb Edit istnieje rowniez w trakcie edytowania dataseta Detailowego.

dziala to mneij wiecej tak:

Master Insert
Master Post
Master Edit
Detail Insert
Detail Post
Detail Update
Detail Refresh
Detail Insert
Detail Post
Detail Update
Detail Refresh
...
Master Post

klopot w tym, ze kazdorazowo po wykonaniu operacji "Detail Post" wywolywane jest polecenie UPDATE, ktore aktualizuje trzy pola w datasetcie Detailowym.

Na w tym momencie rozwiazalem to w taki sposob, ze kazdorazowo, kiedy zmieniona zostanie wartosc ktoregokolwiek pola w Naglowku (edytka wywola zdarzenie onChange) wykonywana jest operacja:

Naglowek Post
Naglowek Edit

o ile naglowej jest w stanie Insert lub Edit.

Ale to rozwiazanie nie jest eleganckie, ale na w tym momencie nie przychodzi mi nic lepszego do glowy.

Aha. Nie ma transakcji. Nie ma bo nie umiem sobie z nimi poradzic w MySQLu - to znaczy za malo je rozumiem, albo czegos nie ustawiam, albo cos ustawiam zle. W kazdym razie zawsze jak otwieram transakcje - cala tabela jest blokowana (uzywam InnoDB) i blokuje prace innych uzytkownikow. Na razie musi leciec bez transakcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1