![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-редактор
Kostafey © (2006-12-02 20:02:00)Уважаемые мастера!
Вот решил я перед выполнением SQL-запроса давать возможность его просмотреть (подредактировать).
Скачал TAdvMemo для подсветки синтаксиса. Правда она оказалась платной. Приложение перед запуском сообщает, что в нем, мол, используются trial - компоненты. Это можно убрать если перенести форму с этими компонентами в dll и вызывать ее из приложения.
Вопрос- то в чем. Текст SQL-запроса - суть WideString (чтобы потом адресовать ее к DataSet.CommandText).
А как ее корректно внести в TAdvMemo, чтобы запрос выводился многострочно ?
AdvMemo1.Lines.Add(ss); - будет 1 строка.
Я пытался в сам запрос перенос строк внести:
ss:=
'Declare @DateFrom datetime '+#13#10+
'Set @DateFrom = :DateFrom '+#13#10+
...
Тоже бестолку #13#10 превращаются при выводе в квадраты, по прежнему в 1 строку.
Конечно, можно посимвольно прогонять строку и потом ее делить, но это наверное слишком некрасиво.
Если конечно это не единственный вариант ?
Kostafey (2006-12-04 17:37:00) [1]> [14] Anatoly Podgoretsky © (04.12.06 16:45)
Нет, но присваивание происходит в отдельной процедуре, где и задаются параметры.
ПРИ ЭТОМ названия параметров всегда одинаковы, а вот другие динамические элементы запроса могут меняться в зависимости от вида запроса.
Anatoly Podgoretsky (2006-12-04 16:45:00) [2]> Kostafey (04.12.2006 15:34:13) [13]
> но сам текст запроса сначала передается в переменную, и лишь в конце присваивается свойству DataSet.CommandText.
и что при присваивании код таинственным образом меняется?
Kostafey (2006-12-04 15:34:00) [3]> [11] ЮЮ © (04.12.06 10:12)
> > cc_PCH_COD переменная
> из программы? Ну-ну! :)
Хм. Не понимаю что в этом смешного. Нет, вы скажите, вместе посмеемся !
Вожможно это не корректно и все переменные должны передаваться в запрос через параметры ?
Если так, то на сколько это необходимо ?
> И нафига столько хвостовых пробелов??? А... Это чтоб анализатору
> жизнь медом не казалась! Понял, теперь :D)
Хм. Я об этом что-то не подумал. На результирующий код это не повлияет ?
> Сделай статический запрос с параметрами и не мудри. Просто,
> надежно, красиво.
Да, но сам текст запроса сначала передается в переменную, и лишь в конце присваивается свойству DataSet.CommandText.
evvcom (2006-12-04 10:19:00) [4]И нафига столько хвостовых пробелов??? А... Это чтоб анализатору жизнь медом не казалась! Понял, теперь :D)
Сделай статический запрос с параметрами и не мудри. Просто, надежно, красиво.
ЮЮ (2006-12-04 10:12:00) [5]
> cc_PCH_COD переменная
из программы? Ну-ну! :)
Kostafey (2006-12-04 09:37:00) [6]> [9] Anatoly Podgoretsky © (03.12.06 10:52)
> Что за переменные в него вставлены?
> Совершенно непонятно, что это такое.
' LEFT JOIN ZVK1ARX arx '+
' ON ((arx.N_ZVK=z.nzvk) and '+
' (arx.DATE_ZVK between @DateFrom and @DateTo) and '+
' (arx.PCH_COD='+cc_PCH_COD+')) '+
@DateFrom, @DateTo заданы как параметры
cc_PCH_COD переменная
Anatoly Podgoretsky (2006-12-03 10:52:00) [7]> Kostafey (02.12.2006 23:13:05) [5]
> А мне же нужно видеть что стало с SQL после того как в него вставлены некоторые переменные уже в Delphi.
Что за переменные в него вставлены?
Совершенно непонятно, что это такое.
MsGuns (2006-12-03 03:32:00) [8]>Sam Stone ©
Вы, батенька, с настойчивостью, достойной лучшего употребления, советуете глупости.
MsGuns (2006-12-03 03:31:00) [9]>Kostafey © (02.12.06 23:13) [5]
>А мне же нужно видеть что стало с SQL после того как в него вставлены некоторые переменные уже в Delphi.
Если запросы пераметрические, то текст запроса не даст ничего, если динамические, то вывести сиквель просто и удобно, воспользовавшись методом SaveToFile
Sam Stone (2006-12-02 23:55:00) [10]> j:=1;
> for i:=1 to Length(ss) do
> begin
> if ss[i]=#13#10 then
> begin
> sn:=Copy(ss,j,i-1-j);
> j:=i+1;
> AdvMemo1.Lines.Add(sn);
> end;
while pos(#13#10,ss)>0 do delete(ss,pos(#13#10),2);
AdvMemo.Lines.Text:=ss;
Kostafey (2006-12-02 23:13:00) [11]> [3] Sam Stone © (02.12.06 22:53)
> AdvMEmo1.Lines.text:=ss;
> Если не поможет - удали все #13#10 и не заморачивайся.
А вообще, помогло. Спасибо. Пожалуй так и сделаю.
Это ж просто глупость, даже притормаживает немного:
j:=1;
for i:=1 to Length(ss) do
begin
if ss[i]=#13#10 then
begin
sn:=Copy(ss,j,i-1-j);
j:=i+1;
AdvMemo1.Lines.Add(sn);
end;
> [4] MsGuns © (02.12.06 22:57)
> ИМХО, надо разделить проверку синтаксиса от отображения
> запроса. Последнее делается через банальный TMemo без всяких
> "левых" компонент.
Вообще, да. Но я подумал оставить это в конечной версии (а не только для Debug-целей)
Просто хотел 2 зайцев убить.
> Проверку синтаксиса вернее всего делать в клиенте того сервера,
> с которым собираешься работать. Например, для акцеса составлять
> и выполнять запросы надо в самом акцесе, готовый же и проверенный
> сиквель просто копировать в код.
Опять согласен. Но. SQL я сначала пишу в SQL Server Management Studio (врядли ползователь в него полезет).
А мне же нужно видеть что стало с SQL после того как в него вставлены некоторые переменные уже в Delphi.
MsGuns (2006-12-02 22:57:00) [12]ИМХО, надо разделить проверку синтаксиса от отображения запроса. Последнее делается через банальный TMemo без всяких "левых" компонент.
Проверку синтаксиса вернее всего делать в клиенте того сервера, с которым собираешься работать. Например, для акцеса составлять и выполнять запросы надо в самом акцесе, готовый же и проверенный сиквель просто копировать в код.
Sam Stone (2006-12-02 22:53:00) [13]AdvMEmo1.Lines.text:=ss;
Если не поможет - удали все #13#10 и не заморачивайся.
Kostafey (2006-12-02 22:51:00) [14]> Ладно, сделал по-старинке через copy()
Нет, беру слова обратно: решение явно слишком кривое.
Kostafey (2006-12-02 22:02:00) [15]Ладно, сделал по-старинке через copy()