Delphi7实现数据库增删改查的小程序,但是运行到删除功能那里就会报错搞不定了哪位大侠能帮我解决?谢谢 5
unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,F...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ADOConnection1: TADOConnection;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Button5: TButton;
Edit5: TEdit;
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure Button5Click(Sender: TObject);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
edit5.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject); //增加
begin
ADOQuery1.SQL.Add('insert into SysUntUser values('''+edit1.Text+''','''+edit2.Text+''','''+edit3.Text+''','''+edit4.Text+''')');
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('select*from sysuntuser');
ADOQuery1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);//删除
begin
if ADOQuery1.recordCount=0 then
showMessage('记录为空不能为删除')
else
begin
if MessageDlg('确定要删除吗?',mtInformation,[mbOK,mbCancel],0)=mrOK then
ADOQuery1.delete;
end;
end;
procedure TForm1.Button3Click(Sender: TObject); //修改
begin
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('update SysUntUser set 用户编码='''+trim(edit1.Text)+''',//这句开始报错
用户名称='''+trim(edit2.Text)+''',用户密码='''+trim(edit3.Text)+''',单位名称
='''+trim(edit3.Text)'''');
execsql;
end;
FormShow(Sender);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
adoQuery1.Clear;
adoQuery1.SQL.Add('select*from SysUntUser');
adoQuery1.Open;
end;
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
edit1.Text:=inttostr(ADOQuery1.fieldbyname('用户编码').AsInteger);
edit2.Text:=ADOQuery1.Fieldbyname('用户名称').AsString;
edit3.Text:=ADOQuery1.Fieldbyname('用户密码').AsString;
edit4.Text:=ADOQuery1.Fieldbyname('单位名称').AsString;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select*from sysuntuser where 用户编码='''+edit1.Text+'''');
adoquery1.Open;
end; 展开
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ADOConnection1: TADOConnection;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Button5: TButton;
Edit5: TEdit;
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure Button5Click(Sender: TObject);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
edit5.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject); //增加
begin
ADOQuery1.SQL.Add('insert into SysUntUser values('''+edit1.Text+''','''+edit2.Text+''','''+edit3.Text+''','''+edit4.Text+''')');
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('select*from sysuntuser');
ADOQuery1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);//删除
begin
if ADOQuery1.recordCount=0 then
showMessage('记录为空不能为删除')
else
begin
if MessageDlg('确定要删除吗?',mtInformation,[mbOK,mbCancel],0)=mrOK then
ADOQuery1.delete;
end;
end;
procedure TForm1.Button3Click(Sender: TObject); //修改
begin
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('update SysUntUser set 用户编码='''+trim(edit1.Text)+''',//这句开始报错
用户名称='''+trim(edit2.Text)+''',用户密码='''+trim(edit3.Text)+''',单位名称
='''+trim(edit3.Text)'''');
execsql;
end;
FormShow(Sender);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
adoQuery1.Clear;
adoQuery1.SQL.Add('select*from SysUntUser');
adoQuery1.Open;
end;
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
edit1.Text:=inttostr(ADOQuery1.fieldbyname('用户编码').AsInteger);
edit2.Text:=ADOQuery1.Fieldbyname('用户名称').AsString;
edit3.Text:=ADOQuery1.Fieldbyname('用户密码').AsString;
edit4.Text:=ADOQuery1.Fieldbyname('单位名称').AsString;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select*from sysuntuser where 用户编码='''+edit1.Text+'''');
adoquery1.Open;
end; 展开
展开全部
刚看到了你Update的这一段,这段从语法上看是没有问题的
但是从数据库结构来看就有问题了,你下Update SQL 的时候没有加条件,也就是将这个Table里的所有的记录全部Update 为一样的数据,但是你这个表的 “用户编码”应该是个唯一索引,这个字段不允许有两个相同的数据,所以就会报错
解决方法你可以给它加个条件如下:
sql.Add('update SysUntUser set 用户编码='''+trim(edit1.Text)+''',//这句开始报错
用户名称='''+trim(edit2.Text)+''',用户密码='''+trim(edit3.Text)+''',单位名称
='''+trim(edit3.Text)''' where 用户编码=''用户编码''');
但是从数据库结构来看就有问题了,你下Update SQL 的时候没有加条件,也就是将这个Table里的所有的记录全部Update 为一样的数据,但是你这个表的 “用户编码”应该是个唯一索引,这个字段不允许有两个相同的数据,所以就会报错
解决方法你可以给它加个条件如下:
sql.Add('update SysUntUser set 用户编码='''+trim(edit1.Text)+''',//这句开始报错
用户名称='''+trim(edit2.Text)+''',用户密码='''+trim(edit3.Text)+''',单位名称
='''+trim(edit3.Text)''' where 用户编码=''用户编码''');
追问
按照你的方法改了,可是还是不行。。。。崩溃了!
追答
非ACCESS数据库
sql.Add('update SysUntUser set 用户编码='''+trim(edit1.Text)+''',用户名称='''+trim(edit2.Text)+''',用户密码='''+trim(edit3.Text)+''',单位名称='''+trim(edit3.Text)+''' where 用户编码=''用户编码''');
如果你用的是ACCESS数据库,最好用以下方法可行
sql.Add('update SysUntUser set 用户编码=:用户编码,用户名称=:用户名称,用户密码=:用户密码,单位名称=:单位名称 where 用户编码=''用户编码''');
Parameters.ParamByName('用户编码').Value := trim(Edit1.Text);
Parameters.ParamByName('用户名称').Value := trim(Edit2.Text);
Parameters.ParamByName('用户密码').Value := trim(Edit3.Text);
Parameters.ParamByName('单位名称').Value := trim(Edit4.Text);
展开全部
最好通过SQL删除(delete from ...),不要通过ADO删除。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用delete from 删除
if Application.MessageBox('是否要删除?','系统提示',MB_YESNO)=IDYES then
begin
strsql := 'delete from SysUntUser where 用户编码=:id';
//ShowMessage(strsql);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(strsql);
ADOQuery1.Parameters.ParamByName('id').Value := trim(Edit1.Text);
ADOQuery1.ExecSQL;
end;
if Application.MessageBox('是否要删除?','系统提示',MB_YESNO)=IDYES then
begin
strsql := 'delete from SysUntUser where 用户编码=:id';
//ShowMessage(strsql);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(strsql);
ADOQuery1.Parameters.ParamByName('id').Value := trim(Edit1.Text);
ADOQuery1.ExecSQL;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
动,最好是用安装程序制作软件做一个安装程序,把数据库驱动打包进去,在其它电脑上安装,就OK了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询