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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 23:58   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию Oracle Процедура. передать запись через Delphi

Здравствуйте ребята. Задача такой, создать Oracle процедура и через Delphi вызывать это процедура и делать INSERT

1. на пример создал таблица

Код:
CREATE TABLE sales
(
  sales_id numeric(10) not null,
  sales_date DATE,
  sales_name varchar2(50) not null,
  sales_kolvo NUMERIC(10),
  Sales_cena FLOAT(126)
 );
2. создал последовател

Код:
create sequence sales_seq  start WITH 1 increment BY 1;
3. создать тригер before insert

Код:
CREATE  TRIGGER  Sales -- b.i. = "before insert" -- 
before INSERT ON SALES FOR each row -- при добавления таблице sales
begin
  -- даем возможность заполнять поле произвольными значениями
  -- используем последовательность, только если передан NULL
  IF :new.SALES_ID IS NULL then -- если SALES_ID равно нул 
    SELECT sales_seq.NEXTVAL -- тогда ползуеть  последовател sales_seq и добавляеть ID +1
    INTO :new.SALES_ID
    FROM dual;
  end IF;
end;
/
4. создал процедура

Код:
 create or replace procedure Sal_ins (
 p_id sales.sales_id%type,
 p_date sales.sales_date%type,
 p_name sales.sales_name%type,
 p_kolvo sales.sales_kolvo%type,
 p_Cena sales.sales_cena%type) as
 begin
 insert into sales (sales_id, sales_date, sales_name, sales_kolvo, Sales_cena)
 values (p_id, p_date, p_name, p_kolvo, p_Cena );
 end Sal_ins;
5. вызываю-и передаю через SQL Developer

Код:
begin
 Sal_ins(3, '20.05.2012', 'Kofe','5','8.20');
end;
Вопрос : Как вызывать это процедура через Delphi ? До пустим надо добавить запись .
для подключение Oracle использую компонент ODAC OraSession1, OraQuery1, OraDataSource1 Не знаю работать к процедурами через Delphi .
ПОЖАЛУЙСТА ПОКАЖИТЕ ПРИМЕР ИЛИ ДАЙТЕ СИЛКА ГДЕ НАПИСАНО КАК РАБОТАТЬ ПРОЦЕДУРАМИ ЧЕРЕЗ Delphi
xxbesoxx вне форума Ответить с цитированием
Старый 24.05.2013, 00:27   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

OraStoredProc используйте
eval вне форума Ответить с цитированием
Старый 24.05.2013, 00:46   #3
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

eval Пожалуйста если сильно не отвлекаю, Покажите пример. Я через ODAC подключен на Oracle . Что такой OraStoredProc не знаю. Пожалуйста боле подробно я вас прошу
xxbesoxx вне форума Ответить с цитированием
Старый 24.05.2013, 08:17   #4
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

а в чем собсно проблема то, какая ошибка?

Код:
begin
 Sal_ins(3, '20.05.2012', 'Kofe','5','8.20');
end;
почему почти все параметры передаешь строкой?

Код:
begin
 Sal_ins(3, to_date('20.05.2012','dd.mm.yyyy'), 'Kofe',5,8.20);
end;
но будет лучше
Код:
begin
 Sal_ins(:p_id, :p_date, :p_name, :p_kolvo, :p_Cena);
end;
в компоненте OraQuery1 (если не ошибаюсь, вкладка parameters) объяви переменные
и в коде уже присваивай значения, с ODAC не работал не знаю как там пишется, но предположительно OraQuery1.ParamByName('p_id').value := 3, и так со всеми
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 24.05.2013, 23:09   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Добавить данных я магу простим способом

Цитата:
procedure TForm2.cxButton1Click(Sender: TObject);
begin
Form1.OraQuery1.Insert;
form1.OraQuery1.FieldByName('sales_ date').AsDateTime := cxDateEdit1.Date;
form1.OraQuery1.FieldByName('sales_ name').AsString := cxTextEdit1.Text;
form1.OraQuery1.FieldByName('sales_ kolvo').AsString := cxTextEdit2.Text;
form1.OraQuery1.FieldByName('sales_ cena').AsString := cxTextEdit3.Text;
form1.OraQuery1.Post;
form2.Close;

end;
Я не знаю как вызывать это процедура и как делать INSERT ? Как обращаться к базе через процедура ?
xxbesoxx вне форума Ответить с цитированием
Старый 25.05.2013, 14:57   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Insert Я реализовал так.
1. Form1

