Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

BDE, базы данных [D5, dBase, FoxPro]


Olsab ©   (2004-03-23 16:09:00) 

Уважаемые Мастера!
D5,DBASE, BDE  
 Есть SQL-запрос, который связывает 9 файлов. В зависимости от условий ограничения, выводится разное кол-во записей. На небольших таблицах запрос работает без замечаний, а при увеличении кол-ва записей в таблицах, он перестает работать, реагирует на кол-во выводимых полей и на кол-во связаных таблиц. Выдает ошибку
Access violation at address 00000000 read address 00000000 .
Создается впечатление, что переполняется какой-то буфер. Может кто сталкивался с такой проблемой?


Alex_Bredin   (2004-03-23 17:32:00) [1]

тогда еще вариант - поменять местами поля вот так:

FROM Bxd
left join City on (City.KOD =Bxd.KCITY)
left join Vid on  (Vid.KOD = Bxd.KVID ) итп

не знаю почему, но в некотроых случаях порядок полей в условии иимеет значение


olsab   (2004-03-23 17:25:00) [2]

С последней версией запроса работает, но с добавлением записей в таблице до 70000, вываливается по той же ошибке.
У меня закончился инет. Спасибо


Alex_Bredin   (2004-03-23 17:04:00) [3]

SELECT Bxd.NK, Sp.NAME, Bxd.DAR,Vid.NAME+' '+ Bxd.NOM,
Bxd.DAI, Bxd.ORG, Bxd.OTPR, City.NAME , Bxd.SOD, Bxd.DAV, Bxd.NKS,
Bxd.KONT, Bxd.YE, Bxd.KVID, Bxd.NOM, Bxd.ISXN, Bxd.KSP, Bxd.KCITY,
Bxd.OTM, Bxd.KKUR, Bxd.DATK, Bxd.KTEMA, Skur.NAME kur, Tema.NAME ,
Bxd.KORG, Org.NAME , Bxd.KDEL, Delo.NAME1 , Vid.NAME

FROM Bxd
left join City on (Bxd.KCITY = City.KOD)
left join Vid on  (Bxd.KVID = Vid.KOD)
left join Sp on   (Bxd.KSP = Sp.KOD)  
left join Skur on (Bxd.KKUR = Skur.KOD)
left join Tema on (Bxd.KTEMA = Tema.KOD)
left join Org on  (Bxd.KORG = Org.KOD)
left join Delo on (Bxd.KDEL = Delo.KOD)

where Bxd.otm=1

уфф.
попробуйте


olsab   (2004-03-23 16:56:00) [4]

Поля Delo нет только таблица, а в списке полей это же алиасное имя, оно то особой роли не играет.


Johnmen   (2004-03-23 16:54:00) [5]

>olsab   (23.03.04 16:27) [5]

Т.е. приведенный запрос иногда всё-таки работает ?


Alex_Bredin   (2004-03-23 16:52:00) [6]

да у вас и с именами путаница - DELO например  и поле и таблица


Alex_Bredin   (2004-03-23 16:50:00) [7]


> В DBASE NULL нет по определению, там в незаполненные поля
> ставится 0


первый раз слышу


olsab   (2004-03-23 16:36:00) [8]

В DBASE NULL нет по определению, там в незаполненные поля ставится 0, а в справочниках заведены записи с нулевым значением для того, чтобы было точное соответствие и не надо было писать LEFT OUTER JOIN.
 С INNER JOIN аналогичная ситуация - выдает ошибку


Alex_Bredin   (2004-03-23 16:31:00) [9]

используйте JOIN..ON вместо WHERE
это реакция на NULL в ключевом поле


olsab   (2004-03-23 16:27:00) [10]

SELECT Bxd.NK, Sp.NAME, Bxd.DAR,Vid.NAME+' '+ Bxd.NOM  vid,
Bxd.DAI, Bxd.ORG, Bxd.OTPR, City.NAME city, Bxd.SOD, Bxd.DAV, Bxd.NKS,
Bxd.KONT, Bxd.YE, Bxd.KVID, Bxd.NOM, Bxd.ISXN, Bxd.KSP, Bxd.KCITY,
Bxd.OTM, Bxd.KKUR, Bxd.DATK, Bxd.KTEMA, Skur.NAME kur, Tema.NAME tema,
Bxd.KORG, Org.NAME org_1, Bxd.KDEL, Delo.NAME1 delo, Vid.NAME vidd
FROM "BXD.DBF" Bxd,"CITY.DBF" City,"SP.DBF" Sp,"SKUR.DBF" Skur,
 "TEMA.DBF" Tema,"ORG.DBF" Org,"DELO.DBF" Delo,
 "VID.DBF" Vid
where
   (Bxd.KCITY = City.KOD) and
   (Bxd.KVID = Vid.KOD)  and
   (Bxd.KSP = Sp.KOD)  and
   (Bxd.KKUR = Skur.KOD)  and
   (Bxd.KTEMA = Tema.KOD)  and
   (Bxd.KORG = Org.KOD)  and
   (Bxd.KDEL = Delo.KOD)
 and bxd.otm=1
Одна таблица связывается с 7-ю справочниками для расшифровки кодов и выбираюся, например, выполненные документы(bxd.otm=1)


olsab   (2004-03-23 16:23:00) [11]

Используется локальный SQL не FOXPRO


Alex_Bredin   (2004-03-23 16:21:00) [12]

приведите текст запроса


olsab   (2004-03-23 16:17:00) [13]

Грешить больше не на что. Запрос выполнялся на проверенных данных(которые были тиражируемые, чтобы достичь большего кол-ва записей), выполнялся просто в SQL-Explorer -е


Alex_Bredin   (2004-03-23 16:11:00) [14]

такая ошибка не появляется от увеличения количества записей


Наверх

Титульная страница Поиск, карта сайта Написать письмо