Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
ВнизSQL-редактор Найти похожие ветки
← →
Kostafey © (2006-12-02 20:02) [0]Уважаемые мастера!
Вот решил я перед выполнением 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-02 22:02) [1]Ладно, сделал по-старинке через copy()
← →
Kostafey © (2006-12-02 22:51) [2]> Ладно, сделал по-старинке через copy()
Нет, беру слова обратно: решение явно слишком кривое.
← →
Sam Stone © (2006-12-02 22:53) [3]AdvMEmo1.Lines.text:=ss;
Если не поможет - удали все #13#10 и не заморачивайся.
← →
MsGuns © (2006-12-02 22:57) [4]ИМХО, надо разделить проверку синтаксиса от отображения запроса. Последнее делается через банальный TMemo без всяких "левых" компонент.
Проверку синтаксиса вернее всего делать в клиенте того сервера, с которым собираешься работать. Например, для акцеса составлять и выполнять запросы надо в самом акцесе, готовый же и проверенный сиквель просто копировать в код.
← →
Kostafey © (2006-12-02 23:13) [5]> [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.
← →
Sam Stone © (2006-12-02 23:55) [6]> 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;
← →
MsGuns © (2006-12-03 03:31) [7]>Kostafey © (02.12.06 23:13) [5]
>А мне же нужно видеть что стало с SQL после того как в него вставлены некоторые переменные уже в Delphi.
Если запросы пераметрические, то текст запроса не даст ничего, если динамические, то вывести сиквель просто и удобно, воспользовавшись методом SaveToFile
← →
MsGuns © (2006-12-03 03:32) [8]>Sam Stone ©
Вы, батенька, с настойчивостью, достойной лучшего употребления, советуете глупости.
← →
Anatoly Podgoretsky © (2006-12-03 10:52) [9]> Kostafey (02.12.2006 23:13:05) [5]
> А мне же нужно видеть что стало с SQL после того как в него вставлены некоторые переменные уже в Delphi.
Что за переменные в него вставлены?
Совершенно непонятно, что это такое.
← →
Kostafey © (2006-12-04 09:37) [10]> [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 переменная
← →
ЮЮ © (2006-12-04 10:12) [11]
> cc_PCH_COD переменная
из программы? Ну-ну! :)
← →
evvcom © (2006-12-04 10:19) [12]И нафига столько хвостовых пробелов??? А... Это чтоб анализатору жизнь медом не казалась! Понял, теперь :D)
Сделай статический запрос с параметрами и не мудри. Просто, надежно, красиво.
← →
Kostafey © (2006-12-04 15:34) [13]> [11] ЮЮ © (04.12.06 10:12)
> > cc_PCH_COD переменная
> из программы? Ну-ну! :)
Хм. Не понимаю что в этом смешного. Нет, вы скажите, вместе посмеемся !
Вожможно это не корректно и все переменные должны передаваться в запрос через параметры ?
Если так, то на сколько это необходимо ?
> И нафига столько хвостовых пробелов??? А... Это чтоб анализатору
> жизнь медом не казалась! Понял, теперь :D)
Хм. Я об этом что-то не подумал. На результирующий код это не повлияет ?
> Сделай статический запрос с параметрами и не мудри. Просто,
> надежно, красиво.
Да, но сам текст запроса сначала передается в переменную, и лишь в конце присваивается свойству DataSet.CommandText.
← →
Anatoly Podgoretsky © (2006-12-04 16:45) [14]> Kostafey (04.12.2006 15:34:13) [13]
> но сам текст запроса сначала передается в переменную, и лишь в конце присваивается свойству DataSet.CommandText.
и что при присваивании код таинственным образом меняется?
← →
Kostafey © (2006-12-04 17:37) [15]> [14] Anatoly Podgoretsky © (04.12.06 16:45)
Нет, но присваивание происходит в отдельной процедуре, где и задаются параметры.
ПРИ ЭТОМ названия параметров всегда одинаковы, а вот другие динамические элементы запроса могут меняться в зависимости от вида запроса.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.047 c