怎样把这些东西插入数据库!(28分)

  • 主题发起人 主题发起人 freesoft
  • 开始时间 开始时间
F

freesoft

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在希望做个简单的权限控制,用checkbox表示各个权限。
当然一个一个checkbox判断是可以,不过太傻了。
我是这样写的:
procedure Tsqf.BitBtn1Click(Sender: TObject);
var vibool,enbool:boolean;
cap,en,vi:string;
i:integer;
begin

with dataf.drightf do
begin
close;
sql.clear;
sql.add('select * from dright where dep='+''''+combobox1.Text+'''');
open;
end;

if dataf.drightf.RecordCount=0 then
begin


for i:=1 to componentcount-1 do
begin
with dataf.dright1 do
begin
close;
sql.clear;
if components is TCheckBox then
begin
if TCheckBox(components).Checked
then
begin
cap:=(FindComponent('checkbox'+inttostr(i)) as Tcheckbox).caption ;
en:='true' ;
end
else
begin cap:='';
en:='false';
end ;
end;
vi:='b';
sql.add('insert into dright(dep,actioncap,actionen,actionvi) values('''+combobox1.text+''','''+cap+''','''+en+''','''+vi+''')');
execsql;
end;
end;
end;
end;运行后报错。说i,越界。
我怎么也搞不明白如果我这样写:
st:=(findcomponent('checkbox'+inttostr(i)) as Tcheckbox).caption
在with dataf.dright外运行可以,可是进入循环后就是空直了。
另外有没有类似findcomponent('checkbox'+inttostr(i)) as Tcheckbox).checked的
语句。
我希望如果checkbox选中,那么就把他的caption,enabled插入数据库表(cap,actionen)
如果没有选中就不插入数据库。
 
self.findcomponent('checkbox'+inttostr(i)

如果没有self.,指的就是with的控件的findcomponent方法,当然错
同样你的还有其他地方都要加self.
 
干嘛这么做,多麻烦,
在数据库中用一个字段来保存用户的权限,假如须要50个权限,字段长度为50,
内容为'1111111111111111111111111111111111111111111111111111'这就是所有权限,
返之'00000000000000000000000000000000000000000000000'没有任何权限。
做一个CheckBox 的数据组,保存的时候通过 for x=0 to 49 可以将所有checkBox的信息保存到一个字符串里,
var aCheckBox :array[0..490 of TCheckBox;
然后在窗口上放上50个CheckBoxl.
在窗口建立的时候:
aCheckBox[0] :=CheckBox1;
aCheckBox[1] :=CheckBox2;
aCheckBox[2] :=CheckBox3;
…………
aCheckBox[49] :=CheckBox50;

用的时候更好用了,
var s:String;
begin
s:=Table1.FieldByname('right').AsString;
for x:=0 to 49 do
aCheckBox[x].Checked :=s[x+]=1;
end;
OK,搞定。
 
楼上说说极是,不过按你的方法,我好象得到的不是他的caption,而是checkbox5
checkbox6
checkbox7不知道是什么原因,我已经改过checkbox的caption了!
 
for i := 0 to FORM1 .ControlCount - 1 do
IF Tcheckbox(FORM1.Controls).Checked THEN
BEGIN
S:=Tcheckbox(FORM1.Controls).CAPTION;
END;
END;
我只喜欢这样用!
 
to:bigroute
你说的有一定的道理,不过我怎么先给某个人授权呢?
111111111111111111,0000000000000,我怎么写入呢?
你这样写只是在根据权限来设定checkbox的状态时有一定的用处,
而且我还有个问题,你设定一个保存0000000000000,1111111111111,的字段比如:rig
那么你怎样处理呢?不是还要把他分离开吗,不燃怎么处理,希望给出比较详细的结论,
你和上面的那位都有一定的道理!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部