大家帮我看看这段代码错在那??(百思不得其解)(5分)

  • 主题发起人 主题发起人 chatop
  • 开始时间 开始时间
C

chatop

Unregistered / Unconfirmed
GUEST, unregistred user!
d7,编译通过,运行时就是会出错
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, se_controls, KsSkinMenus, KsSkinEngine, KsSkinForms,
KsSkinPanels, KsSkinGroupBoxs, KsSkinButtons, KsSkinItems,
ksskinstatusbar, ExtCtrls, KsSkinHints, StdCtrls, Buttons,
ksskinstdcontrol, Grids, DBGrids, KsSkinDBGrids, TFlatSoundUnit, ComCtrls,
ImgList, jpeg, ADODB, DB, Menus, XPMenu;

type
TForm1 = class(TForm)
SeSkinForm1: TSeSkinForm;
SeSkinEngine1: TSeSkinEngine;
SeSkinMenuBar1: TSeSkinMenuBar;
SeSkinMenuBar2: TSeSkinMenuBar;
SeSkinGroupBox1: TSeSkinGroupBox;
SeSkinButton1: TSeSkinButton;
SeSkinEngine2: TSeSkinEngine;
CustomItem1: TSeSkinItem;
CustomItem2: TSeSkinItem;
CustomItem3: TSeSkinItem;
CustomItem4: TSeSkinItem;
CustomItem5: TSeSkinItem;
CustomItem6: TSeSkinItem;
CustomItem7: TSeSkinItem;
CustomItem8: TSeSkinItem;
SeSkinGroupBox2: TSeSkinGroupBox;
SeSkinStatusBar1: TSeSkinStatusBar;
Timer1: TTimer;
SeSkinButton5: TSeSkinButton;
SeSkinButton2: TSeSkinButton;
SeSkinButton3: TSeSkinButton;
SeSkinButton4: TSeSkinButton;
SeSkinButton6: TSeSkinButton;
SeSkinButton7: TSeSkinButton;
SeSkinButton8: TSeSkinButton;
SeSkinButton9: TSeSkinButton;
SeSkinButton10: TSeSkinButton;
SeSkinSListView1: TSeSkinSListView;
ImageList1: TImageList;
CustomItem9: TSeSkinItem;
CustomItem10: TSeSkinItem;
CustomItem11: TSeSkinItem;
CustomItem12: TSeSkinItem;
CustomItem13: TSeSkinItem;
CustomItem14: TSeSkinItem;
CustomItem15: TSeSkinItem;
Image1: TImage;
ado1: TADOQuery;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
adotable1: TADOTable;
CustomItem16: TSeSkinItem;
CustomItem17: TSeSkinItem;
CustomItem18: TSeSkinItem;
ImageList2: TImageList;
Timer2: TTimer;
SeSkinMemo1: TSeSkinMemo;
Image2: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Timer3: TTimer;
SeSkinPopupMenu1: TSeSkinPopupMenu;
CustomItem19: TSeSkinItem;

procedure Timer1Timer(Sender: TObject);
procedure SeSkinButton5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CustomItem7Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure SeSkinButton1Click(Sender: TObject);
procedure CustomItem17Click(Sender: TObject);
procedure SeSkinSListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure Timer3Timer(Sender: TObject);
procedure CustomItem20Click(Sender: TObject);
procedure CustomItem19Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SeSkinButton8Click(Sender: TObject);
procedure SeSkinButton4Click(Sender: TObject);
private
{ Private declarations }
public
buttonstu:integer;//变签状态
chlist:integer;//表格线状态
viewlistlines:integer;//listview行数
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2,unit3,unit5;

{$R *.dfm}


