我这段代码在数据库dbisam3.26下可用,但在dbisam4.05下出错,出错提示如下:DBISAM Engine Error # 11949 SQL error - 'Invalid column name 'b' or table correlation name '' specified in WHERE or JOIN clause'不知怎么改,请指点。
procedure Tsetpasswd_form.BitBtn1Click(Sender: TObject);
begin
with DM.Users_Query do
begin
SQL.Clear;
Sql.Add('Select * from login where 用户名="'+EdName.text+'" and 密码="'+oldpassword.text+'" and 用户类型="'+CBType.text+'"'); //这个有问题
open;
if RecordCount = 1 then
begin
if Edpsswrod1.text<>Edpsswrod2.text then
Application.MessageBox('两次输入的密码不匹配!请重新输入。','提示',MB_OK+Mb_iconasterisk)
else
begin
close;
SQL.Clear;
SQL.Add('update login');
SQL.Add('set 密码 = :passwd');
SQL.Add('where 用户名 = :username');
parambyname('passwd').asstring:=Edpsswrod1.text;
parambyname('username').asstring:=G_username;
prepare;
execSQL;
Application.MessageBox('密码修改成功!','提示',MB_OK+Mb_iconasterisk);
oldpassword.Text:='';
Edpsswrod1.Text:='';
Edpsswrod2.Text:=''
end;
end
else
begin
if (EdName.text='')and(EdName.text='')and(CBType.text='')then
Application.MessageBox('您没有填写资料,请输入!','提示',MB_OK+Mb_iconasterisk)
else
begin
Application.messagebox('输入有误,请重新输入!','提示',MB_Ok+Mb_iconasterisk);
EdName.Text:='';
CBType.Text:='';
oldpassword.Text:='';
Edpsswrod1.Text:='';
Edpsswrod2.Text:='';
end;
end;
end; //with
end;
procedure Tsetpasswd_form.BitBtn1Click(Sender: TObject);
begin
with DM.Users_Query do
begin
SQL.Clear;
Sql.Add('Select * from login where 用户名="'+EdName.text+'" and 密码="'+oldpassword.text+'" and 用户类型="'+CBType.text+'"'); //这个有问题
open;
if RecordCount = 1 then
begin
if Edpsswrod1.text<>Edpsswrod2.text then
Application.MessageBox('两次输入的密码不匹配!请重新输入。','提示',MB_OK+Mb_iconasterisk)
else
begin
close;
SQL.Clear;
SQL.Add('update login');
SQL.Add('set 密码 = :passwd');
SQL.Add('where 用户名 = :username');
parambyname('passwd').asstring:=Edpsswrod1.text;
parambyname('username').asstring:=G_username;
prepare;
execSQL;
Application.MessageBox('密码修改成功!','提示',MB_OK+Mb_iconasterisk);
oldpassword.Text:='';
Edpsswrod1.Text:='';
Edpsswrod2.Text:=''
end;
end
else
begin
if (EdName.text='')and(EdName.text='')and(CBType.text='')then
Application.MessageBox('您没有填写资料,请输入!','提示',MB_OK+Mb_iconasterisk)
else
begin
Application.messagebox('输入有误,请重新输入!','提示',MB_Ok+Mb_iconasterisk);
EdName.Text:='';
CBType.Text:='';
oldpassword.Text:='';
Edpsswrod1.Text:='';
Edpsswrod2.Text:='';
end;
end;
end; //with
end;
解决方案 »
- sgraph的应用问题
- 程序运行都出错
- 在SQL2000中如何用命令查看一个存储过程的内容??
- 求教:DBGrid怎样冻结某列,当移动水平滚动条时,让该列固定显示,不随着移动?
- 关于(Ehlib 3.2)控件包的安装..请教...
- 在ppReport1中如何自动创建p_ppLabel
- 大家帮忙啊,一个窗口最小化的问题!
- 我想做一个用户可以自定义的报表,大家有什么好方法。推荐者有分!
- 我子窗体不显示,这是怎么一回事?
- 急急!請高手們指點,如何用Install Shell打包配置SQL Server Client Network Utility?
- 如何实现截获Bitbtn的OnMouseEnter,OnMouseLeave,?在线等
- 索引,排序?
var
txtsql:string;
begin
with DM.Users_Query do
begin
txtsql:=''Select * from login where 用户名=":UName and ';
txtsql:=txtsql+'密码=:OldPsw and 用户类型=:UType ';
close;
SQL.Clear;
SQL.text:=txtsql;
parambyname('UName').asstring:=EdName.text;
parambyname('OldPsw').asstring:=oldpassword.text;
parambyname('UType').asstring:=CBType.text;
prepare
open;
if RecordCount = 1 then
begin
if Edpsswrod1.text<>Edpsswrod2.text then
Application.MessageBox('两次输入的密码不匹配!请重新输入。','提示',MB_OK+Mb_iconasterisk)
else
begin
close;
SQL.Clear;
SQL.Add('update login');
SQL.Add('set 密码 = :passwd');
SQL.Add('where 用户名 = :username');
parambyname('passwd').asstring:=Edpsswrod1.text;
parambyname('username').asstring:=G_username;
prepare;
execSQL;
Application.MessageBox('密码修改成功!','提示',MB_OK+Mb_iconasterisk);
oldpassword.Text:='';
Edpsswrod1.Text:='';
Edpsswrod2.Text:=''
end;
end
else
begin
if (EdName.text='')and(EdName.text='')and(CBType.text='')then
Application.MessageBox('您没有填写资料,请输入!','提示',MB_OK+Mb_iconasterisk)
else
begin
Application.messagebox('输入有误,请重新输入!','提示',MB_Ok+Mb_iconasterisk);
EdName.Text:='';
CBType.Text:='';
oldpassword.Text:='';
Edpsswrod1.Text:='';
Edpsswrod2.Text:='';
end;
end;
end; //with
end;你再试试,看这样行不行.不过我建议你以后写SQL语句时不要直接用Query.SQL.Add(),可以把SQL语句赋值给一个字符串变量,这样不容易出错.
如果有这三句的话出错提示如下:
parambyname('UName').asstring:=EdName.text;
parambyname('OldPsw').asstring:=oldpassword.text;
parambyname('UType').asstring:=CBType.text;
如果没有这三句的话出错提示如下:
DBISAM Engine Error # 11949 SQL error - 'End of SELECT statement expected, instead found '.''请指点。
txtsql:=''Select * from login where 用户名=":UName and ';
txtsql:=txtsql+'密码=:OldPsw and 用户类型=:UType ';应该是这的:
txtsql:='Select * from login where 用户名=:UName and ';
txtsql:=txtsql+'密码=:OldPsw and 用户类型=:UType ';你再试试吧!另外,你用的是爰数据库呀!