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

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

Наитупей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;
Неужели не пройдет?


Наверх

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