![](/img/trans.png)
[英]Passing MySQL date range query in Delphi using UniQuery with variable string date values gives me returns NULL
[英]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
几乎没有意义, set id = :i where id = :i
是无操作的。
因此,您可以将查询简化为:
UniQuery1.SQL.Add('UPDATE barang SET name= :nam, stock = :st where id= :i');
另外,您不必插入/编辑查询。
这些方法不会执行您认为的操作。
您的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语句完成的工作。
如果语句是Query.Open
>,则Query只在乎,如果这样,则Query.Open
。
或者,如果它将更改数据(删除/插入/更新)-> Query.ExecSQL
。
其余所有操作均在SQL.Text
完成。
查询。编辑等
是的,您可以执行Query.Edit。
这会将数据集置于编辑模式,并允许用户更改查询中的字段。 然后,数据库层将这些更改传输到基础数据库表。
但是,这仅在查询简单的情况下有效。 如果没有,它将无声地中断并且不会更新您的表。
仅对Tables
使用edit/insert/delete/post/cancel
等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.