ADO

5 отговора 128 прегледа
#1

ADO

Разраборвам приложение работещо с база данни на ACCESS, като използвам ADO.
Таблиците са две като са свързани по между си чрез Master-Detail връзка.
Всяка таблица е свързана с DBGrid контрола чрез DataSource и ADODataSet.
При въвеждане на данни за запис в DBGrid контрола, в BeforePost на таблицатe записвам
стойностите за ключовете като използвам ADODataSet->RecordCount за да определя номера
на следващия запис.Не искам да използвам AutoNumber на ACCESS, т.е. при изграждане
структурата на таблиците в средата на ACCESS не съм използвал AutoNumber за ключовете.
При Master таблицата се получава, т.е. RecordCount ми връща коректно броя на записите
след което чрез инкрементиране на тази стойност определям ключа за следващия запис.
При детайлната таблица обаче RecordCount ми връща броя на записите в зависимост от това
кой запис е активен в Master таблицата, т.е. ако към активният запис в Master таблицата има
свързани 5 записа в Detail таблицата RecordCount ще ми върне 5, независимо от това, че Detail таблицата има например 15 записа част от които са свързани с други записи на Master таблицата.Т.е. RecordCount не ми връща 15.
Ако някой знае лек за тази болка нека помогне.
Благодаря.

Отговор
в отговор на turtle #2

Re: ADO

Единствения лек - е да се "излекуваш" от идеята която ти е хрумнала - повярвай ми - това ще ти спести много проблеми в бъдеще - ако решиш да разширяваш нещата.

А иначе - просто си направи още един ADOSQL компонент - който да не е вързан за нищо - и му давай като заявка да ти намери най-големия номер в таблица "Детайли"

---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #3

Re: ADO

Reших проблема по следния начин: При отваряне на таблиците с Open()ADODataSet->RecordCount ми връща коректно броя на записите преди да са свързани таблиците.Броят на записите се съхраняват в масив rCount. След това се свързват таблиците и всичко си работи безпогрешно.В AfterInsert() чрез инкремент ++rCount (става въпрос за C++Builder) се получава необходимата стойност за ключа.Обаче ако таблиците са празни при затваряне на набора с данни ADODataSet->Close() има проблем (виж темата "ADO Eof andBof" в клуба). Този проблем определено за момента не мога да го реша защото не зная от къде се появява това изключение.Слагал съм точки на прекъсване в кода на програмата но не мога да го хвана.
Спешно се нуждая от помощ!

Отговор
в отговор на turtle #4

Re: ADO

Нали си сложил update-а за ADO-то? Това в случай че работиш с Delphi 5... "ADO Eof and Bof" грешката се появява в тогава. Не прочетох старата тема и се извинявам ако това е коментирано вече

Отговор
в отговор на Bятъp #5

Re: ADO

Работя с Borland C++Builder 5. Предполагам , че този бъг съществува и там. От къде мога да прочета нещо по темата дори и за Delphi и от къде мога да изтегля Update на ADO за Delphi или C++Builder?

Отговор
в отговор на turtle #6

Re: ADO

Виж това:
[линк]

Отговор