{procedure money;//定时计费
begin
form1.adotable1.first;//加这句,而且要保证30分钟内能执行完代码。
while not form1.adotable1.eof do
begin
with form1.adotable1 do
begin
edit;
fieldbyname('费用').asinteger :=Trunc(now-fieldbyname('借出日期').asdatetime)*2;
//fieldbyname('费用').asinteger :=fieldbyname('费用').asinteger+(Trunc(now-fieldbyname('借出日期').asdatetime)*2);

//如果结果为小数或等于实际值的2倍,你应该知道怎么处理的吧。
post;
end;
form1.adotable1.Next;
end;
end;}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
seskinstatusbar1.panels.Items[1].text:='现在是:'+ datetimetostr(now());
end;

procedure TForm1.SeSkinButton5Click(Sender: TObject);
begin
buttonstu:=buttonstu+1;
if (buttonstu mod 2)=0 then
begin
seskinmemo1.Visible:=true;
end
else
begin
seskinmemo1.Visible:=false;
end;
end;
procedure addcap;//写入标题过程
var
iCount: Integer;
begin
form1.SeSkinSListView1.Clear;
for icount:=1 to form1.ado1.FieldCount -1 do
begin
form1.seskinslistview1.Columns.Add.Caption :=(form1.ado1.Fields[icount].FieldName);
form1.ado1.Next;
end;
end;

procedure fall; //读数据库到listview的过程
var
i: integer; //定义变量i
lvitem: tlistitem; //定义listitem类
begin
for i:=1 to form1.adotable1.FieldCount-1 do //循环
begin
form1.SeSkinSListView1.Columns.Add.Caption:=form1.adotable1.Fields.FieldName; //取出标题
end;
form1.adotable1.First; //设置为第一条记录
while not form1.adotable1.Eof do //循环
begin
lvitem:=form1.SeSkinSListView1.Items.Add;//进行类赋值
lvitem.Caption:=form1.adotable1.Fields[0].Value;//写入第一个值
if form1.adotable1.FieldCount>1 then//如果记录数大于1
begin
for i:=2 to form1.adotable1.FieldCount-1 do//进行二次循环
if form1.adotable1.Fields.Value =null then//如果值为空
begin
lvitem.SubItems.Add(''); //写上空串
end
else
begin
lvitem.SubItems.Add(form1.adotable1.Fields.value);//读出记录
end;
end;
form1.adotable1.Next;//返回
end;
end;

procedure clearlistview;//清空listview显示
begin
form1.SeSkinSListView1.Clear;
form1.SeSkinSListView1.Columns.Clear;
end;

procedure viewlistwidthm;//设置listview的宽度
begin
form1.SeSkinSListView1.Columns[0].Width:=90;
form1.SeSkinSListView1.Columns[1].Width:=120;
form1.SeSkinSListView1.Columns[2].Width:=100;
form1.SeSkinSListView1.Columns[3].Width:=70;
form1.SeSkinSListView1.Columns[4].Width:=150;
form1.SeSkinSListView1.Columns[5].Width:=60;
form1.SeSkinSListView1.Columns[6].Width:=50;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.SeSkinMemo1.Lines.LoadFromFile('bianqian.dph');
buttonstu:=1;
//money;//初使计费
fall;// 读出数据库显示到listview中
viewlistwidthm;//更改listview宽度/////////------这里在运行的时候会出错
//viewlistlines:=seskinslistview1.Columns.Count -1;//得到listview的行数


end;

procedure TForm1.CustomItem7Click(Sender: TObject);
begin
if messagebox(0,'真的要离开我吗?','退出提示',MB_yesno+MB_iconquestion)=idyes then
begin
form1.SeSkinMemo1.Lines.SaveToFile('bianqian.dph');
Application.Terminate;
end
else
begin
end;
end;

procedure Tform1.Timer2Timer(Sender: TObject);
begin
clearlistview;//在显示最新数据前先清空listview
fall;//显示最新的数据
viewlistwidthm;//重新测试宽度
form1.SeSkinMemo1.Lines.SaveToFile('bianqian.dph');
end;

procedure TForm1.SeSkinButton1Click(Sender: TObject);
begin
vip.ShowModal;
end;

procedure TForm1.CustomItem17Click(Sender: TObject);
begin
chlist:=chlist+1;
if (chlist mod 2)=0 then
begin
SeSkinSListView1.GridLines:=true;
customitem17.Checked:=true;
end
else
begin
SeSkinSListView1.GridLines:=false;
customitem17.Checked:=false;
end;
end;

