簡體   English   中英

delphi唯一性中的UPDATE和DELETE代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM