![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Наитупей6ий вопрос
xroot © (2006-03-10 00:44:00)Вот сижу значит и пишу SQL запрос, написал, врубил в SQL. Все нормально. НО... При попытке программно присвоить SQL.Text данный запрос вылетает ошибка типа
[Error] Unit_FormMain.pas(74): String literals may have at most 255 elements
Логично, 4то string до 255, но делить запрос на части и клеить их + тоже не хо4ется.
AnsiString и WideString держут до 2Gb, но как правильно переформатить их?
То есть:
var
WideSQL: widestring;
begin
WideSQL := ......
SQL.TEXT := String(WideSQL);
end;
Не проходит! Помогите!
ЮЮ (2006-03-10 03:49:00) [1]
> но делить запрос на части и клеить их + тоже не хо4ется.
А придется. Код, если к нему относиться уважительно при написании, вообще не должен вылазить за 81 колонку (серая полоса в редакторе кода - для красоты что ли нарисована?). И как читать твой запрос потом? SQL код в программе должен быть так же лекгочитаем и форматирован, как и код самой программы.
Например:
sql :=
'SELECT llg.*, ISNULL(ug.NAME, mug.NAME) GroupName, wp.ID WorkPlan ' +
'FROM '+
'( SELECT ' +
'LoadLine , gsg.UGroup, NULL SuperGroup, sg.ID SubGroup,' +
'GroupSubGroup, SubGroupCount, SubGroupIndex, BudgetRatio,' +
'PayRatio ' +
'FROM' +
'S_SubGroups sg ' +
'LEFT JOIN S_GroupSubGroups gsg ON sg.GroupSubGroup = gsg.ID ' +
'WHERE '
'LoadLine IN (SELECT ID FROM S_loadLines WHERE [load] = :LoadID) ' +
'UNION ' +
'SELECT ' +
'LoadLine , ig.UGroup, sg.ID SuperGroup, NULL,' +
'NULL, NULL, NULL , NULL, NULL ' +
'FROM ' +
'S_SuperGroups sg ' +
'LEFT JOIN S_IncludedGroups ig ON sg.ID = ig.SuperGroup ' +
'WHERE ' +
'LoadLine IN (SELECT ID FROM S_loadLines WHERE [load] = :LoadID)' +
') llg ' +
'LEFT JOIN U_GROUPS ug on llg.Ugroup = ug.ID ' +
'LEFT JOIN U_GROUPS mug on ug.Ugroup = mug.ID ' +
'LEFT JOIN U_WorkPlans wp on wp.ID = ISNULL(ug.WorkPlan, mug.WorkPlan) ' +
'ORDER BY LoadLine, SuperGroup, SubGroup, llg.UGroup'
Джо (2006-03-10 03:46:00) [2]> [12] Германн © (10.03.06 03:09)
> Эт точно!
> Токмо ведь это и тебя касается, Серёга! Не чувствуешь себя
> обделённым?
Иногда бывает. Выпью — и попускает. Начинаю опять втискивать себя в прокрустово ложе 80 символов по горизонтали :)
Германн (2006-03-10 03:09:00) [3]
> Джо © (10.03.06 03:01) [11]
>
> > [10] Германн © (10.03.06 02:58)
> > А вообще, я не понимаю сего ограничения на длину строки
>
> > в pas-файле!
>
> А это чтобы не наглели! :0)
Эт точно!
Токмо ведь это и тебя касается, Серёга! Не чувствуешь себя обделённым?
Джо (2006-03-10 03:01:00) [4]> [10] Германн © (10.03.06 02:58)
> А вообще, я не понимаю сего ограничения на длину строки
> в pas-файле!
А это чтобы не наглели! :0)
Германн (2006-03-10 02:58:00) [5]2 xroot (10.03.06 02:03) [6]
> Джо © (10.03.06 02:06) [9]
>
> > При попытке программно присвоить SQL.Text данный запрос
>
> > вылетает ошибка типа
> > [Error] Unit_FormMain.pas(74): String literals may have
>
> > at most 255 elements
>
> Это прямая неправда.
Я бы даже назвал это не "неправдой", а наглым враньём! В лучшем случае, полным непониманием сути вещей.
> [Error] Unit_FormMain.pas(74): String literals may have
> at most 255 elements - это сообщение компиллятора, а компиллятор сообщает что-то на этапе компилляции, но уж никак не в рантайме!
По сути сабжа. String literals - это набор символов (строка) в тексте программы. Именно в тексте, т.е. если рассматривать pas-файл как текст, то это набор символов (строка) от его(её) начала до символов LF/CR.
Можно ввести более длинную строку используя символ конкатенации(суммирование строк) "+".
А вообще, я не понимаю сего ограничения на длину строки в pas-файле!
А уж то, что, якобы, компиллятор Дельфи, написан на С - тем более. :)
Джо (2006-03-10 02:06:00) [6]> [6] xroot (10.03.06 02:03)
> Блин, тут вообще кто-то вопросы читает?
Читают.
> Пишу: как переформатировать в стринг.
Что такое "переформатировать в стринг"?
Остальную часть реплики не понял.
Джо (2006-03-10 02:06:00) [7]> При попытке программно присвоить SQL.Text данный запрос
> вылетает ошибка типа
> [Error] Unit_FormMain.pas(74): String literals may have
> at most 255 elements
Это прямая неправда.
Defunct (2006-03-10 02:04:00) [8]xroot (10.03.06 02:03) [6]
Str := 'dsfsdfsdf'+
'zzzzzzzz'+
'..............'+
'dfsdfdf'+ ...
Фирштейн?
xroot (2006-03-10 02:03:00) [9]Блин, тут вообще кто-то вопросы читает? Пишу: как переформатировать в стринг. Загрузить из файла... Это то же, 4то и получить SQL.Text из базы данных или скачать драйвера для модема с сайта производителя!
Джо (2006-03-10 01:25:00) [10]> [4] xroot (10.03.06 01:18)
Так таким строковым константам и не место в непосредственном коде :) Вынеси его в отдельный файл и загружай в переменную :)
xroot (2006-03-10 01:18:00) [11]Я не совсем понял. Даже если обычный стринг до 2Gb, как ему присвоить строку более 255 символов. Т.к. при присвоении
Str := '.....';
Вылетает
[Error] Unit_FormMain.pas(74): String literals may have at most 255 elements
Я конечно не знаток английского, но тут вроде написано: не более 255 эл-тов.
Defunct (2006-03-10 00:57:00) [12]String тоже до 2Gb читайте справку..
var
Str : String;
begin
Str := '.....';
SQL.Text := Str;
xroot (2006-03-10 00:53:00) [13]Труба вылетает при:
WideSQL := ......
palva (2006-03-10 00:50:00) [14]А если убрать кастинг String, и оставить только присваивание, типа
SQL.TEXT := WideSQL;
Неужели не пройдет?