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 特殊表,当您需要这样的东西时可以使用。您的代码可能无法执行您所期望的 - 它可以为 的每一行调用函数 【参考方案2】:

如何实现它可能取决于您使用的 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数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Delphi 调用 Oracle 函数?

从 Oracle 视图插入表

delphi如何远程连接oracle?

Delphi ADO 连接 Oracle

delphi中访问oracle数据库,不安装oracle client,要怎么做

delphi如何连接oracle数据库