Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

как отследить sql запрос   Найти похожие ветки 

 
cherman ©   (2005-10-28 12:10) [0]

Есть приложение которое работает с IB. в базе используется лревовилная таблица. нужно вывести все поля (ветви подветви) но не в TreeView. Ниже приведен код где parent - идентификатор родителя а prosm - строка которая содержит идентификаторы уже проспотренных(выведенных) ветвей, соответственно при выборке уже просмотренные исключаются (переменная prosm) , но при выполнение запроса (сам запрос проходит без ошибок ) параметр (sql запрос  ... and where id_naprav not in (:prosm)) игнорируется тоесть ограничения ни как не работают  . Может проблема в создании строки - параметра или кодиковки (в бд кодировка win1251). Помогите разабраться в этом plz.
   parent:=0;
   prosm:="0";
   label1:
   IBQuery1.SQL.Clear;
   IbQuery1.SQL.Add("select * from napravlenie where id_parent=:parent and id_naprav not in (:prosm)" );
   ibquery1.ParamByName("parent").AsInteger:=parent;
   IBquery1.ParamByName("prosm").asstring:=",";
   IBquery1.ParamByName("prosm").asstring:=prosm;
   IBQuery1.Open;
   IBQuery1.First;
   while not IBQUERy1.Eof do
   begin
     Memo1.Lines.add(IBquery1.Fieldbyname ("name_naprav").AsString);
     prosm:=prosm+","+ IBquery1.Fieldbyname("id_naprav").AsString;
     Memo1.Lines.Add(prosm);
     If IBQuery1.FieldByName("potomki_naprav").asinteger=1 then
     begin
       parent:=IBquery1.FieldByname("id_naprav").AsInteger;
       IBQuery1.Close;
       goto label1;
     end
     else
     begin
       IBquery1.Next;
     end;
   end;
   parent:=IBquery1.FieldbyName("id_parent").asinteger;
   IBQUeRY1.Close;
   IBQuery1.SQL.Clear;
   IbQuery1.SQL.Add("select * from napravlenie where id_naprav=:parent");
   ibquery1.ParamByName("parent").AsInteger:=parent;
   IBQuery1.Open;
   parent:=IBQuery1.Fieldbyname("id_parent").asinteger;
   IBquery1.Close;
   prosm:="0,2,3";
   goto    label1;


 
Seg   (2005-10-28 12:16) [1]

  IBquery1.ParamByName("prosm").asstring:=",";
  IBquery1.ParamByName("prosm").asstring:=prosm;


Вот это непонятно. Что за двойная инициализация?


 
msguns ©   (2005-10-28 12:17) [2]

ALTER PROCEDURE DRGOODS_GET_ALLCHILD (
   GID INTEGER)
RETURNS (
   PID INTEGER,
   ID INTEGER,
   FLAG CHAR(1),
   NAME VARCHAR(1024))
AS
begin
 /* Процедура извлечения из древовидного справочника всех
   потомков указанного узла */

 /* Внешний цикл по непосредственным потомкам */
 FOR SELECT G.gdpid, G.gdid, G.gdgroup, G.gdname
   FROM DRGOODS G
   WHERE G.gdpid=:gid
   INTO :pid, :id, :flag, :name
 DO
   BEGIN
     suspend;         /* Передача вы вых. НД */
     /* Проверка на наличие потомков у полученного пряиого потомка */
     IF (EXISTS(
        SELECT GDID FROM drgoods
          WHERE GDPID=:id))
     THEN
       BEGIN    /* Запуск этой же процедуры рекурсивно */
         FOR SELECT pid, id, flag, name
           FROM DRGOODS_GET_ALLCHILD(:id)
           INTO :pid, :id, :flag, :name
         DO
           BEGIN
            suspend;
           END
       END
   END
end


 
Seg   (2005-10-28 12:20) [3]

prosm:="0,2,3";

ботва еще может быть из-за кавычек, которые есть в символьной строке.


 
cherman ©   (2005-10-28 12:25) [4]

to seg
древовидная структура. первый sql запрос для вывода потомка - углубление а второй для выхода на уровень выше.


> IBquery1.ParamByName("prosm").asstring:=",";
>   IBquery1.ParamByName("prosm").asstring:=prosm;

но ведь параметр уже использованных записывется в prosm увеличивается с каждой просмотренной ветвью и соответственно строка параметра все время увеличивается

prosm:=prosm+","+ IBquery1.Fieldbyname("id_naprav").AsString;

и если использовать  
IBquery1.ParamByName("prosm").asstring:=",";
IBquery1.ParamByName("prosm").asstring:=prosm;
то что записывать в prosm если прости идентификаторы то получится
... and where id_naprav not in (,3345676)


 
cherman ©   (2005-10-28 12:33) [5]

и еще есть ли в delphi возможность отследить sql запрос (его текст с параметрами уже в иде чисел или строк а не :param) который передается серверу для выполнения


 
Seg   (2005-10-28 12:39) [6]

sql запрос (его текст с параметрами уже в иде чисел или строк

Query1.SQL.Text


 
cherman ©   (2005-10-28 12:49) [7]

to serg

при использовании Query1.SQL.TEXT;
Memo1.Lines.Add(IBQuery1.sql.Text);
выводит
select * from naprav where id_parent=:parent and id_naprav not in (:prosm);
а мне надо не :parent а их числовые значения для определения параметра prosm


 
msguns ©   (2005-10-28 12:57) [8]

>cherman ©   (28.10.05 12:49) [7]
>а мне надо..

Может все-таки глянешь [2] ?
А мне надо полсотни до завтра.
Детский сад какой-то..


 
Desdechado ©   (2005-10-28 13:03) [9]

списки IN нельзя передавать параметром


 
Digitman ©   (2005-10-28 13:16) [10]


> cherman ©   (28.10.05 12:33) [5]


см. TIBSQLMonitor


 
Seg   (2005-10-28 13:46) [11]

Тогда затолкай текст запроса сначала в переменную, потом добавь параметры, а потом уже в запрос.


 
cherman ©   (2005-10-28 14:15) [12]

to Seg
Спасибо большое так и сделал и все заработало!!!


 
Seg   (2005-10-28 14:39) [13]

Это называется "динамический" SQL. Поздравляю.



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
2-1133123060
John Doe
2005-11-27 23:24
2005.12.11
Недекларированная SysMsgProc и ее параметры


2-1132816955
Андрюша
2005-11-24 10:22
2005.12.11
e в степени ln(x)? Как сделать?


14-1132329259
Loginov Dmitry
2005-11-18 18:54
2005.12.11
Это глюк или так должно быть?


3-1130397012
solenko
2005-10-27 11:10
2005.12.11
Русский язык в 16-ти разрядном InterBase


2-1132664750
JTAG
2005-11-22 16:05
2005.12.11
Народ еще вопрос по командной строке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский