Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2013, 02:01   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию Oracle+Delphi хранение процедур на Update

Здравствуйте ребята ... Тренирую для себя . ест такой простои таблица

Код:
Desc sales
Name        Null     Type         
----------- -------- ------------ 
SALES_ID    NOT NULL NUMBER(10)   
SALES_DATE           DATE         
SALES_NAME  NOT NULL VARCHAR2(50) 
SALES_KOLVO          NUMBER(10)   
SALES_CENA           FLOAT(50)
Создал ХП в Oracle на Update

Код:
create or replace procedure UpdateSales
 (
 p_SALES_ID sales.sales_id%type,
 P_SALES_DATE sales.SALES_DATE%type, --  
 P_SALES_NAME sales.SALES_NAME%type,
 P_SALES_KOLVO sales.sales_kolvo%type, 
 P_SALES_CENA sales.sales_cena%type
 )
as
begin
 update sales
 set SALES_DATE = p_sales_date,
      SALES_NAME = p_sales_name,
      sales_kolvo = p_sales_kolvo,
      sales_cena = p_sales_cena
  where sales_id =p_sales_id; -- 
commit;
End UpdateSales;
Хочу сделать Редактирование запись из Delphi через параметр

p_SALES_ID
P_SALES_DATE
P_SALES_NAME
P_SALES_KOLVO
P_SALES_CENA

Для этого использую компонент OraStoredProc из библиотеку ODAC . Код для Редактирование запись

1. frmMain = это основанное форма
2. frmEdit = это форма для Редактирование запись
3. EditProc = это OraStoredProc
Код:
procedure TfrmMain.btEditClick(Sender: TObject);
begin
     Module.EditProc.StoredProcName := 'UpdateSales';
     Module.EditProc.Prepare;
     frmEdit.dtsale.Date := Module.EditProc.ParamByName('P_SALES_DATE').AsDateTime;
     frmEdit.edname.Text := Module.EditProc.ParamByName('P_SALES_NAME').AsString;
     frmEdit.edKolvo.Text := Module.EditProc.ParamByName('P_SALES_KOLVO').AsString;
     frmEdit.edPrice.Text := Module.EditProc.ParamByName('P_SALES_CENA').AsString;
  frmEdit.ShowModal;
end;
На пример, пользователь стоит на Grid на запись -строке и нажимает кнопка Редактирование запись
Как это правильно надо сделать ? Мне интересно только через ХП через его параметру ...
Пожалуйста помогите и поправите код на Редактирование запись Я же ваши студент ребята Вы меня всегда помогаете
xxbesoxx вне форума Ответить с цитированием
Старый 19.09.2013, 02:17   #2
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Как сделать так что при нажатие кнопка Редактирование запись
почитал все из столбцов . на пример SALES_NAME на frmEdit.Edit .......... и.т.г
xxbesoxx вне форума Ответить с цитированием
Старый 20.09.2013, 01:25   #3
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Ребята не кто не может помочь ?
xxbesoxx вне форума Ответить с цитированием
Старый 20.09.2013, 10:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ребята не кто не может помочь ?
Я лично мало что понял... Вот тот код что выше, чем он не торт?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2013, 11:55   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Stilet Я хочу работать с таблицами через хранение процедур (INSERT, UPDATE и DELETE ) все это операция (DML) делать через хранение процедур потому что читал Преимущества хранимых процедур http://student-learn.ru/conspect.php...nimyh_procedur
Вопрос: на Update не магу разобрать, обновить существующие запись. На INSERT разобрал много пример интернете.

Начинаю создал таблица в Oracle
1.

Код:
CREATE TABLE sales
(
  sales_id number(6) not null,
  sales_date DATE,
  sales_name varchar2(50) not null,
  sales_kolvo NUMERIC(10),
  Sales_cena number(8,2)
 );
2. Создать SEQUENCE

Код:
create sequence sales_seq  start WITH 1 increment BY 1;
3. Создаю хранение процедур на Update
Код:
create or replace procedure UpdateSales
 (
 p_SALES_ID sales.sales_id%type,
 P_SALES_DATE sales.SALES_DATE%type,  
 P_SALES_NAME sales.SALES_NAME%type,
 P_SALES_KOLVO sales.sales_kolvo%type, 
 P_SALES_CENA sales.sales_cena%type
 )
as
begin
 update sales
  set SALES_DATE = p_sales_date,
      SALES_NAME = p_sales_name,
      sales_kolvo = p_sales_kolvo,
      sales_cena = p_sales_cena
  where sales_id =p_sales_id; 
commit;
End UpdateSales;
как работать на Update с это процедуре через Delphi ? OraStoredProc вызвать хранение процедур , Но как я понял ! не имеет прямой доступ на таблицу

Вот через Delphi не работает Update
Код:
Module.EditProc.StoredProcName := 'UpdateSales';
     Module.EditProc.Prepare;
     cxDateEdit1.Date := Module.OraStoredProc1.ParamByName('P_SALES_DATE').AsDateTime;
     cxTextEdit1.Text := Module.OraStoredProc1.ParamByName('P_SALES_NAME').AsString;
     cxTextEdit2.Text := Module.OraStoredProc1.ParamByName('P_SALES_KOLVO').AsString;
     cxTextEdit.Text := Module.OraStoredProc1.ParamByName('P_SALES_CENA').AsString;
     Module.OraStoredProc1.ExecSQL
