Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизInvalid pointer operation Найти похожие ветки
← →
Phoenix © (2004-07-18 14:49) [0]Такая проблема , бьюсь третий день
Есть класс
Pinv = class
zavnum:array of string;
invnum:array of string;
sumind:array of Double;
sumbalind:array of Double;
nudok:string[8];
datedok:TDate;
dateexp:tdate;
sbname:string[80];
k_sh:string[4];
k_gr:string[2];
k_objp:string[10];
k_objn:string[10];
nameobjr:string[255];
nameobjk:string[255];
edizm:string[10];
spuch:integer;
nazn:integer;
norma:Double;
istfin:string[10];
model:string[255];
indprizn:string[255];
god:integer;
sumbal:Double;
sumizn:Double;
sumtrans:Double;
kolvo:smallint;
kmol:string[6];
prz:boolean;
end;
Есть процедура которая с этим классом работает
procedure TFrmOprih.SBRigthClick(Sender: TObject);
var dob,dob2:PInv;
i:integer;
ListItem: TListItem;
begin
SBminus.Enabled:=true;
dob:=Pinv.Create;
dob.nudok:=NdokEdit.Text;
dob.datedok:=Datedok.Date;
dob.dateexp:=Dateexp.Date;
dob.k_sh:=CDSSub.fieldbyname("k_sh").AsString;
dob.k_gr:=CDSSub.fieldbyname("k_gr").AsString;
dob.sbname:=CDSSub.fieldbyname("name").AsString;
dob.k_objp:=LKodObj.Caption;
dob.k_objn:=kobj;
dob.nameobjr:=MNameObj.Text;
dob.nameobjk:=MNameObjk.Text;
dob.edizm:=CDSEdIzm.fieldbyname("rname").AsString;
dob.spuch:=RGSU.ItemIndex;
dob.nazn:=RGIzn.ItemIndex;
dob.norma:=normizn;
dob.istfin:=CDSKrSch.fieldbyname("k_str").AsString;
dob.model:=ENpaspor.Text;
dob.indprizn:=EIndprizn.Text;
dob.god:=strtoint(EGodvyp.Text);
dob.sumbal:=strtofloat(ESumBal.text)*strtoint(EKolvo.text);
dob.sumizn:=strtofloat(ESumIzn.Text)*strtoint(EKolvo.text);
dob.sumtrans:=strtofloat(ETransp.Text);
dob.kolvo:=strtoint(EKolvo.text);
mdprz.First;
SetLength(dob.zavnum,strtoint(EKolvo.Text));
SetLength(dob.invnum,strtoint(EKolvo.Text));
SetLength(dob.sumind,strtoint(EKolvo.Text));
SetLength(dob.sumbalind,strtoint(EKolvo.Text));
for i:=1 to strtoint(EKolvo.Text) do
begin
dob.zavnum[i]:=MDPrz.fieldbyname("znum").asString;
dob.invnum[i]:=MDPrz.fieldbyname("inum").asString;
dob.sumind[i]:=strtofloat(ESumBal.text);
dob.sumbalind[i]:=strtofloat(ESumIzn.Text);
mdprz.Delete;
MDPrz.Next;
end;
dob.kmol:=CDSMol.fieldbyname("tabnum").AsString;
dob.prz:=false;
if lv.Items.Count<>0 then lv.Items[LV.Items.Count-1].Delete;
ListItem:=LV.Items.Add;
ListItem.Data:=dob;
ListItem.caption:=LKodObj.Caption;
ListItem.SubItems.Add(EKolvo.Text);
ListItem.SubItems.Add(floattostr(strtofloat(ESumBal.text)*strtoint(EKolvo.text)));
ListItem.SubItems.Add(floattostr(strtofloat(ESumIzn.text)*strtoint(EKolvo.text)));
dob2:=Pinv.Create;
dob2.prz:=true;
ListItem:=LV.Items.Add;
ListItem.Data:=dob2;
ListItem.caption:="Íîâûé ýëåìåíò...";
sumb:=sumb+strtofloat(ESumBal.text)*strtoint(EKolvo.text);
sumiz:=sumiz+strtofloat(ESumIzn.text)*strtoint(EKolvo.text);
kol:=kol+StrToInt(EKolvo.Text);
LSum.Caption:=floattostr(sumb);
LSumIzn.Caption:=floattostr(sumiz);
LKolvo.Caption:=IntToStr(kol);
frmrefresh;
NdokEdit.SetFocus;
end;
Прблема вот в чём, после выполнения этой проседуре (не во время, а после! При трассировке сразу после end"а) выдаётся "Invalid pointer operation", комментирую кусок
for i:=1 to strtoint(EKolvo.Text) do
begin
dob.zavnum[i]:=MDPrz.fieldbyname("znum").asString;
dob.invnum[i]:=MDPrz.fieldbyname("inum").asString;
dob.sumind[i]:=strtofloat(ESumBal.text);
dob.sumbalind[i]:=strtofloat(ESumIzn.Text);
mdprz.Delete;
MDPrz.Next;
end;
всё идёт нормльно. ТУт как я понял проблема с массивами, как вот блин её решить, надёюсь кто-нить подскажет.
Заранее благодарен.
← →
Palladin © (2004-07-18 14:56) [1]1 А стоит ли этому классу быть классом?
2 Какая безобразная дисциплина кодирования.
3 Что такое mdprz?
4 Динамические массивы имеют нижний индекс НОЛЬ и верхний РАЗМЕР МАССИВА МИНУС АДЫН!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c