高手帮忙!!
做一个用户登录注册界面,在登录界面点击注册时delphi报错q_stu:Cannot perform this operation on a open dataset (q_stu为query name) 属性:active:true requsetlive:true注册窗体代码如下
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables, Mask, DBCtrls,unit1;type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Btn_tj: TButton;
Btn_exit: TButton;
L_name: TLabel;
L_password: TLabel;
L_qrp: TLabel;
Label3: TLabel;
DBEdt_name: TDBEdit;
DBEdt_password: TDBEdit;
DataSource1: TDataSource;
edt_qrp: TEdit;
procedure Btn_exitClick(Sender: TObject);
procedure Edt_qrpChange(Sender: TObject);
procedure Btn_tjClick(Sender: TObject);
procedure DBEdt_nameChange(Sender: TObject);
procedure DBEdt_passwordChange(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;
implementation
{$R *.dfm}procedure TForm2.Btn_exitClick(Sender: TObject);
begin
close;
end;
procedure TForm2.Edt_qrpChange(Sender: TObject);
begin
if(dbedt_password.Text<>edt_qrp.Text) then L_qrp.Caption:='与原密码不符'
else L_qrp.Caption:='';
end;procedure TForm2.Btn_tjClick(Sender: TObject);
var str:string;
begin
str:='insert into student(sname,sno) values(';
str:=str+''''+dbedt_name.Text+''''+dbedt_password.Text+'''';
if(L_name.Caption<>'') or (L_password.Caption<>'') or (L_qrp.Caption<>'')
or (dbedt_name.Text='') or (dbedt_password.Text='') or (edt_qrp.Text='')
then
begin
showmessage('填写不正确!');
dbedt_name.SetFocus;
exit;
end;
form1.q_stu.close;
form1.q_stu.sql.clear;
form1.q_stu.sql.add(str);
form1.q_stu.open;
form1.Q_stu.UpdateRecord;
showmessage('注册成功!');
end;procedure TForm2.DBEdt_nameChange(Sender: TObject);
begin
form1.q_stu.close;
form1.q_stu.sql.clear;
form1.q_stu.sql.add('select sname from student');
form1.q_stu.sql.add('where sname='''+dbedt_name.Text+'''');
form1.q_stu.Open;
if form1.q_stu.RecordCount<>0
then L_name.Caption:='用户名已存在'
else L_name.Caption:='';
if(length(dbedt_name.Text)>15) then L_name.Caption:='不超15字';
end;procedure TForm2.DBEdt_passwordChange(Sender: TObject);
begin
if(length(dbedt_password.Text)>20) then L_password.Caption:='密码不超20字';
end;procedure TForm2.FormShow(Sender: TObject);
begin form1.Q_stu.Append;
dbedt_name.SetFocus;
end;end.
做一个用户登录注册界面,在登录界面点击注册时delphi报错q_stu:Cannot perform this operation on a open dataset (q_stu为query name) 属性:active:true requsetlive:true注册窗体代码如下
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables, Mask, DBCtrls,unit1;type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Btn_tj: TButton;
Btn_exit: TButton;
L_name: TLabel;
L_password: TLabel;
L_qrp: TLabel;
Label3: TLabel;
DBEdt_name: TDBEdit;
DBEdt_password: TDBEdit;
DataSource1: TDataSource;
edt_qrp: TEdit;
procedure Btn_exitClick(Sender: TObject);
procedure Edt_qrpChange(Sender: TObject);
procedure Btn_tjClick(Sender: TObject);
procedure DBEdt_nameChange(Sender: TObject);
procedure DBEdt_passwordChange(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;
implementation
{$R *.dfm}procedure TForm2.Btn_exitClick(Sender: TObject);
begin
close;
end;
procedure TForm2.Edt_qrpChange(Sender: TObject);
begin
if(dbedt_password.Text<>edt_qrp.Text) then L_qrp.Caption:='与原密码不符'
else L_qrp.Caption:='';
end;procedure TForm2.Btn_tjClick(Sender: TObject);
var str:string;
begin
str:='insert into student(sname,sno) values(';
str:=str+''''+dbedt_name.Text+''''+dbedt_password.Text+'''';
if(L_name.Caption<>'') or (L_password.Caption<>'') or (L_qrp.Caption<>'')
or (dbedt_name.Text='') or (dbedt_password.Text='') or (edt_qrp.Text='')
then
begin
showmessage('填写不正确!');
dbedt_name.SetFocus;
exit;
end;
form1.q_stu.close;
form1.q_stu.sql.clear;
form1.q_stu.sql.add(str);
form1.q_stu.open;
form1.Q_stu.UpdateRecord;
showmessage('注册成功!');
end;procedure TForm2.DBEdt_nameChange(Sender: TObject);
begin
form1.q_stu.close;
form1.q_stu.sql.clear;
form1.q_stu.sql.add('select sname from student');
form1.q_stu.sql.add('where sname='''+dbedt_name.Text+'''');
form1.q_stu.Open;
if form1.q_stu.RecordCount<>0
then L_name.Caption:='用户名已存在'
else L_name.Caption:='';
if(length(dbedt_name.Text)>15) then L_name.Caption:='不超15字';
end;procedure TForm2.DBEdt_passwordChange(Sender: TObject);
begin
if(length(dbedt_password.Text)>20) then L_password.Caption:='密码不超20字';
end;procedure TForm2.FormShow(Sender: TObject);
begin form1.Q_stu.Append;
dbedt_name.SetFocus;
end;end.
解决方案 »
- tcpclinet和tcpserver的sendbuf,receivebuf问题
- 关于视频问题(分不够可以再加)
- delphi中界面控件用什么比较好?
- waveOutPrepareHeader问题,错误提示MMSYSERR_INVALPARAM,请高手相助!!
- QuickReport 的导出文件 *.qrp 如何用代码的方式保存成图片格式
- WebService新手上路
- 快!简单问题大放分!!文件目录的搜索方法和算法是什么?
- 不需要让用户按Alt+Enter、Ctrl+Alt+Del、Ctrl+Esc等功能键
- delphi 想说爱你不容易!
- 各位,能不能介绍哪几本比较好的DELOHI书?
- delphi读取oracle数据库中的字段的类型和长度
- TClientDataSet 报错:EAccessViolation???谢谢
form1.q_stu.open;
修改为
form1.q_stu.ExecSQL;
還有類似的ado錯誤是因為:ado是非insert或edit狀態,所以要:
if qry_hrqj.State in [dsedit,dsinsert] then