Конференция "Базы" » перенос текстовых данных с Дельфи формы в таблицу Oracle [D7]
 
  • ssa (10.11.08 14:37) [0]
    Доброе время суток!
    Помогите с кодом переноса текстовых данных с  Дельфи формы в таблицу Oracle. Таблица создана. Данные на форме заполняются. Необходимо их записывать нажатием кнопки в таблицу.Одно нажатие - одна запись в таблице.
    с помощью каких компонентов Д7 можно это сделать.
  • GRAND © (10.11.08 14:42) [1]
    Данные на форме в какие компоненты заполняются? Если, например, имеем текст в TMemo, то для непосредственной работы с текстом в БД нужно использовать TDBMemo. TEdit - TDBEdit и т.п. Только надо не забыть, что DB-компоненты требуют привязки к конкретным таблицам и полям в базе: пропертя DataSource и DataField.
  • Sergey13 © (10.11.08 14:46) [2]
    > [0] ssa   (10.11.08 14:37)

    Достаточно прочитать хотя бы одну статейку в стиле "Делфи за 21 день".
  • ssa (10.11.08 14:56) [3]
    Даннае на форме - Edit.text или Combobox.text
    в девелопере могу написать прцедуру (где входные параметры будут тексты с  дельфи формы) вставки данных в таблицу Оракла
     какие лучше компоненты использовать для передачи в процедуру и какой код при этом выполнить
  • Поросенок Винни-Пух © (10.11.08 15:02) [4]
    А какие у тебя есть?
  • Сергей М. © (10.11.08 15:04) [5]

    > какие лучше компоненты использовать для передачи в процедуру


    Когда нет четко обозначенных критериев оценки на "лучше-хуже" и нет желания читать буквари, можно смело использовать первые попавшиеся или никакие не использовать.
  • ssa (10.11.08 15:14) [6]
    У меня D7 и хотел  через хранимую процедуру StoreProc - (stpParus)

        with stpParus do
       begin
         ParamByName('sDOCNUMB').AsString := edtNumber.Text;
         ParamByName('sAGN').AsString := sAGN;
         ParamByName('sTRANSPORT').AsString := edtTransp.Text;
         ParamByName('sNOMEN').AsString := sNM;
        ....
         Prepare;
     ExecProc;
     end;

    а в девелопере такая процедура
    create or replace procedure P_ZL_GRAIN_WEIGHT
    (
     sDOCNUMB       in varchar2,      
     nWEIGHT_TARE   in number,        
     nWEIGHT_BRUTTO in number,        
     dTARE_DATE     in date,          
     dBRUTTO_DATE   in date,          
     sTARE_USER     in varchar2,      
    --  sBRUTTO_USER   in varchar2,      
     sWEIGHTMECH    in varchar2,      
     sAGN           in varchar2,      
     sTRANSPORT     in varchar2,      
     sNOMEN         in varchar2        

    ) is
    nRN1       ZL_SSA_GRAIN_WEIGHT.RN%TYPE;
    nAGN_RN   ZL_SSA_GRAIN_WEIGHT.AGN_RN%TYPE;

    begin

      nRN1 := gen_id;

      SELECT A.RN into nAGN_RN FROM AGNLIST A WHERE TRIM(A.AGNABBR)=TRIM(sAGN);

    insert into ZL_SSA_GRAIN_WEIGHT
    (
    RN,
    COMPANY,
    DOCPREF,
    DOCNUMB,
    WEIGHT_TARE,
    WEIGHT_BRUTTO,
    TARE_DATE,
    BRUTTO_DATE,
    TARE_USER,
    BRUTTO_USER,
    WEIGHTMECH,
    AGN_RN,
    TRANSPORT,
    NOMEN
    )
    values (
    nRN1,
    1710001,
    '08',
    sDOCNUMB,
    nWEIGHT_TARE,
    nWEIGHT_BRUTTO,
    dTARE_DATE,
    dBRUTTO_DATE,
    sTARE_USER,
    sTARE_USER,
    --sBRUTTO_USER,
    sWEIGHTMECH,
    nAGN_RN,
    sTRANSPORT,
    sNOMEN  
    );
    commit;  
     
       
    end P_ZL_GRAIN_WEIGHT;
  • ssa (10.11.08 15:21) [7]
    во первых не спрашивает логин и пароль
    хотя в LoginPromt - true и Params - указан логин и пароль
  • ssa (10.11.08 15:23) [8]
    при выполнении sp возникает ошибка no logon on
    где неправильно у меня
  • Сергей М. © (10.11.08 15:38) [9]
    для начала настрой правильно BDE-алиас
  • ssa (10.11.08 15:55) [10]
    бде настроил, указал имя процедуры увидел параметры
    создал кнопку где прописал
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      with  sP1 do
      begin
       ParamByName('SDOCNUMB').AsString:=Edit2.Text;
       ParamByName('NWEIGHT_TARE').Value:=strtofloat(Edit6.Text);
       ParamByName('NWEIGHT_BRUTTO').Value:=strtofloat(Edit7.Text);
       ParamByName('DTARE_DATE').AsDateTime:=now;
       ParamByName('DBRUTTO_DATE').AsDateTime:=now;
       ParamByName('STARE_USER').AsString:=Edit2.Text;
       ParamByName('SWEIGHTMECH').AsString:=Edit2.Text;
       ParamByName('SAGN').AsString:=Edit3.Text;
       ParamByName('STRANSPORT').AsString:=Edit4.Text;
       ParamByName('SNOMEN').AsString:=Edit5.Text;
       Prepare;
       Execute;
      end;
    end;

    при компиляции
    ошибка [Fatal Error] PrTest.dpr(2): Read error on 'c:\program files\borland\delphi7\Lib\System.dcu'
  • MsGuns © (10.11.08 15:56) [11]
    Через какие компоненты работаете ?
    Очевидно, запрос даже не доходит до сервера.
  • ssa (10.11.08 15:57) [12]
    Database1: TDatabase;
       SP1: TStoredProc;
  • Поросенок Винни-Пух © (10.11.08 16:00) [13]
    ошибка [Fatal Error] PrTest.dpr(2): Read error on 'c:\program files\borland\delphi7\Lib\System.dcu'

    У тебя компьютер плохой. менять надо.
  • ssa (10.11.08 16:19) [14]
    эту ошибку я победил
    не могу  not logged on Alias ZLAK - ora 01012
  • ssa (10.11.08 16:23) [15]
    для
    Database1: TDatabase;
      SP1: TStoredProc;
    как свойства изначально выставить
    (типа Active, SessionName, Connected,KeepConnection...
  • ssa (10.11.08 16:25) [16]
    ORA-01012 not logged on

    Cause: A host language program issued an Oracle call, other than OLON or OLOGON, without being logged on to  Oracle. This can occur when a user process attempts to access the database after the instance it is connected to  terminates, forcing the process to disconnect.
  • ANB (11.11.08 18:49) [17]

    > ssa   (10.11.08 16:23) [15]
    > для
    > Database1: TDatabase;
    >   SP1: TStoredProc;
    > как свойства изначально выставить
    > (типа Active, SessionName, Connected,KeepConnection...

    Тебе оракл честно говорит - законнектся сначала, потом дергай хранимки.

    ODAC поставь - на седняшний момент одна из самых удобных библиотек.
  • MsGuns © (11.11.08 22:35) [18]
    Если работаете через BDE, то ей нужен алиас. Создайте и настройте его например в BDE администраторе, а затем подключите TDataBase к этому алиасу. Которче, справка по TDataBase + TSession Вам все подробно расскажет
  • Petr V. Abramov © (11.11.08 23:17) [19]

    > Cause: A host language program issued an Oracle call, other
    > than OLON or OLOGON

    похоже, пытаются работать в режиме совместимости с Oracle7
    Автор, скажи, какие компоненты используешь, версию Oracle, и как пытаешься коннектиться.
  • ssa (12.11.08 15:54) [20]
    Connected to:
    Oracle8i Release 8.1.7.4.1

    через

       DataSource1: TDataSource;
       Query1: TQuery;
       Table1: TTable;
    если указываю альяс для таблиц Paradox35
    все срабатывает - вот фрагмент программы:
    ...
    procedure TForm1.QurPsk(TmpIn:String);
    begin
       if Query1.State <> dsInactive  then
      Query1.close;
      Query1.SQL.Clear;
      Query1.SQL.Add(TmpIn);
      try
      if not Query1.Prepared then
      begin
       Query1.Unidirectional:=True;
       Query1.Prepare;
       end;
     Query1.ExecSQL;
     showmessage('insert');
     except
     on EDBEngineError do
     begin showmessage('Запрос не выполнен !'); end;
     end ;
    end;

    procedure TForm1.Button10Click(Sender: TObject);
    begin
       TmpIn:='INSERT INTO W_ALL.DB(RN,COMPANY,DOCPREF,DOCNUMB,'+
            'W_T, W_B, D_T, D_B, U_T, U_B, WM, TR, NOMEN,AGN)'+
     ' VALUES(' +
             '8'+Edit1.Text        +','+         //RN
             '17100001'            +','+         //COMPANY
     '"'+    Edit2.Text        +'"'+','+         //DOCPREF
     '"'+    Edit1.Text        +'"'+','+         //DOCNUMB
             Edit5.Text            +','+         //W_T
             Edit6.Text            +','+         //W_B
     '"'+    DateToStr(now)    +'"'+','+         //D_T
     '"'+    DateToStr(now)    +'"'+','+         //D_T
     '"'+    'VESOVAYA3'       +'"'+','+         //U_T
     '"'+    'VESOVAYA3'       +'"'+','+         //U_B
     '"'+    'Автовесы №3'     +'"'+','+         //WM
     '"'+    Edit2.Text        +'"'+','+         //TR
     '"'+    ComboBox2.Text    +'"'+','+         //NOMEN
     '"'+    ComboBox1.Text    +'"'+')';         //AGN}
    Form1.QurPsk(TmpIn);

    end;
    ...

    но хотелось скидывать эту информацию в БД Oracle8i Release 8.1.7.4.1
  • MsGuns © (12.11.08 16:01) [21]
    Какое отношение [20] имеет к сабжу ?
    К тому же код ужасный как по форме, так и по содержанию
  • ssa (12.11.08 16:35) [22]
    [20] - пример переноса текстовых данных с д7 в парадох 35 таблицы,
    если указываю альяс оракловый и оракловую таблицу в Table1,
    то не могу приконнектиться к БД Oracle - ошибка ORA-01012 not logged on
    компоненты для соединения используются следующие
      DataSource1: TDataSource;
      Query1: TQuery;
      Table1: TTable;
  • MsGuns © (12.11.08 22:35) [23]
    Попробуйте открыть БД через SQL Explorer, используя созданный оракловый алиас
  • ssa (13.11.08 06:15) [24]
    БД через SQL Explorer открывается нормально
  • Sergey13 © (13.11.08 08:19) [25]
    > [20] ssa   (12.11.08 15:54)

    > if Query1.State <> dsInactive  then
    >  Query1.close;
    >  Query1.SQL.Clear;
    > Query1.SQL.Add(TmpIn);
    >  try
    >  if not Query1.Prepared then
    >  begin
    >   Query1.Unidirectional:=True;
    >   Query1.Prepare;
    >   end;
    > Query1.ExecSQL;

    Попробуй сократить до

    Query1.SQL.Text=TmpIn;
     try
    Query1.ExecSQL;
  • Petr V. Abramov © (13.11.08 10:58) [26]

    > ssa   (12.11.08 16:35) [22]


    > компоненты для соединения используются следующие
    >   DataSource1: TDataSource;
    >   Query1: TQuery;
    >   Table1: TTable;

    попробуй Query8, должно сработать.
    коннектишься через BDE? dbExpress?
  • ssa (13.11.08 15:01) [27]
    через BDE
  • ssa (13.11.08 15:04) [28]
    попробуй Query8, должно сработать.
    коннектишься через BDE? dbExpress?

    <Цитата>
    Query8 ?
    D8 - восьмая версия Делфи или?
  • ssa (13.11.08 15:09) [29]
    Может быть вставка не срабатывает, тк в оракловой таблице , если смотреть в девелопере есть последний столбик t.rowid ,не относящийся к структуре таблицы zl_weight_all (select t.*, t.rowid from zl_weight_all t)
    ???
  • ssa (13.11.08 15:15) [30]
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    TmpIn:='DELETE FROM PARUS.ZL_WEIGHT_ALL';
    Form1.QurPsk(TmpIn);
    end;

    не срабатывает даже при

    procedure TForm1.QurPsk(TmpIn:String);
    begin
      showmessage(TmpIn);
      Query1.SQL.Text:=TmpIn;
    try
    Query1.ExecSQL;
     except
     on EDBEngineError do
     begin showmessage('Запрос не выполнен !'); end;
     end ;
    end;

    а в экплоеере DELETE FROM PARUS.ZL_WEIGHT_ALL  работает
  • Petr V. Abramov © (13.11.08 23:54) [31]

    > через BDE

    коннекться не через BDE, я  этот глюкавнике не разбираюсь
  • Petr V. Abramov © (13.11.08 23:56) [32]

    > Petr V. Abramov ©   (13.11.08 23:54) [31]

    хотя твое "неработанье" с глюками BDE не связано (скорее всего), читай внимательно про TDatabase, TDataset, какие у них есть св-ва и нафих они нужны
  • ssa (14.11.08 08:44) [33]
    меняю оракловый альяс на альяс БД PDX35 - все начинает работать

    сам оракл без бде работает (ODBC)
    соединения через оракловые службы, tns listener и тд
    но у базы есть альяс в бде
  • ssa (17.11.08 11:51) [34]
    Petr V. Abramov ©   (13.11.08 23:54) [31]

    > через BDE

    коннекться не через BDE, я  этот глюкавнике не разбираюсь

    <Цитата>
    BDE точно глюкавник
    получилось соединиться с СУБД Oracle 8.1.7.4 через ADO !!!
    типа:
    procedure TForm1.Button4Click(Sender: TObject);
    begin

    with ADOQuery1 do begin
    Open;
    Append;
    try SimpleDataSet1.Active := false;
    SimpleDataSet1.DataSet.Active := false;
    SimpleDataSet1.DataSet.CommandText :=
    'insert into parus.ssa_books2(NDOC,AGN,TR,NOMEN,WT,WB) values ( ' +
    '''' +  Edit2.Text + ''', ' +
    '''' +  Edit3.Text + ''', ' +
    '''' +  Edit4.Text + ''', ' +
    '''' +  Edit5.Text + ''', ' +
    '''' +  Edit6.Text + ''', ' +
    '''' +  Edit7.Text + ''')';
    SimpleDataSet1.Active := true;
    SimpleDataSet1.DataSet.Active := true;
    except
    end;
    end;

    использовались компоненты
       DataSource1: TDataSource;
       ADOConnection1: TADOConnection;
       ADOQuery1: TADOQuery;
       SimpleDataSet1: TSimpleDataSet;

    в ADOConnection1: TADOConnection;
    правильно надо выбрать провайдера , а строка подключения у меня-
    Provider=MSDAORA.1;Password=****;User ID=PARUS;Data Source=ZLAK

    спасибо всем !!!
 
Конференция "Базы" » перенос текстовых данных с Дельфи формы в таблицу Oracle [D7]
Есть новые Нет новых   [134477   +39][b:0][p:0.001]