Пожалуйста помогите как обновить существующие запись через его параметр ?
xxbesoxx вне форума Ответить с цитированием
Старый 20.09.2013, 13:16   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Пожалуйста помогите как обновить существующие запись через его
параметр ?
прежде всего, где ваш проект?
что такое Module?
Какого типа EditProc?

дальше.
вот смотрите, Вы описываете процедуру
Цитата:
Код:
create or replace procedure UpdateSales
 (
 p_SALES_ID sales.sales_id%type,
 P_SALES_DATE sales.SALES_DATE%type,  
 P_SALES_NAME sales.SALES_NAME%type,
 P_SALES_KOLVO sales.sales_kolvo%type, 
 P_SALES_CENA sales.sales_cena%type
 )
as
begin
а потом Вы думаете, что передаёте параметры...
но!!!
Во-первых, где Вы задаёте самый главный (для обновления) параметер - ключевое поле (выделил цветом)?!

но у во-вторых, думаю, что параметры надо присваивать, а не читать:
Код:
Module.OraStoredProc1.ParamByName('P_SALES_ID').AsInteger  := ТутВашID;
Module.OraStoredProc1.ParamByName('P_SALES_DATE').AsDateTime  := cxDateEdit1.Date;
Module.OraStoredProc1.ParamByName('P_SALES_NAME').AsString  :=   cxTextEdit1.Text;
Module.OraStoredProc1.ParamByName('P_SALES_KOLVO').AsInteger  :=  StrToInt( cxTextEdit2.Text );
Module.OraStoredProc1.ParamByName('P_SALES_CENA').AsFloat  :=   StrToFloat( cxTextEdit.Text ) ;

p.s. пишу исходя их логики, возможны нюансы, такого опыта использования StoredProc у меня нет

Последний раз редактировалось Serge_Bliznykov; 20.09.2013 в 13:19.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2013, 15:46   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

frmMain = Это Form1
frmEdit = Это Form2
Module= это DataModule
EditProc = это OraStoredProc
Slqry = это OraQuery

Есть Form1 основное форма ! и Form 2 для редактирование запись

На Form2 есть компонент
-----------------------------------------
dtsale = это cxDateEdit1
edname = это cxTextEdit1
edKolvo = это cxTextEdit2
edPrice = это cxTextEdit3

и кнопка butt = сохранить
-----------------------------------------
На frmMain = Это Form1 пишу . Form2.cxDateEdit1.Date := DataModule.OraQuery.FieldByName('SA LES_DATE').AsDateTime; код понятно ?

Код:
Module.Slqry.Edit;
     frmEdit.dtsale.Date := Module.Slqry.FieldByName('SALES_DATE').AsDateTime;
     frmEdit.edname.Text := Module.Slqry.FieldByName('SALES_NAME').AsString;
     frmEdit.edKolvo.Text := Module.Slqry.FieldByName('SALES_KOLVO').AsString;
     frmEdit.edPrice.Text := Module.Slqry.FieldByName('SALES_CENA').AsString;
     frmEdit.ShowModal;
во-вторых, думаю, что параметры надо присваивать, а не читать: Спасибо

Продолжаю . Почитал данных и из frmEdit = Это Form2 делаю обновления запись
Код:
procedure TfrmEdit.btOKClick(Sender: TObject);
begin
     Module.EditProc.StoredProcName := 'UpdateSales';
     Module.EditProc.Prepare;
     Module.EditProc.ParamByName('P_SALES_DATE').AsDateTime := dtsale.Date;
     Module.EditProc.ParamByName('P_SALES_NAME').AsString := edname.Text;
     Module.EditProc.ParamByName('P_SALES_KOLVO').AsInteger := StrToInt(edKolvo.Text);
     Module.EditProc.ParamByName('P_SALES_CENA').AsFloat := StrToFloat(edPrice.Text) ;
     Module.EditProc.ExecSQL;
     Module.Slqry.Refresh;
     frmEdit.Close;
end;
Запись не обновляется ! Что я делаю не правильно ?
xxbesoxx вне форума Ответить с цитированием
Старый 20.09.2013, 15:51   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Это условия процедур

------------------------------------------------
Код:
begin
 update sales
  set SALES_DATE = p_sales_date,
      SALES_NAME = p_sales_name,
      sales_kolvo = p_sales_kolvo,
      sales_cena = p_sales_cena
  where sales_id =p_sales_id; 
commit;
End UpdateSales;
------------------------------------
xxbesoxx вне форума Ответить с цитированием
Старый 20.09.2013, 15:55   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Где задается параметр p_sales_id при обращении к процедуре?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.09.2013, 16:00   #10
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Аватар спасибо за внимание .... Смотрите процедуру procedure UpdateSales
---------------------------------------------------
begin
update sales
set SALES_DATE = p_sales_date,
SALES_NAME = p_sales_name,
sales_kolvo = p_sales_kolvo,
sales_cena = p_sales_cena
where sales_id =p_sales_id; -- Я здесь говорю что обновить данных которых sales_id =p_sales_id ( Я не хочу обновить sales_id ) он нумеруется с помощью SEQUENCE
commit;
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi xe5 хранение настроек на android saragosa Общие вопросы Delphi 2 17.09.2013 13:18
NEW значение в UPDATE триггере Oracle Raz0r SQL, базы данных 7 07.11.2012 20:15
Написание процедур select, delete, update, insert (с выходным параметром) NatRez SQL, базы данных 4 21.10.2012 19:54
Delphi, синтаксис UPDATE DeadWarlock Помощь студентам 1 07.12.2011 22:59
Программа Хранение паролей в Delphi ChEaTeR-abc Помощь студентам 19 07.07.2010 08:35