-
Доброе время суток! Помогите с кодом переноса текстовых данных с Дельфи формы в таблицу Oracle. Таблица создана. Данные на форме заполняются. Необходимо их записывать нажатием кнопки в таблицу.Одно нажатие - одна запись в таблице. с помощью каких компонентов Д7 можно это сделать.
-
Данные на форме в какие компоненты заполняются? Если, например, имеем текст в TMemo, то для непосредственной работы с текстом в БД нужно использовать TDBMemo. TEdit - TDBEdit и т.п. Только надо не забыть, что DB-компоненты требуют привязки к конкретным таблицам и полям в базе: пропертя DataSource и DataField.
-
> [0] ssa (10.11.08 14:37)
Достаточно прочитать хотя бы одну статейку в стиле "Делфи за 21 день".
-
Даннае на форме - Edit.text или Combobox.text в девелопере могу написать прцедуру (где входные параметры будут тексты с дельфи формы) вставки данных в таблицу Оракла какие лучше компоненты использовать для передачи в процедуру и какой код при этом выполнить
-
А какие у тебя есть?
-
> какие лучше компоненты использовать для передачи в процедуру
Когда нет четко обозначенных критериев оценки на "лучше-хуже" и нет желания читать буквари, можно смело использовать первые попавшиеся или никакие не использовать.
-
У меня 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;
-
во первых не спрашивает логин и пароль хотя в LoginPromt - true и Params - указан логин и пароль
-
при выполнении sp возникает ошибка no logon on где неправильно у меня
-
для начала настрой правильно BDE-алиас
-
бде настроил, указал имя процедуры увидел параметры создал кнопку где прописал 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'
-
Через какие компоненты работаете ? Очевидно, запрос даже не доходит до сервера.
-
Database1: TDatabase; SP1: TStoredProc;
-
ошибка [Fatal Error] PrTest.dpr(2): Read error on 'c:\program files\borland\delphi7\Lib\System.dcu'
У тебя компьютер плохой. менять надо.
-
эту ошибку я победил не могу not logged on Alias ZLAK - ora 01012
-
для Database1: TDatabase; SP1: TStoredProc; как свойства изначально выставить (типа Active, SessionName, Connected,KeepConnection...
-
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.
-
> ssa (10.11.08 16:23) [15] > для > Database1: TDatabase; > SP1: TStoredProc; > как свойства изначально выставить > (типа Active, SessionName, Connected,KeepConnection...
Тебе оракл честно говорит - законнектся сначала, потом дергай хранимки.
ODAC поставь - на седняшний момент одна из самых удобных библиотек.
-
Если работаете через BDE, то ей нужен алиас. Создайте и настройте его например в BDE администраторе, а затем подключите TDataBase к этому алиасу. Которче, справка по TDataBase + TSession Вам все подробно расскажет
-
> Cause: A host language program issued an Oracle call, other > than OLON or OLOGON
похоже, пытаются работать в режиме совместимости с Oracle7 Автор, скажи, какие компоненты используешь, версию Oracle, и как пытаешься коннектиться.
-
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
-
Какое отношение [20] имеет к сабжу ? К тому же код ужасный как по форме, так и по содержанию
-
[20] - пример переноса текстовых данных с д7 в парадох 35 таблицы, если указываю альяс оракловый и оракловую таблицу в Table1, то не могу приконнектиться к БД Oracle - ошибка ORA-01012 not logged on компоненты для соединения используются следующие DataSource1: TDataSource; Query1: TQuery; Table1: TTable;
-
Попробуйте открыть БД через SQL Explorer, используя созданный оракловый алиас
-
БД через SQL Explorer открывается нормально
-
> [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;
-
> ssa (12.11.08 16:35) [22]
> компоненты для соединения используются следующие > DataSource1: TDataSource; > Query1: TQuery; > Table1: TTable;
попробуй Query8, должно сработать. коннектишься через BDE? dbExpress?
-
через BDE
-
попробуй Query8, должно сработать. коннектишься через BDE? dbExpress?
<Цитата> Query8 ? D8 - восьмая версия Делфи или?
-
Может быть вставка не срабатывает, тк в оракловой таблице , если смотреть в девелопере есть последний столбик t.rowid ,не относящийся к структуре таблицы zl_weight_all (select t.*, t.rowid from zl_weight_all t) ???
-
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 работает
-
> через BDE
коннекться не через BDE, я этот глюкавнике не разбираюсь
-
> Petr V. Abramov © (13.11.08 23:54) [31]
хотя твое "неработанье" с глюками BDE не связано (скорее всего), читай внимательно про TDatabase, TDataset, какие у них есть св-ва и нафих они нужны
-
меняю оракловый альяс на альяс БД PDX35 - все начинает работать
сам оракл без бде работает (ODBC) соединения через оракловые службы, tns listener и тд но у базы есть альяс в бде
-
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
спасибо всем !!!
|