delphi中插入Oracle数据的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中插入Oracle数据的问题相关的知识,希望对你有一定的参考价值。
我是一个菜鸟,最近在写毕业设计
我用Delphi7中的DBE方式连接Oracle,现在想用Query组件向Oracle插入数据,数据库中有4条字段,假设为a,b,c,d,其中a,b为varchar()型,c为number型,d为日期型,想插入的数据为:插入a的是一个字符串变量a1,插入b的是edit1.text,插入c的是integer型变量c1,插入d的是当前系统日期时间
我这么写老出错
SQL.Add('insert into TRANSACTION(TSID,TSCARKIND,TSPID,TSWEIGHT,TSMONEY,TSDATE,TSPSID) values(''&Tsmney&'',''&combobox1.Text&'',''&edit3.Text&'',''&strtoint(edit2.text)&'',''&strtoint(panel3.Caption)&'',''&now&'',''&UserID&'')');
delphi中是用+连接的
SQL.Add('insert into TRANSACTION'+'(TSID,TSCARKIND,TSPID,TSWEIGHT,TSMONEY,TSDATE,TSPSID) '+'values(''Tsmney'','''+combobox1.Text+''','''+edit3.Text+''','+edit2.text+','+panel3.Caption+','''+ datetostr(now) + ''','''+UserID+''')');
试试。
now的地方可能需要修改,用formatdatetime函数吧。formatedatetime('yyyymmddhhnnss',now)? 参考技术A 为什么会加&?
delphi中是用+连接的
SQL.Add('insert
into
TRANSACTION'+'(TSID,TSCARKIND,TSPID,TSWEIGHT,TSMONEY,TSDATE,TSPSID)
'+'values(''Tsmney'','''+combobox1.Text+''','''+edit3.Text+''','+edit2.text+','+panel3.Caption+','''+
datetostr(now)
+
''','''+UserID+''')');
试试。
now的地方可能需要修改,用formatdatetime函数吧。formatedatetime('yyyymmddhhnnss',now)?
如何从 Delphi 调用 Oracle 函数?
【中文标题】如何从 Delphi 调用 Oracle 函数?【英文标题】:How can I call an Oracle function from Delphi? 【发布时间】:2011-02-26 15:10:48 【问题描述】:我在 Oracle 中创建了一个函数,用于在特定表中插入记录并根据函数内发生的情况返回输出。例如(ins_rec 返回编号)
如何调用此函数并在 Delphi 中查看其输出?
我收到了关于 sql plus 的回复(非常感谢),但我需要知道如何在 Delphi 中执行此操作
【问题讨论】:
欢迎来到***!您可以通过将答案标记为正确来向回答问题的人表示感谢。点击答案旁边的绿色勾号。恐怕我无法帮助您解决这个问题 - 我对德尔福一无所知。 :) 【参考方案1】:只需在查询中将用户定义的函数作为列名传递即可。
例子:
Var
RetValue: Integer;
begin
Query1.Clear;
Query1.Sql.Text := 'Select MyFunction(Param1) FunRetValue from dual';
Query1.Open;
if not Query1.Eof then
begin
RetValue := Query1.FieldByName('FunRetValue').AsInteger;
end;
end;
【讨论】:
Oracle 有 DUAL 特殊表,当您需要这样的东西时可以使用。您的代码可能无法执行您所期望的 - 它可以为如何实现它可能取决于您使用的 DB 访问库(BDE?dbExpress?ADO?其他),有些可能会提供一个“存储过程”组件,它也可以与函数一起使用。
使用匿名 PL/SQL 块调用函数(以及读取返回值的参数)的一般方法,PL/SQL 与 Pascal 非常相似...:
Qry.SQL.Clear;
Qry.SQL.Add('BEGIN');
Qry.SQL.Add(' :Rez := ins_rec;');
Qry.SQL.Add('END;');
// Set the parameter type here...
...
Qry.ExecSQL;
...
ReturnValue := Qry.ParamByName('Rez').Value;
不过,我不会使用函数,而是使用具有 OUT 值的存储过程。此外,Oracle 提供了包,它们是组织过程和函数的一种非常好的方式,它们还提供了有用的特性,如会话变量和初始化/终结部分......非常类似于 Delphi 单元。 p>
【讨论】:
【参考方案3】:我们使用此代码运行 Oracle 存储过程,该代码利用了 BDE(我知道请不要 bash,因为我们使用了 BDE!)
Try
DMod.Database1.Connected:= False;
DMod.Database1.Connected:= True;
with DMod.StoredProc1 do
begin
Active:= False;
ParamByName('V_CASE_IN').AsString:= Trim(strCaseNum);
ParamByName('V_WARRANT_IN').AsString:= strWarrantNum;
ParamByName('V_METRO_COMMENTS').AsString:= strComment;
Prepare;
ExecProc;
Result:= ParamByName('Result').AsString;
end;
Except
【讨论】:
以上是关于delphi中插入Oracle数据的问题的主要内容,如果未能解决你的问题,请参考以下文章