Цитата:
Form2.ShowModal;
2. из Form2 делаю так . все работает последовательности (sales_seq) добавляет автоматически. Но ребята по ваши взгляд можно еще по луче ?

Код:
procedure TForm2.cxButton1Click(Sender: TObject);
begin
  form1.OraQuery1.SQL.Text := 'SELECT sales_seq.nextval from sales';  //  последовательности (sales_seq)
  form1.OraQuery1.Open;
  form1.OraQuery1.SQL.Text := 'INSERT INTO sales (sales_id, sales_date, sales_name, sales_kolvo, sales_cena) VALUES(:id, :sd, :sn, :sk, :sc)';
  form1.OraQuery1.ParamByName('sd').AsDatetime := cxDateEdit1.Date;
  form1.OraQuery1.ParamByName('sn').AsString := cxTextEdit1.Text;
  form1.OraQuery1.ParamByName('sk').AsString := cxTextEdit2.Text;
  form1.OraQuery1.ParamByName('sc').AsString := cxTextEdit3.Text;
  form1.OraQuery1.ExecSQL;
  form1.OraQuery1.Close;
  form1.OraQuery1.SQL.Clear;
  form1.OraQuery1.SQL.Add('SELECT * FROM sales');
  form1.OraQuery1.Open;
  form2.Close;

end;
xxbesoxx вне форума Ответить с цитированием
Старый 25.05.2013, 15:45   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

еще проверка на Edit можно и иногда нужно

Код:
procedure TForm2.cxButton1Click(Sender: TObject);
begin
  if  (cxDateEdit1.Text<>'') and (cxTextEdit1.Text<>'') and (cxTextEdit2.Text<>'') and (cxTextEdit3.Text<>'') then //проверяем введены ли значения
  begin
  form1.OraQuery1.SQL.Text := 'SELECT sales_seq.nextval from sales';  //  последовательности (sales_seq)
  form1.OraQuery1.Open;
  form1.OraQuery1.SQL.Text := 'INSERT INTO sales (sales_id, sales_date, sales_name, sales_kolvo, sales_cena) VALUES(:id, :sd, :sn, :sk, :sc)';
  form1.OraQuery1.ParamByName('sd').AsDatetime := cxDateEdit1.Date;
  form1.OraQuery1.ParamByName('sn').AsString := cxTextEdit1.Text;
  form1.OraQuery1.ParamByName('sk').AsString := cxTextEdit2.Text;
  form1.OraQuery1.ParamByName('sc').AsString := cxTextEdit3.Text;
  form1.OraQuery1.ExecSQL;
  form1.OraQuery1.Close;
  form1.OraQuery1.SQL.Clear;
  form1.OraQuery1.SQL.Add('SELECT * FROM sales');
  form1.OraQuery1.Open;
  form2.Close;
     end
  else
    begin
       MessageDlg('Заполните все поля пожалуйста !',mtWarning, [mbOK], 0);

end;
end;

end.
xxbesoxx вне форума Ответить с цитированием
Старый 27.05.2013, 01:59   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Ребята можно закрыть тема. Сделал как

Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  OraStoredProc1.StoredProcName := 'Sal_ins';
  OraStoredProc1.Prepare;
  OraStoredProc1.ParamByName('p_date').AsDateTime := cxDateEdit1.Date;
  OraStoredProc1.ParamByName('p_name').AsString := Edit1.Text;
  OraStoredProc1.ParamByName('p_kolvo').AsString := Edit2.Text;
  OraStoredProc1.ParamByName('p_Cena').AsString := Edit3.Text;
  OraStoredProc1.Execute;
  Application.MessageBox('Новая запись успешно добавлено',' сообщения');
  OraQueryProc.Close;
  OraQueryProc.SQL.Clear;
  OraQueryProc.SQL.Add('SELECT * FROM Sales');
  OraQueryProc.Open;
end;
eval Спасибо. я поздно переварил твои намёк

Последний раз редактировалось xxbesoxx; 27.05.2013 в 02:01.
xxbesoxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java процедура в Oracle veter48 Java Базы данных (JDBC, JPA, Hibernate) 4 24.05.2013 15:47
Процедура не позволяет передать больше одного параметра Maryver Microsoft Office Excel 5 15.08.2011 19:11
Чтение и запись данных в InterBase через Delphi Harikolo БД в Delphi 7 29.09.2010 22:46
Запись из Delphi в БД MySQL через DirectMysqlObjects Demien БД в Delphi 1 21.01.2010 18:53
Запись на диск через Delphi delphin100 Общие вопросы Delphi 1 09.10.2007 10:10