各位高手帮个忙吧,我快受不了了,调试一个小程序都快一个小时了,就是找不出原因!(100分)

  • 主题发起人 菜妹妹
  • 开始时间

菜妹妹

Unregistered / Unconfirmed
GUEST, unregistred user!
我是想把数据库中指定字段的值先读到stringlist再对应在checklistbox中显示,
再根据用户的checked把对应项转换成二进制字符串,然后存到数据库中,编译没错误,
可一运行就保存。再不能解决,我就快疯了呀,救人呀!
procedure TForm1.BitBtn1Click(Sender: TObject);
var stringlist:tstringlist;
n,m,i,j:integer;
kitty:array [0..7] of char;
stre:string;
load:array [0..256] of int64;
begin
n:=0;
m:=0;
checklistbox1:=tchecklistbox.Create(self);
stringlist:=tstringlist.Create();
with ADOTable1 do
stringlist.add(fieldbyname('type').asstring);
i:=stringlist.Count;

for j:=0 to i do

checklistbox1.Items[j]:=stringlist.Strings[j];
checklistbox1.Visible:=true;
if checklistbox1.Checked[m] then
kitty[m]:='1'
else

kitty[m]:='0';
stre:=kitty;

load[n]:=yfDigitToInt(stre,2);
stre:='';
with ADOTable1 do

fields[2].AsInteger :=load[n];
stringlist.Free;
checklistbox1.Free;


end;
function yfDigitToInt(mDigit: string;
mScale: Byte): Int64;
var I: Byte;
L: Integer;
begin
Result := 0;
mDigit := UpperCase(mDigit);
L := Length(mDigit);
for I := 1 to L do
Result := Result + (Pos(mDigit[L - I + 1], ycScaleChar) - 1) * yfIntPower(mScale, I - 1);
end;
//DigitToInt
function yfIntPower(Base: Integer;
Exponent: Integer): Int64;
var I: Integer;
begin
Result := 1;
for I := 1 to Exponent do
Result := Result * Base ;
end;

end.
为什么总是在运行时出错,帮忙呀!
 
高手们,帮个忙呀,我今夜不睡也不能完成任务了,这个小程序是一个调试实验,
如果哪位高手愿意帮忙,我愿意把全部分数送出,谢谢了先!我在线等待呀!
 
通不过编译, ycScaleChar是什么东西?
 
checklistbox1.Free;
//????为什么要free?去掉这个试试!
 
呵呵,问题一样
什么是ycScaleChar呀?
这么具体的问题,还是把.dfm,.pas文件都拿出来大家看看吧
btw:checklistbox是动态创建的,当然要free掉
 
ycScaleChar
可能是一个function
是不是没贴啊?
 
checklistbox1直接创建可以完成[8D]
 
我忘记贴了,ycScaleChar = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 
你这个程序问题还不少。:(
procedure TForm1.BitBtn1Click(Sender: TObject);
var stringlist:tstringlist;
n,m,i,j:integer;
kitty:array [0..7] of char;
stre:string;
load:array [0..256] of int64;
begin
n:=0;
m:=0;
checklistbox1:=tchecklistbox.Create(self);
stringlist:=tstringlist.Create();
// 不是C语言,可以去掉,不算什么问题。:D
with ADOTable1 do
stringlist.add(fieldbyname('type').asstring);
// 只加入一条记录,应该有个遍历吧
i:=stringlist.Count;

for j:=0 to i do
// 循环超界,应该循环到i-1
checklistbox1.Items[j]:=stringlist.Strings[j];
// 应该用checklistbox1.items.add
checklistbox1.Visible:=true;
// 没有社checklistbox1的parent,显示不出来
if checklistbox1.Checked[m] then
kitty[m]:='1'
else

kitty[m]:='0';
// 又没有循环,有几条记录?
stre:=kitty;

load[n]:=yfDigitToInt(stre,2);
stre:='';
with ADOTable1 do

fields[2].AsInteger :=load[n];
// 不要修改,保存啊?
stringlist.Free;
checklistbox1.Free;


end;
// 下面就不仔细看了。
function yfDigitToInt(mDigit: string;
mScale: Byte): Int64;
var I: Byte;
L: Integer;
begin
Result := 0;
mDigit := UpperCase(mDigit);
L := Length(mDigit);
for I := 1 to L do
Result := Result + (Pos(mDigit[L - I + 1], ycScaleChar) - 1) * yfIntPower(mScale, I - 1);
end;
//DigitToInt
function yfIntPower(Base: Integer;
Exponent: Integer): Int64;
var I: Integer;
begin
Result := 1;
for I := 1 to Exponent do
Result := Result * Base ;
end;

end.
总的来说,看不明白你的程序。
 
要不然能叫菜妹妹?
 
你现在碰到的问题是什么?运行时的错误提示是什么?
 
要是有人不稀罕分,那怎么办?
 
多人接受答案了。
 
顶部