1 Востаннє редагувалося Konstantin78 (09.02.2017 23:21:03)

Тема: Після додавання поля lookup в dataset, "access violation" при скроле

Вітання форумчане
Таке питання:
Є БД(FireBird), Є проста програма (без коду) тільки з dataset1 - master, dataset2 - detail, прив'язаний до двох таблиць.

Запит в DataSet1:

SELECT * FROM TABLE1

Запит в DataSet2:

SELECT t2.* FROM TABLE2 t2 WHERE t2.ID _ NAME _ FROM _ TABLE1 = :ID

Працює чудово. Дані коректно відображаються в обох dataset.

Додав в dataset2, нове поле "name", типу lookup(див. мал. внизу), для відображення в нім змісту поля "name" з dataset1.

При скролинге DBGrid(dataset1), помилка:
"Access violation at address 004CC6F0 in module 'Meta.exe'. Read of address 00000014"


За допомогою функції "UseDebug DCUs"("Options - Compiler"), під час цієї помилки мене викидає в модуль "...delphi7\source\vcl\IBCustomDataSet.pas" на рядок №1847(на "function TIBCustomDataSet.IsVisible(Buffer: PChar) : Boolean;")

Помилок в програмі немає, якщо дані(УСІ рядки) dataset1, вміщуються вміщуються в DBGrid

Заздалегідь спасибі.

Post's attachments

linkField.png 10.05 kb, 216 downloads since 2017-02-09 

2

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Яка версія бази і Делфі? Підозрюю, що база свіжа, а Делфі - сімка. Мусите або перейти на стару базу, або на свіжу Делфі.

3

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Torbins написав:

Яка версія бази і Делфі? Підозрюю, що база свіжа, а Делфі - сімка. Мусите або перейти на стару базу, або на свіжу Делфі.

FierBird 2.5
Delphi7
до цього проблем не було..

4

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Скжіть будь ласка - нове поле заповнено? Можливо воно має записи зі значенням NULL?
Наскільки я пам'ятаю - у BCB6(Delphi7) цю ситуацію треба було опрацьовувати.

5

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Konstantin78 написав:

FierBird 2.5

Перший реліз 2010-го року.

Konstantin78 написав:

Delphi7

2002-й рік.

Konstantin78 написав:

до цього проблем не було..

Мабуть щастило.

6

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Torbins написав:
Konstantin78 написав:

FierBird 2.5

Перший реліз 2010-го року.

Konstantin78 написав:

Delphi7

2002-й рік.

Konstantin78 написав:

до цього проблем не було..

Мабуть щастило.

Не думаю. Робота з БД виконуэться через адаптер - то ж ніякого відношення до версії це не має. Звичайно не можна виключати якихось проблем з сумісництвом - але це скоріше виключення, коли інші проблеми виключені.
Щоб перевірити можна наприклад   
Запит в DataSet1:

   

SELECT TABLE1.name as name FROM TABLE1 WHERE TABLE1.name <> NULL

До речі зауваження автору - по перше не дуже гарна ідея використовувати вілдкард у запитах DataSet (та й взагалі це не дуже гарна ідея).
По друге - я б змінив би назву поля - наприклад fname, lookup_name або якесь інше.

7

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Навіщо парити собі мізки з кодом, якому скоро уже п'ятнадцять років виповниться, якщо можна використати свіжішу версію, яку гарантовано тестували з даною версією БД?

Подякували: varkon1

8 Востаннє редагувалося Konstantin78 (11.02.2017 15:13:41)

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Просто для lookup треба використати свій dataset, а не використати вже задіяні, які живуть своїм життям.
Довелося відмовитися від lookup і переписати запит в dataset

9

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Torbins написав:

Навіщо парити собі мізки з кодом, якому скоро уже п'ятнадцять років виповниться, якщо можна використати свіжішу версію, яку гарантовано тестували з даною версією БД?

Та я ж не спорю :)
Я ж уже запитував чому взагали треба користуватися версією компілятора, яка трошки молодша за мене )))

10

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Konstantin78 написав:

Просто для lookup треба використати свій dataset, а не використати вже задіяні, які живуть своїм життям.
Довелося відмовитися від lookup і переписати запит в dataset

Не зрозумів, це про що?

11 Востаннє редагувалося Konstantin78 (11.02.2017 18:46:06)

Re: Після додавання поля lookup в dataset, "access violation" при скроле

varkon написав:

.....
Не зрозумів, це про що?

Про те що це має бути третій, не співпадаючий ні з IBDataSet1, ні IBDataSet2 набір даних, а буде це IBQuery1 або IBDataSet3 - без різниці. І саме його використати для look - up поля

12

Re: Після додавання поля lookup в dataset, "access violation" при скроле

Ну може, мені  - не бачачи проекта сказати досить важко.