Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

как отследить 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.039 c
6-1125477477
Alex870
2005-08-31 12:37
2005.12.11
Как отловить disconnect


2-1133160924
RealMan
2005-11-28 09:55
2005.12.11
как добавить примечание при печати TStringGrid


11-1084104283
yustas
2004-05-09 16:04
2005.12.11
Хелп


3-1130411344
AlexLines
2005-10-27 15:09
2005.12.11
проблема с escape последовательностью


2-1132721989
KGC
2005-11-23 07:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский