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

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

Не получается выполнить процедуру.


SergP. ©   (2006-08-31 12:27:00) 

ADO, ORACLE, Provider=OraOLEDB.Oracle

ADCmd:TAdocommand;
ADQuery:TAdoQuery;

Пишу так:


...
 ADCmd.CommandText:='DataOutput(par1 => :pdate1, par2 => :pdate2, par3 => :ptype, par4 => :charcode, par5 => :mdate1, par6 => :mdate2 ); end;';
 with ADCmd.Parameters do
  begin
    ParamByName('pdate1').DataType:=ftDateTime;
    ParamByName('pdate2').DataType:=ftDateTime;
    ParamByName('ptype').DataType:=ftInteger;
    ParamByName('charcode').DataType:=ftString;
    ParamByName('mdate1').DataType:=ftDateTime;
    ParamByName('mdate2').DataType:=ftDateTime;
  end;

 while not ADQuery.eof do
  begin
    ProgressBar1.Max:=ADQuery.RecordCount;
    ProgressBar1.Position:=ADQuery.RecNo;
    with ADCmd.Parameters do
      begin
        ParamByName('pdate1').value:=trunc(pbdate);
        ParamByName('pdate2').value:=trunc(pedate);
        ParamByName('ptype').value:=ADQuery.fieldByName('pertype').AsInteger;
        ParamByName('charcode').value:=ADQuery.fieldByName('charcode').AsString;
        ParamByName('mdate1').value:=ADQuery.fieldByName('moddate').AsDateTime;
        ParamByName('mdate2').value:=ADQuery.fieldByName('moddate').AsDateTime;
      end;
    ADCmd.Execute;
    Application.ProcessMessages;
    ADQuery.Next;
  end;
end;

Но не хочет работать...
ORA-00900: invalid SQL statement

Что я не правильно делаю?


ANB   (2006-08-31 15:21:00) [1]


> SergP.   (31.08.06 12:47) [8]

Вот не лень же мучиться . . .


Desdechado   (2006-08-31 12:50:00) [2]

> Убрал... Все равно ORA-00900: invalid SQL statement
А кто говорил, что надо убрать?


SergP.   (2006-08-31 12:47:00) [3]

> Где оформленный PL/SQL блок?


Ага.. вроде ясно...

 ADCmd.CommandText:='begin DataOutput(par1 => :pdate1, par2 => :pdate2, par3 => :ptype, par4 => :charcode, par5 => :mdate1, par6 => :mdate2 ); end; ';

теперь работает


Reindeer Moss Eater   (2006-08-31 12:45:00) [4]

>Все равно ORA-00900: invalid SQL statement

А ты типа не можешь в это поверить. И продолжаешь думать что все у тебя валид.


SergP.   (2006-08-31 12:44:00) [5]

> [3] Desdechado ©   (31.08.06 12:39)
> > помогите найти где.
> ... :mdate2 ); end;';


Убрал... Все равно ORA-00900: invalid SQL statement


Reindeer Moss Eater   (2006-08-31 12:43:00) [6]

Ну такая штука в SQLPlus работает:

А у тебя в CommandText разве "такая штука"?
Где оформленный PL/SQL блок?
А если это для контекста SQL то где select?


SergP.   (2006-08-31 12:42:00) [7]

> [3] Desdechado ©   (31.08.06 12:39)
> > помогите найти где.
> ... :mdate2 ); end;';


Щас вытру... попробую... Но на PHP вот это работало:


$var2="par1 => to_date('$dpb','$datefrm'), par2 => to_date('$dpe','$datefrm'), par3 => $pertype, par4 => '$charcode', par5 => to_date('$moddate','$datefrm'), par6 => to_date('$moddate','$datefrm')";

 $sql2="DataOutput($var2); end;";

 $stmt=oci_parse($c1,$sql2);
 OCI_execute($stmt);


Desdechado   (2006-08-31 12:39:00) [8]

> помогите найти где.
... :mdate2 ) ; end;';


SergP.   (2006-08-31 12:37:00) [9]

> [1] Reindeer Moss Eater ©   (31.08.06 12:33)
> Синтаксис видимо нарушаешь.


Ну такая штука в SQLPlus работает:


spool unload.log
declare
   p1 date := to_date('01.01.2006','dd.mm.yyyy');  
   p2 date := to_date('31.12.2006','dd.mm.yyyy');  
   p5 date := to_date('01.12.2005','dd.mm.yyyy');  
   p6 date := to_date('28.02.2006','dd.mm.yyyy');  
   p7 number := 1;
   p9 number := 300;
   p10 number := 1;
   p11 number := 1;

begin                                
   for abc in
   (                                
       select distinct c.ModDate, c.PerType, f.CharCode
       from card c, "FORM" f, ( select distinct CharCode From FormRow ) fr
       where c."FORM" = f.code
         and f.CharCode = fr.CharCode
         and c.PerDate between p1 and p2
         and c.ModDate between p5 and p6    
   ) loop
DataOutput(
                  par1 => p1,          par2 => p2,
                  par3 => abc.PerType, par4 => abc.CharCode,
                  par5 => abc.ModDate, par6 => abc.ModDate
                 );
   end loop;
end;
/
spool off
exit;


если нарушил синтаксис, то помогите найти где...


Reindeer Moss Eater   (2006-08-31 12:33:00) [10]

Синтаксис видимо нарушаешь.


Наверх

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