使用存储过程 - delphi编程在sybase db表中插入记录

时间:2014-11-09 12:52:43

标签: sql delphi stored-procedures sybase-asa delphi-xe7

我是使用delphi编程的新手。我目前正在创建一个简单的笔记本程序,我需要一些帮助。我有一个名为5个tEdit字段的联系人表单。我想我可以在我的sybase数据库中创建一个存储过程来将记录插入到Contacts表中,所以我可以用我的delphi程序调用它。如何在delphi中调用此过程?将插入的值应从用户输入到这些tEdit字段中获取。有人有什么建议吗?或者我在想错路?提前谢谢

1 个答案:

答案 0 :(得分:0)

这里有几个选项,它取决于您使用的VCL控件。 (1)。您可以通过tTable组件插入。这让你有一个快速,简单,低级别的控制。您将组件放在窗体上,设置组件属性(tablename等),然后像

MyTable.Open;
MyTable.Insert; (or maybe append)
MyTable.FieldByName('MY_FIELD').AsString := 'Bob'; // set the field values
MyTable.post;

(2)。使用SQL。删除表单上的SQL组件。使用参数设置SQLText属性; 例如:“插入表(MyField)值:X”。我的观点是,在复杂的情况下,相关的子选择等更容易做到。

MySQL.Close;
MySQL.ParamByName('X').AsString := 'BOB';
ExecSQL;

(3)。使用存储过程。 - 这样做的好处是它们可以被多个应用程序使用,并且可以轻松更改。如果要更新SQL代码,则需要更新一次(在数据库中),而不是在应用程序中更改它,然后将应用程序分发给多个用户。

这个代码几乎可以识别为(2),虽然我不知道你的VCL库的具体细节。但实际上,您将指定要运行的例程,指定参数值,然后执行存储过程。

请注意,所有这些例程都将返回错误代码或异常代码。最好始终检查......

这是一个更复杂的例子,使用一个名为qLoader的SQL语句。 qLoader存在于数据模块上。我传递一个参数,执行SQL语句,然后迭代所有结果。

  try
  with dmXLate.qLoader do
     begin

     Close;
     ParamByName('DBTYPE').AsString := DBType;
     Open;

     while not dmXLate.qLoader.Eof do
         begin
         // Here is where we process each result
         UserName:= dmXLate.qLoader.FieldByName('USERNAME').AsString;    

         dmXLate.qLoader.Next;
         end;


      end;

except
      on E: Exception do
      begin
        ShowMEssage(E.Message);
        exit;
      end;
    end;