procedure Tlogin.Button1Click(Sender: TObject);
var
n,s:string;
begin
//DBcombobox1是用户名
n:=DBCombobox1.text;
//Edit2是密码
s:=Edit2.text;
//判断用户名和密码是否存在
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('select * from login where name=:t1 and passw=:t2');
parameters[0].value:=n;
parameters[1].value:=s;
open;
//如果用户名和密码不正确
if recordcount<1 then
begin
showmessage('用户名与密码不符,请重新输入密码!');
end else
//用户名和密码正确
begin
showmessage('登陆成功!');
login.close;
end;
end;
//如果用户选择浏览数据
if RadioButton1.Checked=true then
begin
//判断数据表在数据库中有没有
with DataModule1.ADOQuery1 do begin
SQL.Clear;
SQL.Add('SELECT * FROM sysobjects WHERE name=:st AND type=''U''');
Parameters.ParamByName('st').value:='gz'+Edit1.Text;
Open;
end;
//如果返回值(有数据表)
if not DataModule1.ADOQuery1.IsEmpty then
begin
//设置DataModule1.ADODataset1数据源为要浏览的数据表
with DataModule1.ADODataset1 do begin
commandtext:='';
commandtype:=cmdText;
commandtext:='select * from'+' '+'gz'+Edit1.text;
open;
end;
end
//如果没有返回值(没有数据表)
else begin
showmessage('对不起!没有'+Edit1.text+'月份的工资');
end;
end;
//如果用户选择增加工资模式
if RadioButton2.Checked=true then
begin
//复制上一个月的工资表到以这个月命名的表中
with DataModule1.ADOCommand1 do begin
commandtext:='';
commandtype:=cmdtext;
commandtext:='SELECT * into'+' '+'gz'+Edit1.text+' '+'from'+' '+'gz'+leftstr(Edit1.text,4)+inttostr(strtoint(Rightstr(Edit1.text,2))-1);
execute;
end;
//更新新加表格的日期字段的值为最新月份
with DataModule1.ADOCommand1 do begin
commandtext:='';
commandtype:=cmdtext;
commandtext:='update'+' '+'gz'+Edit1.text+' '+'set'+' '+'rq='+Edit1.text;
execute;
end;
//判断新增表的结果是否正确
with DataModule1.ADOQuery1 do begin
sql.clear;
sql.add('select * from'+' '+'gz'+Edit1.text);
open;
end;
//判断是否增加成功
if not DataModule1.ADOQuery1.IsEmpty then
begin
//如果成功,设置DataModule1.ADODataset1数据源
with DataModule1.ADODataset1 do begin
commandtext:='';
commandtype:=cmdText;
commandtext:='select * from'+' '+'gz'+Edit1.text;
open;
end;
end
//如果不成功
else begin
showmessage('对不起!不能生成'+Edit1.text+'月份的工资');
end;
end;
end;
请各位看看错误出在哪里?
运行以后总是提示我这里有错:
//设置DataModule1.ADODataset1数据源为要浏览的数据表
with DataModule1.ADODataset1 do begin
commandtext:='';
commandtype:=cmdText;
commandtext:='select * from'+' '+'gz'+Edit1.text;
open;
end;
提示信息:
cannot perform this operation on an open dataset.
var
n,s:string;
begin
//DBcombobox1是用户名
n:=DBCombobox1.text;
//Edit2是密码
s:=Edit2.text;
//判断用户名和密码是否存在
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('select * from login where name=:t1 and passw=:t2');
parameters[0].value:=n;
parameters[1].value:=s;
open;
//如果用户名和密码不正确
if recordcount<1 then
begin
showmessage('用户名与密码不符,请重新输入密码!');
end else
//用户名和密码正确
begin
showmessage('登陆成功!');
login.close;
end;
end;
//如果用户选择浏览数据
if RadioButton1.Checked=true then
begin
//判断数据表在数据库中有没有
with DataModule1.ADOQuery1 do begin
SQL.Clear;
SQL.Add('SELECT * FROM sysobjects WHERE name=:st AND type=''U''');
Parameters.ParamByName('st').value:='gz'+Edit1.Text;
Open;
end;
//如果返回值(有数据表)
if not DataModule1.ADOQuery1.IsEmpty then
begin
//设置DataModule1.ADODataset1数据源为要浏览的数据表
with DataModule1.ADODataset1 do begin
commandtext:='';
commandtype:=cmdText;
commandtext:='select * from'+' '+'gz'+Edit1.text;
open;
end;
end
//如果没有返回值(没有数据表)
else begin
showmessage('对不起!没有'+Edit1.text+'月份的工资');
end;
end;
//如果用户选择增加工资模式
if RadioButton2.Checked=true then
begin
//复制上一个月的工资表到以这个月命名的表中
with DataModule1.ADOCommand1 do begin
commandtext:='';
commandtype:=cmdtext;
commandtext:='SELECT * into'+' '+'gz'+Edit1.text+' '+'from'+' '+'gz'+leftstr(Edit1.text,4)+inttostr(strtoint(Rightstr(Edit1.text,2))-1);
execute;
end;
//更新新加表格的日期字段的值为最新月份
with DataModule1.ADOCommand1 do begin
commandtext:='';
commandtype:=cmdtext;
commandtext:='update'+' '+'gz'+Edit1.text+' '+'set'+' '+'rq='+Edit1.text;
execute;
end;
//判断新增表的结果是否正确
with DataModule1.ADOQuery1 do begin
sql.clear;
sql.add('select * from'+' '+'gz'+Edit1.text);
open;
end;
//判断是否增加成功
if not DataModule1.ADOQuery1.IsEmpty then
begin
//如果成功,设置DataModule1.ADODataset1数据源
with DataModule1.ADODataset1 do begin
commandtext:='';
commandtype:=cmdText;
commandtext:='select * from'+' '+'gz'+Edit1.text;
open;
end;
end
//如果不成功
else begin
showmessage('对不起!不能生成'+Edit1.text+'月份的工资');
end;
end;
end;
请各位看看错误出在哪里?
运行以后总是提示我这里有错:
//设置DataModule1.ADODataset1数据源为要浏览的数据表
with DataModule1.ADODataset1 do begin
commandtext:='';
commandtype:=cmdText;
commandtext:='select * from'+' '+'gz'+Edit1.text;
open;
end;
提示信息:
cannot perform this operation on an open dataset.
解决方案 »
- 从SQL Server 读取图片
- 有多个ie进程时弹出ie窗口出现超时错误!!!!急!!!
- 如何用图片做窗体形状??
- IE右键菜单采集网页内容的问题
- 请问vb.net与delphi比较哪个更好?
- 如何在程序中显示、并刷新图片
- 很奇怪的问题百思不得其解!'Printer selected is not valid.'
- 怎样中止死循环?
- 利用DELPHI能不能做出漂亮的工具栏?
- 有谁知道ACCESS支持的容量为多大?几个G?
- 谁有 installshield for delphi 的使用说明?
- 斑竹别删,急...急...在线等候...500分, WIN2000局域网,一共享的文件夹被删除,咋找谁删的,咋恢复被删文件夹...
Close;//
commandtext:='';
commandtype:=cmdText;
commandtext:='select * from'+' '+'gz'+Edit1.text;
open;
end;
function TFormMainWin.getFieldBySQL(SQLStr : string) : string;
var
getFieldValue : string;
begin
if ExecSQLResult(SQLStr, mySQLQResult) then
if not (mySQLQResult.Bof and mySQLQResult.Eof) then
getFieldValue := mySQLQResult.FieldByName('FFieldValue').AsString;
mySQLQResult.Close; Result := getFieldValue;
end;//返回返回记录集的SQL
function TFormMainWin.ExecSQLResult(SQLStr : string; TmpQuery : TmySQLQuery) : Boolean;
begin
try
with TmpQuery do
begin
Close;
SQL.Clear;
SQL.Add(SQLStr);
Open;
end;
Result := True;
except
//尝试失败,则返回假值
Result := False;
end;
end;//执行无返回值的SQL
function TFormMainWin.ExecSQLNoResult(SQLStr : string) : Boolean;
begin
try
with mySQLQOnce do
begin
Close;
SQL.Clear;
SQL.Add(SQLStr);
ExecSQL;
Close;
end;
Result := True;
except
//尝试失败,则返回假值
Result := False;
end;
end;
一般的问题都可以用这几个函数解决登陆:
if getFieldBySQL('Select Count(FAutoID) As FFieldValue From tLogin Where (name=...) And (passw=...)') = '0' then
begin
//登陆不成功
...
end;commandtype:=cmdtext;//不需要设置,我从来没用过Parameters.ParamByName('st').value:='gz'+Edit1.Text;//是个好东西,但我也从来不用它,我把SQL语句分成几行写,每行是一个字段,类似于SQLStr := 'Update ttable Set' +
' username = ''' + username.text + ''',' +
' userpass = ''' + userpass.text + '''' +
' Where userid = ''' + userid.text + '''';
同样非常明了
当然,在程序中的SQL语句要注意符合ANSI SQL标准,不要使用LIMIT或TOP等语句