-
Работаю через (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 прописывать значение - тогда поля будут детектиться.
Чего за чудеса такие?
-
ADO по возможности (есть коннект и т.д) проверяет и прописывает параметры и типы. если не возможно, или глюк/неверная интерпретация скрипта то все оставляется на совесть программиста... + кстати дельфя тоже пытается "помочь" если не отключено, добавляет "своих" по разбору скрипта, которые определяет по символу :.
> Чего за чудеса такие? не понимание принципов работы того с чем работаешь.
-
To sniknik ©
> не понимание принципов работы того с чем работаешь.
??????????
Коннект есть, а ситуация та же.
-
> ?????????? к примеру, про ADOStoredProc http://pda.delphimaster.net/?id=1345453966&n=3> Коннект есть, а "и т.д"? и почему думаешь что оракл тебе разберет любой пакет? и вообще должен ли если указано тип - процедура, а в нутрях текст скрипта.
-
To sniknik ©
> к примеру, про ADOStoredProc
Типа, не пользуйся этим?
-
типа пофигу чем, но если пользуешься(+ вопросы о "чудесах") то вряд ли понимаешь...
-
To sniknik ©
Если бы мне было все ясно - не задал бы вопрос. Кроме этого
> типа пофигу чем, но если пользуешься(+ вопросы о "чудесах") > то вряд ли понимаешь...
по-существу можете что-нибудь предложить? Реальный код, например?
-
> [6] Hb (22.08.12 13:57) > по-существу можете
Тебе же прозрачно намекают - не пользуйся этим.
-
To Inovet ©
Чем тогда?
-
> по-существу можете что-нибудь предложить? "существа" у вопроса > Чего за чудеса такие? нет.
можешь, по-существу, спросить? или хотя бы указать задаваемый тип пакета и сам пакет команд, для "визуализации" чуда.
> Реальный код, например? легко, только чем тебе поможет мой реальный код? ни для понимания ни для копипаста он не сгодится.
-
> Чем тогда? блондинка? в ссылке "не прочиталось"? тогда помадой.
-
> Тебе же прозрачно намекают - не пользуйся этим. + перевод на другой компонент понимания не добавит... это еще одно, непрозрачное "намекание". а то сейчас будет - "заменил как советовали, а ситуация та же."
-
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
public
end;
var
fmMain: TfmMain;
implementation
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
-
и чем ты тут недоволен? тип процедура (cmdStoredProc), у процедуры параметры определены... если верить [0] "автоматом". в чем проблема?
-
sniknik ©
> и чем ты тут недоволен? тип процедура (cmdStoredProc), у > процедуры параметры определены... если верить [0] "автоматом". > > в чем проблема?
Еще раз:
Использую экземпляр класса TAdoStoredProc. Когда процедура не в пакете - никаких проблем. Переношу в пакет - в дизайн-тайм ПАРАМЕТРЫ НЕ ОПРЕДЕЛЯЮТСЯ АВТОМАТОМ - НЕУДОБНО!!! Здесь пример с одной процедурой и с двумя параметрами (in). Реально - много процедур - с большим количеством параметров.
-
> Использую экземпляр класса TAdoStoredProc. > ... > Переношу в пакет т.е. перевожу - "использую компонент для процедур, подсовываю ему текст, и надеюсь на чудо..."
или... в какой пакет? целлофановый?
-
Я бы рад в целлофановый, да домашние не велят: месяца два назад пиво не донес из магазина - биоразлагающийся был, старый, я хотел сэкономить. Пиво дорого вышло: второй раз покупал + пакет новый :-)
Ты хочешь сказать, что не правильно использовать в таком случае TAdoStoredProc? Надо TAdoCommand c CommanType := cmdStoredProc ???
-
> Ты хочешь сказать, что ... > + > перевод на другой компонент понимания не добавит... это еще одно, непрозрачное "намекание". > а то сейчас будет - "заменил как советовали, а ситуация та же." ничего не поможет.
-
> а то сейчас будет - "заменил как советовали, а ситуация та же."
Это Ваши слова.
Перечитайте все что Вы написали внимательно. Ничего конкретного от Вас -одно бла-бла-бла... Ни одной строчки кода. Ничего кроме самомнения. Вы даже [0] осмыслить не смогли.
Если Вы компетентны по теме, где тогда
> > Реальный код, например? > легко, только чем тебе поможет мой реальный код? ни для > понимания ни для копипаста он не сгодится.
Даже копипастить, похоже, не придется: где он ваш реальный код?
-
|