Форум: "Потрепаться";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
ВнизКакое ограничение имеет свойство компонента TQuery–SQL по длине? Найти похожие ветки
← →
Sergey_F © (2004-09-30 14:32) [0]Какое ограничение имеет свойство компонента TQuery – SQL по длине скрипта?
Можно ли, больше 256 символов?
И ещё, подскажите, пожалуйста, как в Delphi запустить процедуру или функцию из Oracle?
Спасибо за любые советы и комментарии.
← →
pasha_golub © (2004-09-30 14:39) [1]TQuery.SQL: TStrings
В чем вопрос?
← →
pasha_golub © (2004-09-30 14:41) [2]И в догонку. Не длина скрипта, а длина запроса.
← →
Layner © (2004-09-30 15:13) [3]как в Delphi запустить процедуру или функцию из Oracle?
Что то типа, сейчас синтаксис не помню,
ADOQuery.SQL.Text("EXEC procedura_test");
ADOQuery.Execute.
← →
Ega23 © (2004-09-30 15:26) [4]Можно ли, больше 256 символов?
Ну, если на то пошло, то "больше 255 символов"
← →
Sergey_F © (2004-10-04 15:35) [5]Большое спасибо Layner. Принцип понятен.
Вопрос возник из-за проблемы:Query.SQL.Add("SELECT * FROM Tab Where ...");
Когда запрос "SELECT ..." не большой, всё нормально работает, но если он достаточно большой возникает ошибка.
← →
Polevi © (2004-10-04 15:44) [6]зависит от БД, у MSSQL 4096 байт если не ошибаюсь
← →
Ega23 © (2004-10-04 15:44) [7]но если он достаточно большой возникает ошибка.
Ой что-то не верится мне....
Помню, у меня запросец один был динамический, около 2К. И ничего, всё замечательно "шуршало"...
← →
Fredericco © (2004-10-04 15:47) [8]Ega23 © (30.09.04 15:26) [4]
Вообще то 256 символом, 255 это последний. :-)))
Так что афтар правильно спросил.
← →
Ega23 © (2004-10-04 15:50) [9]Fredericco © (04.10.04 15:47) [8]
Так ведь в нулевом байте в строке такого типа длина строки прописана. А значит, что значащих СИМВОЛОВ в строке не может быть больше, чем 255.
← →
Zacho © (2004-10-04 15:55) [10]У IB - примерно 64K
← →
Fredericco © (2004-10-04 15:58) [11]2 Ega23 © (04.10.04 15:50) [9]
Ты прав.
В нулевой байт мы полезной информации не пишем :-)
Так что он не считается.
← →
Ega23 © (2004-10-04 16:01) [12]Polevi © (04.10.04 15:44) [6]
зависит от БД, у MSSQL 4096 байт если не ошибаюсь
Гм... А как же я тогда БЛОБы по 5 Мб туда-сюда таскаю?
← →
Vlad © (2004-10-04 16:05) [13]
> Ega23 © (04.10.04 16:01) [12]
> Гм... А как же я тогда БЛОБы по 5 Мб туда-сюда таскаю?
как связаны блобы и длина SQL запроса?
← →
Ega23 © (2004-10-04 16:07) [14]как связаны блобы и длина SQL запроса?
Неточно выразился. Бинарные данные я таскаю, причём в виде
0xFFAADD0055.......
Иногда достаточно большие такие вот "кишки".
← →
Vlad © (2004-10-04 16:08) [15]
> Ega23 © (04.10.04 16:07) [14]
ты их подставляешь как параметр в запрос?
← →
Ega23 © (2004-10-04 17:15) [16]Да кабы я помнил! :о)
Сейчас посмотрю...
ss:="Declare @X int Select @X=Max(TimeWinCod)+1 from TimeWins "+
"Insert into TimeWins (TimeWinCod, TimeWinNam, TimeWinLab, TimeWinOrd, TimeWinMsk, TimeWinNot, TimeWinImg) "+
"Values (@X,"+ValX(CDSTimeWins.FieldByName("TimeWinNam").AsString,",")+
ValX(CDSTimeWins.FieldByName("TimeWinLab").AsString,",")+
ValX(CDSTimeWins.FieldByName("TimeWinOrd").AsInteger,",");
if CDSTimeWins.FieldByName("TimeWinMsk").AsBoolean then ss:=ss+"1," else ss:=ss+"0,";
ss:=ss+ValX(CDSTimeWins.FieldByName("TimeWinNot").AsString,",");
ss:=ss+CDSTimeWins.FieldByName("TimeWinImg").AsString+")";
QuExec(DMpas.RQTemp,ss);
← →
Ega23 © (2004-10-04 17:16) [17]Ну да, TimeWinImg - поле типа image
← →
Мюмзик (2004-10-05 08:29) [18]Ega23 ©
я бы тоже хотел знать, как ты их таскаешь и при чем тут длина запроса
← →
Zlod3y © (2004-10-05 09:05) [19]насколько я помню, кажись 64К, и от СУБД не зависит, человек про компоненту (TQuery) спросил ведь
← →
den_777 (2004-10-05 09:36) [20]
> насколько я помню, кажись 64К, и от СУБД не зависит, человек
> про компоненту (TQuery) спросил ведь
Зависит именно от СУБД, причем у некоторых СУБД есть настройки на максимальный размер текста SQL-запроса.(Например в INFORMIX такая настройка точно есть.)
← →
Zlod3y © (2004-10-05 09:40) [21]den_777 (05.10.04 09:36) [20]
ну не про СУБД спросили, а про компонент, неужели так трудно вопрос прочитать, а?
← →
Ega23 © (2004-10-05 09:48) [22]насколько я помню, кажись 64К, и от СУБД не зависит, человек про компоненту (TQuery) спросил ведь
Если бы было так, то, думаю, Борланд жёстко зашил бы данное ограничение в TQuery
← →
Sergey_F © (2004-10-05 10:28) [23]СУБД у меня Oracle 8.17i (хорошо работает и с таблицами более 1,5 мил. строк), в ней этот Select замечательно работает. А когда я его на прямую начинаю в Delphi вставлять возникает проблема. Дело не в СУБД.
← →
den_777 (2004-10-05 11:16) [24]
> ну не про СУБД спросили, а про компонент, неужели так трудно
> вопрос прочитать, а?
Ответ тоже внимательно читать надо, желательно пытаясь понять смысл ответа. Повторюсь. Ограничение именно в СУБД. И как правильно заметил EGA23, что если бы во всех базах было одинаковое ограничение на размер текста SQL-запроса,то Борланд жёстко зашил бы данное ограничение в TQuery.Однако такого ограничения именнов в TQUERY нет.
> Sergey_F © (05.10.04 10:28) [23]
> СУБД у меня Oracle 8.17i (хорошо работает и с таблицами
> более 1,5 мил. строк), в ней этот Select замечательно работает.
> А когда я его на прямую начинаю в Delphi вставлять возникает
> проблема. Дело не в СУБД
Проблема может быть в том, что что когда ты работаешь с ORACLE напрямую (т.е. используя какую-то программу из поставки самого ORACLE ) и когда работаешь через TQUERY (кстати ты до сих пор не назвал набор компонентов через которые работаешь BDE,DBEXPRES или еще что-то) то могут использоваться разные протоколы, в которых соответственно могут быть разные ограничения. Пример из INFORMIX. Когда у меня запрос был более 2кб то из dbaccess(утилита INFORMIX) запрос проходил нормально, а TQUERY(BDE) выдавал ошибку. Разница была именно в протоколах и настройка которая влияла на максимальный размер текста SQL-запроса через сетевые приложения, абсолютно не влияла на dbaccess. Если хочешь чтобы тебе помогли, то назови набор компонентов, размер выполняемого SQL-запроса и ошибку которую возвращает ORACLE-сервер.
← →
Sergey_F © (2004-10-06 17:27) [25]Использую:
TQUERY(BDE) / Используя компонент TDatabase /
Возникает ошибка:
[Error] ORTypeMain.pas(178): String literals may have at most 255 elements
Для проверки использовал запрос:SQL.Clear;
SQL.Add("SELECT kkghjhjghjghjghghjghjghjghjghjghghjghjhgljlkghjghjghjghjghkljjjkdfgdfgdffhgjghjhfffffffffffffgljlkkllkjkljljlkjkljlkjlkj lkjkljkljkljlkkkkdfgdfgfdgfgfddfgfgfdfdgdfgfdgdfgdfgfdgffdglkjkljlkjlkjlkjlkjlkjkljlkjlkjlkjkljljlkjlkjljljlkjljjlkjjdfg dfgdhkjhjhjkhjkhhjhjkjhjhhhkjhjkhkjhjkhkjjjjjjjjjjjjfl FROM dual");
try
Open;
except
on E:Exception do DisplayStatus(E.Message);
end;
Сергей.
← →
Sergey_F © (2004-10-06 18:14) [26]
> den_777 (05.10.04 11:16) [24]
> (кстати ты до сих пор не назвал набор компонентов через
> которые работаешь BDE,DBEXPRES или еще что-то)
А через чего лучьше подключаться к Oracle?
А как можно подключиться миную BDE, ODBC (например используя OCI.DLL) ?
Спасибо!
← →
}|{yk © (2004-10-06 18:20) [27]ODAC
← →
den_777 (2004-10-06 20:25) [28]Замени
> SQL.Add("SELECT kkghjhjghjghjghghjghjghjghjghjghghjghjhgljlkghjghjghjghjghkljjjkdfgdfgdffhgjghjhfffffffffffffgljlkkllkjkljljlkjkljlkjlkj
> lkjkljkljkljlkkkkdfgdfgfdgfgfddfgfgfdfdgdfgfdgdfgdfgfdgffdglkjkljlkjlkjlkjlkjlkjkljlkjlkjlkjkljljlkjlkjljljlkjljjlkjjdfg
> dfgdhkjhjhjkhjkhhjhjkjhjhhhkjhjkhkjhjkhkjjjjjjjjjjjjfl FROM
> dual");
на
SQL.Text:="SELECT kkghjhjghjghjghghjghjghjghjghjghghjghjhgljlkghjghjghjghjghkljjjkdfgdfgdffhgjghjhfffffffffffffgljlkkllkjkljljlkjkljlkjlkj lkjkljkljkljlkkkkdfgdfgfdgfgfddfgfgfdfdgdfgfdgdfgdfgfdgffdglkjkljlkjlkjlkjlkjlkjkljlkjlkjlkjkljljlkjlkjljljlkjljjlkjjdfg dfgdhkjhjhjkhjkhhjhjkjhjhhhkjhjkhkjhjkhkjjjjjjjjjjjjfl FROM dual";
и будет тебе счастье.
Это действительно не имеет никакого отношения к базе данных. Ошибку в следующий раз указывай сразу.
← →
pasha_golub © (2004-10-06 20:28) [29]den_777 (06.10.04 20:25) [28]
Совершенно верно. Я об этом еще во втором посте сказал.
← →
Romkin © (2004-10-06 20:41) [30]Это имеет отношение к BDE: она не селектит поля более 255 символов напрямую. Любое такое поле считается BLOB и тащится отдельно
← →
sniknik © (2004-10-06 23:41) [31]это вообще не имеет отнощения к базам и компонентам, это ограничение компилатора дельфей, нельзя строки больше определенной длинны в нем писать.
разделить вот так, и пройдет
SQL.Add("SELECT kkghjhjghjghjghghjghjghjghjghjghghjghjhgljlkghjghjghjghjghkljjjkdfgdfgdffhgjghjhfffffffffffffgljlkkllkjkljljlkjkljlkjlkj "+
"lkjkljkljkljlkkkkdfgdfgfdgfgfddfgfgfdfdgdfgfdgdfgdfgfdgffdglkjkljlkjlkjlkjlkjlkjkljlkjlkjlkjkljljlkjlkjljljlkjljjlkjjdf g"+
"dfgdhkjhjhjkhjkhhjhjkjhjhhhkjhjkhkjhjkhkjjjjjjjjjjjjfl FROM dual");
← →
Palladin © (2004-10-06 23:46) [32]
> у MSSQL 4096 байт если не ошибаюсь
ошибаешься...
← →
Sergey_F © (2004-10-07 10:18) [33]
> den_777 (06.10.04 20:25) [28]
> Замени
> на
> SQL.Text:="SELECT
> kkghjhjghjghjghghjghjghjghjghjghghjghjhgljlkghjghjghjghjghkljj
> jkdfgdfgdffhgjghjhfffffffffffffgljlkkllkjkljljlkjkljlkjlkj
> lkjkljkljkljlkkkkdfgdfgfdgfgfddfgfgfdfdgdfgfdgdfgdfgfdgffdgl
> kjkljlkjlkjlkjlkjlkjkljlkjlkjlkjkljljlkjlkjljljlkjljjlkjjdfg
> dfgdhkjhjhjkhjkhhjhjkjhjhhhkjhjkhkjhjkhkjjjjjjjjjjjjfl
> FROM dual";
> и будет тебе счастье.
> Это действительно не имеет никакого отношения к базе данных.
> Ошибку в следующий раз указывай сразу.
А это на самом деле большая разница?
> sniknik © (06.10.04 23:41) [31]
> это ограничение компилатора дельфей,
> нельзя строки больше определенной длинны в нем писать.
>
> разделить вот так, и пройдет
> SQL.Add("SELECT kkghjhjghjghjghghjghjghjghjghjghghjghjhgljlkghjghjghjghjghkljjjkdfgdfgdffhgjghjhfffffffffffffgljlkkllkjkljljlkjkljlkjlkj
> "+
> "lkjkljkljkljlkkkkdfgdfgfdgfgfddfgfgfdfdgdfgfdgdfgdfgfdgffdglkjkljlkjlkjlkjlkjlkjkljlkjlkjlkjkljljlkjlkjljljlkjljjlkjjdf
> g"+
> "dfgdhkjhjhjkhjkhhjhjkjhjhhhkjhjkhkjhjkhkjjjjjjjjjjjjfl
> FROM dual");
Хорошая мысль, попробую.
Спасибо!
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.034 c