![](/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.