delphi 唯一性中的更新和删除代码
Code for UPDATE and DELETE in delphi uniquery
我正在尝试更新和删除我的记录。
我正在使用 dbgrid 来显示数据库,并且我使用 uniquery 来进行查询。
我设法执行了插入查询,但没有执行更新和删除查询。
这是我的代码:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Data.DB,
DBAccess, Uni, UniProvider, MySQLUniProvider, MemDS, Vcl.StdCtrls, DAScript,
UniScript;
type
TForm1 = class(TForm)
UniConnection1: TUniConnection;
MySQLUniProvider1: TMySQLUniProvider;
UniDataSource1: TUniDataSource;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
DBGrid1: TDBGrid;
UniQuery1: TUniQuery;
UniScript1: TUniScript;
procedure Button1Click(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Terminate();
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
UniQuery1.Edit;
UniQuery1.SQL.Add('UPDATE barang SET id:=i, name:=nam, stock:=st where id=:i');
UniQuery1.ParamByName('i').AsString := Edit1.Text;
UniQuery1.ParamByName('nam').AsString := Edit2.Text;
UniQuery1.ParamByName('st').AsString := Edit3.Text;
UniQuery1.ExecSQL;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
UniQuery1.Insert;
UniQuery1.FieldByName('ID').AsString := Edit1.Text;
UniQuery1.FieldByName('Name').AsString := Edit2.Text;
UniQuery1.FieldByName('Stock').AsString := Edit3.Text;
UniQuery1.Post;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
UniQuery1.Edit;
UniQuery1.SQLdelete('DELETE FROM barang where id=:i');
UniQuery1.ParamByName('i').AsString:=edit1.Text;
UniQuery1.ExecSQL;
end;
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
edit1.Text := DBGrid1.Fields[0].asstring;
edit2.text := DBGrid1.Fields[1].asstring;
edit3.Text := DBGrid1.Fields[2].asstring;
end;
end.
谢谢!
您使用的查询语法错误。
该查询不使用 Delphi 语法,并且 :=
在该上下文中没有意义。
将查询更改为:
UniQuery1.SQL.Add('UPDATE barang SET id= :i, name= :nam, stock = :st where id= :i');
:
是一个前缀,告诉 TQuery
这些是命名参数。
此外,set id = :i where id = :i
没有任何意义。
因此,您可以将查询简化为:
UniQuery1.SQL.Add('UPDATE barang SET name= :nam, stock = :st where id= :i');
此外,您不必 insert/edit 查询。
这些方法并不像您认为的那样。
您的 SQL 语句已完成插入和编辑。
不要使用 SQL.Add
。它很慢且容易出错,因为如果您的 SQL 中已经有文本,添加的文本将与已经存在的 SQL 冲突。
永远不要再使用 SQL.Add
。
像这样更改第一种方法:
procedure TForm1.Button4Click(Sender: TObject);
begin
UniQuery1.SQL.Text:= 'UPDATE barang SET name= :nam, stock = :st where id=:i';
UniQuery1.ParamByName('i').AsString := Edit1.Text;
UniQuery1.ParamByName('nam').AsString := Edit2.Text;
UniQuery1.ParamByName('st').AsString := Edit3.Text;
UniQuery1.ExecSQL;
end;
这个方法没有任何意义。
procedure TForm1.Button5Click(Sender: TObject);
begin
UniQuery1.Insert; //insert what? A query is not a table.
UniQuery1.FieldByName('ID').AsString := Edit1.Text;
UniQuery1.FieldByName('Name').AsString := Edit2.Text;
UniQuery1.FieldByName('Stock').AsString := Edit3.Text;
UniQuery1.Post; //makes no sense here.
end;
只需将其替换为 INSERT INTO....
sql 语句即可。
最后一个方法应该如下所示:
procedure TForm1.Button6Click(Sender: TObject);
begin
UniQuery1.SQL.Text:= 'DELETE FROM barang where id=:i';
UniQuery1.ParamByName('i').AsString:=edit1.Text;
UniQuery1.ExecSQL;
end;
您确定没有找到 SQLdelete 方法吗?
你需要重新考虑这个概念。
SQL 语句起作用了。
查询只关心语句是否为 select -> 如果是 Query.Open
.
或者如果它会更改数据 (delete/insert/update) -> 所以 Query.ExecSQL
.
其余的都在 SQL.Text
中完成。
Query.Edit 等等
是的,你可以 Query.Edit.
这会将数据集置于编辑模式并允许用户更改查询中的字段。然后数据库层会将这些更改传输到底层数据库表。
但是,这仅在查询很简单时才有效。如果不是,它会悄悄地中断而不更新你的表。
仅将 edit/insert/delete/post/cancel
等与 Tables
.
一起使用
我正在尝试更新和删除我的记录。 我正在使用 dbgrid 来显示数据库,并且我使用 uniquery 来进行查询。 我设法执行了插入查询,但没有执行更新和删除查询。
这是我的代码:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Data.DB,
DBAccess, Uni, UniProvider, MySQLUniProvider, MemDS, Vcl.StdCtrls, DAScript,
UniScript;
type
TForm1 = class(TForm)
UniConnection1: TUniConnection;
MySQLUniProvider1: TMySQLUniProvider;
UniDataSource1: TUniDataSource;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
DBGrid1: TDBGrid;
UniQuery1: TUniQuery;
UniScript1: TUniScript;
procedure Button1Click(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Terminate();
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
UniQuery1.Edit;
UniQuery1.SQL.Add('UPDATE barang SET id:=i, name:=nam, stock:=st where id=:i');
UniQuery1.ParamByName('i').AsString := Edit1.Text;
UniQuery1.ParamByName('nam').AsString := Edit2.Text;
UniQuery1.ParamByName('st').AsString := Edit3.Text;
UniQuery1.ExecSQL;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
UniQuery1.Insert;
UniQuery1.FieldByName('ID').AsString := Edit1.Text;
UniQuery1.FieldByName('Name').AsString := Edit2.Text;
UniQuery1.FieldByName('Stock').AsString := Edit3.Text;
UniQuery1.Post;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
UniQuery1.Edit;
UniQuery1.SQLdelete('DELETE FROM barang where id=:i');
UniQuery1.ParamByName('i').AsString:=edit1.Text;
UniQuery1.ExecSQL;
end;
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
edit1.Text := DBGrid1.Fields[0].asstring;
edit2.text := DBGrid1.Fields[1].asstring;
edit3.Text := DBGrid1.Fields[2].asstring;
end;
end.
谢谢!
您使用的查询语法错误。
该查询不使用 Delphi 语法,并且 :=
在该上下文中没有意义。
将查询更改为:
UniQuery1.SQL.Add('UPDATE barang SET id= :i, name= :nam, stock = :st where id= :i');
:
是一个前缀,告诉 TQuery
这些是命名参数。
此外,set id = :i where id = :i
没有任何意义。
因此,您可以将查询简化为:
UniQuery1.SQL.Add('UPDATE barang SET name= :nam, stock = :st where id= :i');
此外,您不必 insert/edit 查询。
这些方法并不像您认为的那样。
您的 SQL 语句已完成插入和编辑。
不要使用 SQL.Add
。它很慢且容易出错,因为如果您的 SQL 中已经有文本,添加的文本将与已经存在的 SQL 冲突。
永远不要再使用 SQL.Add
。
像这样更改第一种方法:
procedure TForm1.Button4Click(Sender: TObject);
begin
UniQuery1.SQL.Text:= 'UPDATE barang SET name= :nam, stock = :st where id=:i';
UniQuery1.ParamByName('i').AsString := Edit1.Text;
UniQuery1.ParamByName('nam').AsString := Edit2.Text;
UniQuery1.ParamByName('st').AsString := Edit3.Text;
UniQuery1.ExecSQL;
end;
这个方法没有任何意义。
procedure TForm1.Button5Click(Sender: TObject);
begin
UniQuery1.Insert; //insert what? A query is not a table.
UniQuery1.FieldByName('ID').AsString := Edit1.Text;
UniQuery1.FieldByName('Name').AsString := Edit2.Text;
UniQuery1.FieldByName('Stock').AsString := Edit3.Text;
UniQuery1.Post; //makes no sense here.
end;
只需将其替换为 INSERT INTO....
sql 语句即可。
最后一个方法应该如下所示:
procedure TForm1.Button6Click(Sender: TObject);
begin
UniQuery1.SQL.Text:= 'DELETE FROM barang where id=:i';
UniQuery1.ParamByName('i').AsString:=edit1.Text;
UniQuery1.ExecSQL;
end;
您确定没有找到 SQLdelete 方法吗?
你需要重新考虑这个概念。
SQL 语句起作用了。
查询只关心语句是否为 select -> 如果是 Query.Open
.
或者如果它会更改数据 (delete/insert/update) -> 所以 Query.ExecSQL
.
其余的都在 SQL.Text
中完成。
Query.Edit 等等
是的,你可以 Query.Edit.
这会将数据集置于编辑模式并允许用户更改查询中的字段。然后数据库层会将这些更改传输到底层数据库表。
但是,这仅在查询很简单时才有效。如果不是,它会悄悄地中断而不更新你的表。
仅将 edit/insert/delete/post/cancel
等与 Tables
.