Delphi命令写入MSSQL数据库

时间:2015-03-22 17:06:08

标签: sql-server delphi

您好我正在尝试使用Delphi XE7将值写入MSSQL快速数据库。 我来自oracle背景并使用此命令:

PRISMProject.frmMain.ADODataSet2.CommandText :=
   'INSERT INTO matter VALUES (Desc,IntRef,InvRef,Cost,MType,AccMan);';

问题是表名。 你能告诉我将值插入MSSQL数据库的语法吗? 感谢

整个程序:

procedure TfrmMatter.btnSaveClick(Sender: TObject);
var Desc, MType, AccMan : string;
    IntRef, InvRef : integer;
    Cost : double;
begin
  Desc := edtDesc.Text;
  edtDesc.Clear;
  MType := edtType.Text;
  edtType.Clear;
  AccMan := edtAcc.Text;
  edtAcc.Clear;
  if edtIntRef.Text <> '' then
    IntRef := StrToInt(edtIntRef.Text)
  else
    IntRef := 0;
  edtIntRef.Clear;
  if edtInvRef.Text <> '' then
    InvRef := StrToInt(edtInvRef.Text)
  else
    InvRef := 0;
  edtInvRef.Clear;
  if edtCost.Text <> '' then
    Cost := StrToFloat(edtCost.Text)
  else
    Cost := 0;
  edtCost.Clear;
  PRISMProject.frmMain.ADODataSet2.Close;
  PRISMProject.frmMain.ADODataSet2.CommandText :=
  'GO INSERT INTO PRISM.matter VALUES (Desc,IntRef,InvRef,Cost,MType,AccMan)';
  PRISMProject.frmMain.ClientDataSet2.Open;
  PRISMProject.frmMain.ClientDataSet2.Refresh;
  lblConfirm.Caption := 'Matter saved successfully';
  edtDesc.SetFocus;
end;

2 个答案:

答案 0 :(得分:4)

您正试图在SQL语句中嵌入变量,这将永远不会奏效。一旦它们在引号之间,它们就不再是变量;它们只是简单地嵌入在SQL语句中的文本。

您需要使用参数,并将值分配给这些参数:

ADODataSet2.CommandText :=
  'INSERT INTO matter VALUES (:Desc, :IntRef, :InvRef, :Cost, :MType,:AccMan);';

ADODataSet2.Parameters.ParamByName('Desc').Value := Desc;
ADODataSet2.Parameters.ParamByName('IntRef').Value := IntRef;
ADODataSet2.Parameters.ParamByName('Cost').Value := Cost;
// etc. for the rest of the parameters and values

说了这么多,你就是在艰难地做事。 TADODataSet直接支持InsertAppend,因此您根本不需要SQL语句。

ADODataSet2.Insert;
ADODataSet2.FieldByName('Desc').Value := Desc;
ADODataSet2.FieldByName('IntRef').Value := IntRef;
ADODataSet2.FieldByName('Cost').Value := Cost;
// etc for remaining fields
ADODataSet2.Post;

答案 1 :(得分:2)

以下是有关如何插入的MSDN文档:

https://msdn.microsoft.com/en-us/library/ms174335.aspx

这是另一篇文章,其中有一些插入示例,如果上面的文档有点过于技术性。其中一个应该涵盖你想要做的事情。

https://technet.microsoft.com/en-us/library/dd776381(v=sql.105).aspx

我要提到的另一件事是你必须引用数据库中的表,而不仅仅是数据库。所以你的插页靠近正确的轨道,但它更接近

insert into matter.<schema>.<tableName> (desc, intref, invref, cost, mtype, accman)
...