Конференция "Базы" » Процедура в пакете. DELPHI XE2 ADO/OraOLEDB.Oracle.1
 
  • Hb (22.08.12 10:51) [0]
    Работаю через (ADO/OraOLEDB.Oracle.1)

    Вот такая штука происходит:

    CREATE TABLE PERSONS
    (
     PERSONID    NUMBER(18) NOT NULL,
     PERSONNAME  VARCHAR2(20 BYTE),
     BIRTHDAY    DATE
    )
    ;

    ALTER TABLE PERSONS ADD (
     PRIMARY KEY
     (PERSONID));

    Есть процедура:

    CREATE OR REPLACE PROCEDURE GetSimilar
    (
    p_Name Persons.PersonName%Type,
    p_Birthday Persons.Birthday%Type,

    rcSimilarID OUT sys_refcursor
    )
    IS
    BEGIN
      rcSimilarID := null;
     
      open rcSimilarID for
      select
        cast(PersonID as varchar2(18)) as ID  
      from
        Persons
      where
       (
       Upper(PersonName) = Upper(p_Name)
       and
       Birthday = p_Birthday
       );
    END GetSimilar;

    Использую ADOStoredProc.
    Отлично все работает: в Delphi на disign-time параметры сами создаются (надо только удалить rcSimilarID ),
    поле тоже определяется (Fields editor-Add all fields).

    Теперь помещаем процедуру в пакет. И начинается...
    Коллекция параметров пустая, приходиться прописывать самому. Вызываю Fields Editor - Add all Fields: Неизвестная ошибка: Оказывается, надо каждому параметру в disign-time прописывать значение - тогда поля будут детектиться.

    Чего за чудеса такие?
  • sniknik © (22.08.12 12:04) [1]
    ADO по возможности (есть коннект и т.д) проверяет и прописывает параметры и типы. если не возможно, или глюк/неверная интерпретация скрипта то все оставляется на совесть программиста...
    + кстати дельфя тоже пытается "помочь" если не отключено, добавляет "своих" по разбору скрипта, которые определяет по символу :.

    > Чего за чудеса такие?
    не понимание принципов работы того с чем работаешь.
  • Hb (22.08.12 12:29) [2]
    To sniknik ©  


    > не понимание принципов работы того с чем работаешь.


    ??????????

    Коннект есть, а ситуация та же.
  • sniknik © (22.08.12 12:47) [3]
    > ??????????
    к примеру, про ADOStoredProc
    http://pda.delphimaster.net/?id=1345453966&n=3

    > Коннект есть,
    а "и т.д"? и почему думаешь что оракл тебе разберет любой пакет? и вообще должен ли если указано тип - процедура, а в нутрях текст скрипта.
  • Hb (22.08.12 13:21) [4]
    To sniknik ©


    > к примеру, про ADOStoredProc


    Типа, не пользуйся этим?
  • sniknik © (22.08.12 13:38) [5]
    типа пофигу чем, но если пользуешься(+ вопросы о "чудесах") то вряд ли понимаешь...
  • Hb (22.08.12 13:57) [6]
    To sniknik ©

    Если бы мне было все ясно - не задал бы вопрос.
    Кроме этого


    > типа пофигу чем, но если пользуешься(+ вопросы о "чудесах")
    > то вряд ли понимаешь...


    по-существу можете что-нибудь предложить? Реальный код, например?
  • Inovet © (22.08.12 14:07) [7]
    > [6] Hb   (22.08.12 13:57)
    > по-существу можете

    Тебе же прозрачно намекают - не пользуйся этим.
  • Hb (22.08.12 14:17) [8]
    To Inovet ©

    Чем тогда?
  • sniknik © (22.08.12 14:20) [9]
    > по-существу можете что-нибудь предложить?
    "существа" у вопроса
    > Чего за чудеса такие?
    нет.

    можешь, по-существу, спросить? или хотя бы указать задаваемый тип пакета и сам пакет команд, для "визуализации" чуда.

    > Реальный код, например?
    легко, только  чем тебе поможет мой реальный код? ни для понимания ни для копипаста он не сгодится.
  • sniknik © (22.08.12 14:22) [10]
    > Чем тогда?
    блондинка? в ссылке "не прочиталось"? тогда помадой.
  • sniknik © (22.08.12 14:24) [11]
    > Тебе же прозрачно намекают - не пользуйся этим.
    +
    перевод на другой компонент понимания не добавит... это еще одно, непрозрачное "намекание".
    а то сейчас будет - "заменил как советовали, а ситуация та же."
  • Hb (22.08.12 17:02) [12]
    To sniknik ©


    > можешь, по-существу, спросить? или хотя бы указать задаваемый
    > тип пакета и сам пакет команд, для "визуализации" чуда.


    CREATE OR REPLACE PACKAGE pckgTry AS

    PROCEDURE GetSimilar
    (
    p_Name IN Persons.PersonName%Type,
    p_Birthday IN Persons.Birthday%Type,

    rcSimilarID OUT sys_refcursor
    );

    END pckgTry;
    /
    --------------------------------------------------------
    CREATE OR REPLACE PACKAGE BODY pckgTry
    AS
     PROCEDURE GetSimilar
     (
       p_Name IN Persons.PersonName%TYPE
      ,p_Birthday IN Persons.Birthday%TYPE
      ,rcSimilarID   OUT SYS_REFCURSOR
     )
     IS
     BEGIN
       rcSimilarID := NULL;

       OPEN rcSimilarID FOR
         SELECT
           CAST( PersonID AS VARCHAR2( 18 ) ) AS ID
         FROM
           Persons
         WHERE
           ( UPPER( PersonName ) = UPPER( p_Name )
            AND Birthday = p_Birthday );
     END GetSimilar;
    END pckgTry;
    /

    -----------

    unit Main;

    interface

    uses
     Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
     Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Data.DB,
     Data.Win.ADODB, Vcl.StdCtrls, Vcl.ExtCtrls;

    type
     TfmMain = class(TForm)
       ADOConn: TADOConnection;
       ADOSp: TADOStoredProc;
       ADOSpID: TStringField;
       dsADOSp: TDataSource;
       DBGrid1: TDBGrid;
       Panel1: TPanel;
       Button1: TButton;
       procedure Button1Click(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     fmMain: TfmMain;

    implementation

    {$R *.dfm}

    procedure TfmMain.Button1Click(Sender: TObject);
    begin
     ADOConn.Connected := true;
     ADOSp.Active := true;
    end;

    end.



    ---------------------------------


    object fmMain: TfmMain
     Left = 0
     Top = 0
     Caption = 'fmMain'
     ClientHeight = 190
     ClientWidth = 493
     Color = clBtnFace
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Height = -11
     Font.Name = 'Tahoma'
     Font.Style = []
     OldCreateOrder = False
     PixelsPerInch = 96
     TextHeight = 13
     object DBGrid1: TDBGrid
       Left = 0
       Top = 0
       Width = 493
       Height = 149
       Align = alClient
       DataSource = dsADOSp
       TabOrder = 0
       TitleFont.Charset = DEFAULT_CHARSET
       TitleFont.Color = clWindowText
       TitleFont.Height = -11
       TitleFont.Name = 'Tahoma'
       TitleFont.Style = []
       Columns = <
         item
           Expanded = False
           FieldName = 'ID'
           Visible = True
         end>
     end
     object Panel1: TPanel
       Left = 0
       Top = 149
       Width = 493
       Height = 41
       Align = alBottom
       TabOrder = 1
       object Button1: TButton
         Left = 16
         Top = 8
         Width = 75
         Height = 25
         Caption = 'Button1'
         TabOrder = 0
         OnClick = Button1Click
       end
     end
     object ADOConn: TADOConnection
       ConnectionString =
         'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Sour' +
         'ce=MyDB;Extended Properties=\"PLSQLRset=1\"'
       Mode = cmReadWrite
       Provider = 'OraOLEDB.Oracle.1'
       Left = 64
       Top = 80
     end
     object ADOSp: TADOStoredProc
       Connection = ADOConn
       CursorType = ctStatic
       ProcedureName = 'PCKGTRY.GETSIMILAR'
       Parameters = <
         item
           Name = 'p_Name'
           DataType = ftString
           Size = 7
           Value = 'IVANOFF'
         end
         item
           Name = 'p_Birtday'
           DataType = ftDateTime
           Value = 29567d
         end>
       Prepared = True
       Left = 224
       Top = 80
       object ADOSpID: TStringField
         FieldName = 'ID'
         ReadOnly = True
         Size = 18
       end
     end
     object dsADOSp: TDataSource
       DataSet = ADOSp
       Left = 304
       Top = 80
     end
    end

  • sniknik © (22.08.12 17:25) [13]
    и чем ты тут недоволен? тип процедура (cmdStoredProc), у процедуры параметры определены... если верить [0] "автоматом".
    в чем проблема?
  • Hb (22.08.12 17:46) [14]
    sniknik ©


    > и чем ты тут недоволен? тип процедура (cmdStoredProc), у
    > процедуры параметры определены... если верить [0] "автоматом".
    >  
    > в чем проблема?


    Еще раз:

    Использую экземпляр класса TAdoStoredProc.
    Когда процедура не в пакете - никаких проблем.
    Переношу в пакет - в дизайн-тайм ПАРАМЕТРЫ НЕ ОПРЕДЕЛЯЮТСЯ АВТОМАТОМ - НЕУДОБНО!!! Здесь пример с одной процедурой и с двумя параметрами (in).
    Реально - много процедур - с большим количеством параметров.
  • sniknik © (22.08.12 17:50) [15]
    > Использую экземпляр класса TAdoStoredProc.
    > ...
    > Переношу в пакет
    т.е. перевожу - "использую компонент для процедур, подсовываю ему текст, и надеюсь на чудо..."

    или... в какой пакет? целлофановый?
  • Hb (22.08.12 18:12) [16]
    Я бы рад в целлофановый, да домашние не велят: месяца два назад пиво не донес из магазина - биоразлагающийся был, старый, я хотел сэкономить. Пиво дорого вышло: второй раз покупал + пакет новый :-)

    Ты хочешь сказать, что не правильно использовать в таком случае TAdoStoredProc? Надо TAdoCommand c CommanType := cmdStoredProc ???
  • sniknik © (22.08.12 20:44) [17]
    > Ты хочешь сказать, что ...
    > +
    > перевод на другой компонент понимания не добавит... это еще одно, непрозрачное "намекание".
    > а то сейчас будет - "заменил как советовали, а ситуация та же."
    ничего не поможет.
  • Hb (22.08.12 21:43) [18]
    > а то сейчас будет - "заменил как советовали, а ситуация та же."

    Это Ваши слова.

    Перечитайте все что Вы написали внимательно. Ничего конкретного от Вас -одно бла-бла-бла... Ни одной строчки кода. Ничего кроме самомнения.
    Вы  даже [0] осмыслить не смогли.

    Если Вы компетентны по теме, где тогда


    > > Реальный код, например?
    > легко, только  чем тебе поможет мой реальный код? ни для
    > понимания ни для копипаста он не сгодится.


    Даже копипастить, похоже, не придется: где он ваш реальный код?
  • sniknik © (22.08.12 23:00) [19]
    пример, моего, реального, кода
    чтобы далеко не ходить прямо здесь
    http://pda.delphimaster.net/?id=1259658224&n=5

    помогло?
 
Конференция "Базы" » Процедура в пакете. DELPHI XE2 ADO/OraOLEDB.Oracle.1
Есть новые Нет новых   [119464   +64][b:0][p:0.003]