![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что значит ошибка Compilied code for this line is too long
Кирей © (2008-08-15 09:21:00)Возникает во время дизайна, когда ADOQuery.active ставлю true интересует собственно, это ограничение ado или ошибка в запросе?
Запрос собран из работающих кусков, проверял уже раз пять полностью.
sniknik (2008-08-19 15:00:00) [1]никак не бороться, это не твой случай, по ссылке
> "через VF OLE DB9.0:",
у тебя
> Тоесть ОДБСне принимает?
> Есть какой ОДБСдля фокса без этих ограничений?
почитай еще раз то, что я писал, в основном насчет различий между ними. это вообще 2 разных драйвера, чисто по недоумению от одной конторы.
Кирей (2008-08-19 14:19:00) [2]вот нашел в чем дело и как бороться, только не знаю как прикрутить к своей проге
http://www.sql.ru/forum/actualthread.aspx?tid=399002&hl=long
Кирей (2008-08-19 14:19:00) [3]вот нашел в чем дело и как бороться, только не знаю как прикрутить к своей проге
http://www.sql.ru/forum/actualthread.aspx?tid=399002&hl=long
sniknik (2008-08-16 14:59:00) [4]"все это" набирается в программке написанной на дельфи, с различными подключениями (провайдерами).
фокспро у меня нет вообще с ... не помню гдето 99-2000 года. писать на нем перестал еще раньше. третий вариант -
select field1, ;
field2 ;
from a
(кстати приведенный только потому, что ты о фоксе вспомнил, о другом значении разделителя в нем) приведен по памяти, и предположительно, непосредственно в фоксе сработает (если память не подводит. даже в новом), а то что получается в дельфевой программке (ошибка) приведено.
Anatoly Podgoretsky (2008-08-16 14:07:00) [5]> sniknik (16.08.2008 12:59:35) [35]
То есть ты это набираешь в ФоксПро, поскольку Дельфи на это обругает и не скомпилирует.
sniknik (2008-08-16 12:59:00) [6]> Приведи полный текст,
все то что приводил сдесь, не более
первый результат для запроса
select * from a ;
select * from d
Выполнено применительно к 87 записям
применительно к 13 записям
второй, ошибка для
select * from a select * from d
EOleException : [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword
> поскольку в ФоксПро символ ";" это продолжение строки.
может быть, по крайней мере раньше в досовом фоксе так и было, когда писал на нем, можно было писать так к примеру
select field1, ;
field2 ;
from a
т.е. это было типа продолжение строки(команды)
сейчас для драйверов ODBC/OLEDB фокса этот синтаксис неверен.
подобный запрос приводит к ошибке
EOleException : [Microsoft][ODBC Visual FoxPro Driver]Command is missing required clause
в общем для ODBC это сейчас разделитель команд, как писал, для OLEDB это завершение команды... т.е. все что после ; будет проигнорировано, и никаких "мультирекордсетов". (разница атас конечно. и это не единственное подобное отличие. нафига они так сделали х.з.)
Anatoly Podgoretsky (2008-08-16 11:44:00) [7]Во всяком случае это другие строки, не физические, поскольку "обычно" любой интерпритатор игнорирует переводы строк и пробелы, делет по лексемам а не по орфографическим элементам.
Anatoly Podgoretsky (2008-08-16 11:41:00) [8]
> нет, в "моем" случае результат
Приведи полный текст, а то по вырваному нельзя сказать, что это, поскольку в ФоксПро символ ";" это продолжение строки.
sniknik (2008-08-15 19:45:00) [9]> вот для mssql это было бы без разницы
без разницы, в смысле, что он бы понял, но к компилятору это бы все одно пришло в виде двух строк (конечно если я правильно себе представляю как они работают).
sniknik (2008-08-15 19:42:00) [10]нет, в "моем" случае результат
Выполнено применительно к 87 записям
применительно к 13 записям
(2 случайных таблици взял)
в "твоем"
EOleException : [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword
у тебя нет разделителя строк ";", вот если вставить то да поймет, но все равно если есть разделитель по которому движок делит, то даже одна строка для него содержит 2. оперирует то он именно ими, а не тем что "пришло" (почему и думаю ошибки должны различаться, т.к. операция до парсинга, над общим текстом, а после операция уже компилятора над строками).
вот для mssql это было бы без разницы, у него парсер более интеллектуальный.
Anatoly Podgoretsky (2008-08-15 18:57:00) [11]> sniknik (15.08.2008 15:30:26) [26]
Здесь два запроса, даже если ты запишешь в одну строку
select * from a select * from d
Кирей (2008-08-15 16:11:00) [12]Закрывайте обсуждение, буду переделывать
Кирей (2008-08-15 16:00:00) [13]
union all
select d.ls, iif(abs(d.pok2-d5.poksn2)<abs(cast(10^d5.znak as integer)+d5.poksn2-d.pok2), abs(d5.poksn2-d.pok2), abs(cast(10^d5.znak as integer)+d5.poksn2-d.pok2)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.datein, d.poksn2, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls)
left join "abon.dbf" d6 on d.ls=d6.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein<iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
union all
select d.ls, iif(abs(d.pok3-d5.poksn3)<abs(cast(10^d5.znak as integer)+d5.poksn3-d.pok3), abs(d5.poksn3-d.pok3), abs(cast(10^d5.znak as integer)+d5.poksn3-d.pok3)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.datein, d.poksn3, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls)
left join "abon.dbf" d6 on d.ls=d6.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein<iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
union all
select d.ls, iif(abs(d.pok4-d5.poksn4)<abs(cast(10^d5.znak as integer)+d5.poksn4-d.pok4), abs(d5.poksn4-d.pok4), abs(cast(10^d5.znak as integer)+d5.poksn4-d.pok4)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join "abon.dbf" d6 on d.ls=d6.ls)
left join(select d.ukod, d.datein, d.poksn4, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein<iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
union all
select d.ls, iif(abs(d5.lastppok-d5.poksn)<abs(cast(10^d5.znak as integer)+d5.poksn-d5.lastppok), abs(d5.poksn-d5.lastppok), abs(cast(10^d5.znak as integer)+d5.poksn-d5.lastppok)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.lastppok, d.datein, d.poksn, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls)
left join "abon.dbf" d6 on d.ls=d6.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datech<d4.data)
and (d5.datein<d4.data)
union all
select d.ls, iif(abs(d5.lastppok2-d5.poksn2)<abs(cast(10^d5.znak as integer)+d5.poksn2-d5.lastppok2), abs(d5.poksn2-d5.lastppok2), abs(cast(10^d5.znak as integer)+d5.poksn2-d5.lastppok2)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.lastppok2, d.datein, d.poksn2, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls)
left join "abon.dbf" d6 on d.ls=d6.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datech<d4.data)
and (d5.datein<d4.data)
union all
select d.ls, iif(abs(d5.lastppok3-d5.poksn3)<abs(cast(10^d5.znak as integer)+d5.poksn3-d5.lastppok3), abs(d5.poksn3-d5.lastppok3), abs(cast(10^d5.znak as integer)+d5.poksn3-d5.lastppok3)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.lastppok3, d.datein, d.poksn3, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls)
left join "abon.dbf" d6 on d.ls=d6.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datech<d4.data)
and (d5.datein<d4.data)
union all
select d.ls, iif(abs(d5.lastppok4-d5.poksn4)<abs(cast(10^d5.znak as integer)+d5.poksn4-d5.lastppok4), abs(d5.poksn4-d5.lastppok4), abs(cast(10^d5.znak as integer)+d5.poksn4-d5.lastppok4)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.lastppok4, d.datein, d.poksn4, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls)
left join "abon.dbf" d6 on d.ls=d6.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datech<d4.data)
and (d5.datein<d4.data)
union all
select d.ls, iif(abs(d5.npok-d4.pok)<abs(cast(10^d5.znak as integer)+d4.pok-d5.npok), abs(d4.pok-d5.npok), abs(cast(10^d5.znak as integer)+d4.pok-d5.npok)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join "abon.dbf" d6 on d.ls=d6.ls)
left join(select d.ukod, d.datein, d.npok, dd.znak from "lich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d6.ukod=d5.ukod
where (d4.pok>0)
and (d5.datein>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein<d4.data)
and (d4.nzon=1)
union all
select d.ls, iif(abs(d5.npok-d4.pok)<abs(cast(10^d5.znak as integer)+d4.pok-d5.npok), abs(d4.pok-d5.npok), abs(cast(10^d5.znak as integer)+d4.pok-d5.npok)) as kvt
from (("abon.dbf" d
left join "\08_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\09_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.datein, d.npok, dd.znak from "lich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ukod=d5.ukod
where (d4.pok>0)
and (d5.datein>iif(isnull(d2.dateout), d.lastfee, d2.dateout))
and (d5.datein<d4.data)) dd on d.ls=dd.ls
group by d.ls)d1 on d.ls=d1.ls
where (d1.vsegokvt>300) and (d.nzon=0)) d
left join
( select d.ls, d.lastppok, d.fio as abonent, d6.fio as nashkontroler, d3.fio as kontroler, d4.namenp, d5.namestr, d.dom, d.kwart,
trim(d4.NAMENP)+" вул."+trim(d5.NAMESTR) + iif(trim(d.dom)<>"", " б."," ")+ltrim(d.dom) + iif(trim(d.korpus)<>'', "/"," ")+trim(d.korpus) +iif(trim(d.kwart)<>'', " кв."," ")+ltrim(d.kwart) as adress
from ((((("abon.dbf" d
left join "/09_2008//obhod" d2 on d.ls=d2.ls)
left join "/09_2008/cont_zd.dbf" d1 on d2.kodcont=d1.kod_obh)
left join "continf.dbf" d3 on d1.kod_cont=d3.tabn)
left join "npinf.dbf" d4 on d.kodnp=d4.kod)
left join "streetin.dbf" d5 on d.kodstrit=d5.kod)
left join "continf.dbf" d6 on d.kodcont=d6.tabn
) d1 on d.ls=d1.ls
order by 2, 5, 6, 7, 8
Кирей (2008-08-15 15:59:00) [14]
> в ODBC драйвера фокса возможны пакеты команд, и возврат
> "мультирекордсетов".типа select * from a ;select * from
> dс nextrecordset потом.
Где об этом можно подробнее почитать?
> Так ты не приводишь текст запроса, но он не должен быть
> более 8к, и откомпилированый 4К
Текст запроса, но все равно переделывать нужно:
select d1.kontroler, d1.nashkontroler, d.ls, d1.abonent, d1.namenp, d1.namestr, d1.dom, d1.kwart, d1.lastppok as predpok, d.pok as konpok, d.vsegokvt, d1.adress
from
(select d.ls, d1.vsegokvt, d.pok
from "\09_2008\obhod.dbf" d
left join
(select d.ls, sum(dd.kvt) as vsegokvt
from "abon.dbf" d
left join
(select d.ls, iif(abs(d.lastppok-d4.pok)<abs(cast(10^d5.znak as integer)+d4.pok-d.lastppok), abs(d4.pok-d.lastppok), abs(cast(10^d5.znak as integer)+d4.pok-d.lastppok)) as kvt
from (("abon.dbf" d
left join "\08_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\09_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.datein, dd.znak from "lich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ukod=d5.ukod
where (d4.pok>0)
and (d5.datein<d.lastfee)
union all
select d.ls, iif(abs(d.lastppok-d5.poksn)<abs(cast(10^d5.znak as integer)+d5.poksn-d.lastppok), abs(d5.poksn-d.lastppok), abs(cast(10^d5.znak as integer)+d5.poksn-d.lastppok)) as kvt
from (("abon.dbf" d
left join "\08_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\09_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.datein, d.poksn, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d.lastfee, d2.dateout))
and (d5.datein<iif(isnull(d2.dateout), d.lastfee, d2.dateout))
union all
select d.ls, iif(abs(d5.lastppok-d5.poksn)<abs(cast(10^d5.znak as integer)+d5.poksn-d5.lastppok), abs(d5.poksn-d5.lastppok), abs(cast(10^d5.znak as integer)+d5.poksn-d5.lastppok)) as kvt
from (("abon.dbf" d
left join "\08_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\09_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.lastppok, d.datein, d.poksn, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d.lastfee, d2.dateout))
and (d5.datein>iif(isnull(d2.dateout), d.lastfee, d2.dateout))
and (d5.datech<d4.data)
and (d5.datein<d4.data)
union all
select d.ls, iif(abs(d.pok1-d4.pok)<abs(cast(10^d5.znak as integer)+d4.pok-d.pok1), abs(d4.pok-d.pok1), abs(cast(10^d5.znak as integer)+d4.pok-d.pok1)) as kvt
from (((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod.dbf" d4 on d.ls=d4.ls)
left join "abon.dbf" d6 on d.ls=d6.ls)
left join (select d.ukod, d.datein, dd.znak from "lich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d6.ukod=d5.ukod)
where (d4.pok>0) and (d5.datein<d6.lastfee) and (d4.nzon=1)
union all
select d.ls, iif(abs(d.pok2-d4.pok)<abs(cast(10^d5.znak as integer)+d4.pok-d.pok2), abs(d4.pok-d.pok2), abs(cast(10^d5.znak as integer)+d4.pok-d.pok2)) as kvt
from (((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod.dbf" d4 on d.ls=d4.ls)
left join "abon.dbf" d6 on d.ls=d6.ls)
left join (select d.ukod, d.datein, dd.znak from "lich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d6.ukod=d5.ukod)
where (d4.pok>0) and (d5.datein<d6.lastfee) and (d4.nzon=2)
union all
select d.ls, iif(abs(d.pok3-d4.pok)<abs(cast(10^d5.znak as integer)+d4.pok-d.pok3), abs(d4.pok-d.pok3), abs(cast(10^d5.znak as integer)+d4.pok-d.pok3)) as kvt
from (((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod.dbf" d4 on d.ls=d4.ls)
left join "abon.dbf" d6 on d.ls=d6.ls)
left join (select d.ukod, d.datein, dd.znak from "lich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d6.ukod=d5.ukod)
where (d4.pok>0) and (d5.datein<d6.lastfee) and (d4.nzon=3)
union all
select d.ls, iif(abs(d.pok4-d4.pok)<abs(cast(10^d5.znak as integer)+d4.pok-d.pok4), abs(d4.pok-d.pok4), abs(cast(10^d5.znak as integer)+d4.pok-d.pok4)) as kvt
from (((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod.dbf" d4 on d.ls=d4.ls)
left join "abon.dbf" d6 on d.ls=d6.ls)
left join (select d.ukod, d.datein, dd.znak from "lich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d6.ukod=d5.ukod)
where (d4.pok>0) and (d5.datein<d6.lastfee) and (d4.nzon=4)
union all
select d.ls, iif(abs(d.pok1-d5.poksn)<abs(cast(10^d5.znak as integer)+d5.poksn-d.pok1), abs(d5.poksn-d.pok1), abs(cast(10^d5.znak as integer)+d5.poksn-d.pok1)) as kvt
from ((("\07_2008\zonkvt.dbf" d
left join "\07_2008\nach.dbf" d2 on d.ls=d2.ls)
left join "\08_2008\obhod" d4 on d.ls=d4.ls)
left join(select d.ukod, d.datein, d.poksn, d.ls, d.datech, dd.znak from "chlich.dbf" d, "lichinf.dbf" dd where d.shifr=dd.kod) d5 on d.ls=d5.ls)
left join "abon.dbf" d6 on d.ls=d6.ls
where (d4.pok>0)
and (d5.datech>iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
and (d5.datein<iif(isnull(d2.dateout), d6.lastfee, d2.dateout))
sniknik (2008-08-15 15:30:00) [15]> Так вот в ФоксПро одна строка означает не одну строку, а весь запрос
не может быть. в ODBC драйвера фокса возможны пакеты команд, и возврат "мультирекордсетов".
типа
select * from a ;
select * from d
с nextrecordset потом.
что полностью, имхо, исключает равенство строка = запрос... т.к. в таком случае это было бы невозможно. (хотя я конечно могу и неправильно интерпретировать принципы по каким он работает...)
Anatoly Podgoretsky (2008-08-15 15:23:00) [16]
> для случая который имел в виду АП. попробуй чтонибудь (процедуру
> к примеру) написать в одну строку (> 256 символов вроде),
> получишь то же самое только из другого места.
Общего только строка, но случаи разные.
Anatoly Podgoretsky (2008-08-15 15:21:00) [17]> sniknik © (15.08.08 15:16) [20]
Он какой то не разговорчивый, ближе к партизану, чем к человеку, может думает, что это нам нужно решение.
http://www.podgoretsky.com/Redir.aspx?id=213&DownloadFile=~/ddp/howtoask.aspx
Anatoly Podgoretsky (2008-08-15 15:19:00) [18]
> какой еще запрос, если в ссылке речь про строку?
После того как выяснилось что речь про Visual FoxPro то многое стало понятнее, но причем тут ODBC, когда далее про тоже, но уже OLE DB
Так вот в ФоксПро одна строка означает не одну строку, а весь запрос, который не может быть более 8К ни в каких случаях. Это из известной базы знаний.
sniknik (2008-08-15 15:18:00) [19]> Так ты не приводишь текст запроса, но он не должен быть более 8к, и откомпилированый 4К
при этом ошибка звучит вроде немного по другому... (?)
Anatoly Podgoretsky (2008-08-15 15:16:00) [20]Кстати информация из [14] должна была быть в [0] + текст запрос или хотя бы информация о размере.