procedure TForm1.SeSkinSListView1SelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
begin
if seskinslistview1.selected<>nil then//先判断是否有点选中
begin
label2.caption:=seskinslistview1.Selected.SubItems[0];
label4.Caption:=seskinslistview1.Selected.SubItems[1];
label6.Caption:=seskinslistview1.Selected.SubItems[3];
label8.Caption:=seskinslistview1.Selected.SubItems[4]+' '+'元';
end;
end;



procedure TForm1.Timer3Timer(Sender: TObject);
begin
//money;//定时计费
end;

procedure TForm1.CustomItem20Click(Sender: TObject);
begin
vip.Show;
vip.ADOTable1.locate('会员卡号',seskinslistview1.Selected.SubItems[1],[]);
end;

procedure TForm1.CustomItem19Click(Sender: TObject);
begin
vip.Show;
vip.ADOTable1.locate('会员卡号',seskinslistview1.Selected.SubItems[1],[]);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
//seskinstatusbar1.Panels.Items[2].Text:='信息:'+' '+ '借出牒片总数:'+ inttostr(viewlistlines)+' '+'片' +' '+ '将收入借用费:';
end;

procedure TForm1.SeSkinButton8Click(Sender: TObject);
begin
vcdss.ShowModal;
end;

procedure TForm1.SeSkinButton4Click(Sender: TObject);
begin
form1.SeSkinMemo1.Lines.LoadFromFile('bianqian.dph');
clearlistview;//在显示最新数据前先清空listview
fall;//显示最新的数据
viewlistwidthm;//重新测试宽度}
end;

end.
 
出错界面看这里
http://211.91.2.35/ld/error.jpg

procedure viewlistwidthm;//设置listview的宽度
begin
form1.SeSkinSListView1.Columns[0].Width:=90;
form1.SeSkinSListView1.Columns[1].Width:=120;
form1.SeSkinSListView1.Columns[2].Width:=100;
form1.SeSkinSListView1.Columns[3].Width:=70;
form1.SeSkinSListView1.Columns[4].Width:=150;
form1.SeSkinSListView1.Columns[5].Width:=60;
form1.SeSkinSListView1.Columns[6].Width:=50;
end;

以上是修改listview各项宽度的过程
在程序中用一个timer 1分钟对数据库内容进行重新载入listview,并且为listview进行宽度
设置,以前运行都很好,可是刚刚开始运行就出错了,不知道是怎么回事,代码没有改过,就是
加了一个新窗口,现在新窗口里面没有写代码,这种问题以前重来都没有碰到过,不好意思,分
没有了,请大家务必要帮我,谢谢·!!!
 
如果有csdn上的朋友解决了这个问题,我可以在csdn上给你500分!!
大家务必要帮我帮我帮我
 
高手呀高手,我喝望高手
 
比较乱七八糟,依我看 for i:=1 to form1.adotable1.FieldCount-1 do 这句都有出错
的可能。
交你一个万能的手段:在 EXE and DLL Options 项下,打开 include TD32 debug info
选项,就可以使用 pascal 最有名的调式工具了,即 Delphi 内部的 TD32 调试器。
 
我个人觉得应该看看SKIN这个控件的原因,从表面看你的这段代码没有什么
问题,不过我用过这个控件,比较不稳定。

 
这种错误一般是地址越界访问。。
即有可能未建立,或是已释放了。。
 
可是很奇怪的是,前天还是好好的,今天打开就不对了………
怪死人了…
 
youou说得对。这是Delphi的最著名错误提示。
一般是 类的实例 在使用时不存在。
按照这个思路去找,就能解决。 (指针问题总是怪怪的)
然后去补习一下指针的概念。
 
我想想也和youou说得差不多,但我看了n次程序了,没有找到问题…
真的很怪呀,我打算重写一下!
 
多人接受答案了。
 
后退
顶部