怎样实现从数据表中查询,并把符合条件的某一值符给我自己定义的全局变量,(附代码)(50分)

  • 主题发起人 主题发起人 loutian
  • 开始时间 开始时间
L

loutian

Unregistered / Unconfirmed
GUEST, unregistred user!
with dm2.query1 do
begin
close;
sql.clear;
sql.add('select * from 用户表1');
sql.add('where 用户名=:usename');
sql.add('and 密码=:password');
parambyname('usename').Asstring:=edit1.text;
parambyname('password').AsString:=edit2.Text;
prepare;
open;
user_type:=fieldbyname('用户类型').Value;
name:=fieldbyname('用户名').Value;
end;
if dm2.query1.recordcount>0 then

begin
with dm2.StoredProc1 do
begin
params[0].AsString:=name;
params[1].AsString:=user_type;
params[2].AsString:='用户登陆';
prepare;
execproc;
end;
edit3.Text:=name;
edit4.Text:=user_type;
showmessage('登录成功!');
end
else showmessage('登录失败,请重新登录!');
 
大家帮我看看,其实也不怎么难啊
user_type:=fieldbyname('用户类型').Value;
name:=fieldbyname('用户名').Value;
只要把上面那两句该成另一种写法,实现从一个表中查询出一个值符给我自己定义的一个全局变量
我真的不知道该怎么做,请帮帮忙
 
user_type:=fieldbyname('用户类型').AsString;
name:=fieldbyname('用户名').AsString;
 
同意楼上
 
不行,我试了出错
user_type:=fieldbyname('用户类型').AsString;
name:=fieldbyname('用户名').AsString;

出错内容为
access violation at address 004ac0d8 in moudle 'project.exe' read of address 00000000
 
if table1.lockte(‘字段’,[值],[]) theH
变量:=table1['字段'];

 
dm2.query1.Open以后检查是否有记录?
....
if dm2.query1.recordcount>0 then
begin
user_type:=fieldbyname('用户类型').AsString;
name:=fieldbyname('用户名').AsString;
end;
...
 
同意青侠的意见,把机器重启动后,再运行!
 
改了以后出现了新的错误提示 ,运行时出现 list index out of bounds(0),谁能帮我解释一下
是什么意思,谢谢了
 
你的问题不在赋值语句,你的赋值语句应该都行的。
出现list index out of bounds(0)可能是你的存储过程(StoredProc1)
中的参数问题,你打开该存储过程的参数编辑器,看看具体的情况,
第一个参数即param(0)一般是存储过程的返回值。
 
是吗,照你这么说是不是params[0]不能用,那我的存储过程定义了三个变量,该怎么写代码呢
 
你有没有改变过存贮过程的参数,默认的第一个参数是一个返回值(RESULT),如果没有改
应从第一个开始,不过我建议你以后还是用参数名来写。
 
如果用参数名那PARAMS关键字要不要变呢
 
StoredProc1.ParamByName(参数名).as类型
 
参数名外要加单引号吗
 
运行时,系统提示参数名不存在
 
设置断点测试一下真正错在哪个语句吧
 

params[0].AsString:=name;
params[1].AsString:=user_type;
params[2].AsString:='用户登陆'
 
你改成
params[1].AsString:=name;
params[2].AsString:=user_type;
params[3].AsString:='用户登陆'

试试吧。
 

Similar threads

后退
顶部