怪!怪!!表操作的怪问题!(200分)

  • 主题发起人 主题发起人 gks
  • 开始时间 开始时间
G

gks

Unregistered / Unconfirmed
GUEST, unregistred user!
请看下面的代码:
if DataModule1.Table4.Active then
DataModule1.Table4.Close;
DataModule1.Table4.EmptyTable;
DataModule1.Table4.Active:=True;
s:=djm.Text;
DataModule1.Table2.Active:=True;
if DataModule1.Table2.Locate('xm',s,[loPartialKey]) then
begin
tab5open:=DataModule1.Table5.Active;
if not DataModule1.Table5.Active then
DataModule1.Table5.Active:=True;
sql:='select hxjq, yxsj, syjq, bz from tab4 where xm='+''''+s+'''';
DataModule1.Query2.Close;
DataModule1.Query2.SQL.Clear;
DataModule1.Query2.SQL.Add(sql);
DataModule1.Query2.Prepare;
DataModule1.Query2.Open;
recordnum:=DataModule1.Query2.RecordCount;
if recordnum=0 then
begin
DataModule1.Table4.Insert;
DataModule1.Table4.FieldValues['bh']:=1;
DataModule1.Table4.FieldValues['jqzl']:='换休假';
DataModule1.Table4.FieldValues['kyjq']:=0;
DataModule1.Table4.FieldValues['jqqx']:=0;
DataModule1.Table4.FieldValues['bz']:='没有换修';
DataModule1.Table4.Post;
end;
if recordnum>0 then
begin
for i:=1 to recordnum do
begin
DataModule1.Table4.Insert;
DataModule1.Table4.FieldValues['bh']:=i;
DataModule1.Table4.FieldValues['jqzl']:='换休假';
DataModule1.Table4.FieldValues['kyjq']:=DataModule1.Query2.FieldValues['syjq'];
DataModule1.Table4.FieldValues['jqqx']:=DataModule1.Query2.FieldValues['yxsj'];
DataModule1.Table4.FieldValues['bz']:=DataModule1.Query2.FieldValues['bz'];
DataModule1.Table4.Post;
if not DataModule1.Query2.Eof then DataModule1.Query2.Next;
end;
end;
DataModule1.Table5.Active:=tab5open; //table5:tab4.db 换休条
DataModule1.Query2.Close;
//工龄假
DataModule1.Table4.Append;
DataModule1.Table4.FieldValues['bh']:=1000;
DataModule1.Table4.FieldValues['jqzl']:='工龄假';
DataModule1.Table4.FieldValues['bz']:='';
ts:= DataModule1.Table2.FieldValues['glj'];
DataModule1.Table4.FieldValues['kyjq']:= ts;
yxsj:=DataModule1.Table2.FieldValues['kssj'];
yxsj:=yxsj+365;
DataModule1.Table4.FieldValues['jqqx']:=yxsj;

此前table2已经打开。
一怪:如果query2查不到记录,也就是recordnum=0,第一次执行有错误产生,告诉我
table4没有打开,在第一处有下划线的地方是打开了table4,第二次执行,居
然好了,没有改过任何东西!!
二怪:如果query2查到了记录,也就是recordnum>0,执行到第二处有下划线的地方,
告诉我类型转换错误,没查到记录为什么没有这样的错误??
请赐教!!
 
1,试下加入
  if recordnum=0 then
begin
   DataModule1.Table4.Edit;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DataModule1.Table4.Insert;
DataModule1.Table4.FieldValues['bh']:=1;
DataModule1.Table4.FieldValues['jqzl']:='换休假';
DataModule1.Table4.FieldValues['kyjq']:=0;
DataModule1.Table4.FieldValues['jqqx']:=0;
DataModule1.Table4.FieldValues['bz']:='没有换修';
DataModule1.Table4.Post;
end;
2
怀疑你某些字段的类型不一致,如CHAR 与INTEGER等等
 
1、插入模式没问题,同一段代码再执行一次就好了!
2、对不起,是在第二个下划线的下一行:yxsj:=DataModule1.Table2.FieldValues['kssj'];
类型是一致的!recordenum=0的时候,也要执行那一句代码,没有任何问题!
 
应该是数据类型不一致的问题。
 
yxsj:TDatetime;
kssj 是paradox表字段,类型是DATE
 
这个问题我引进解决了,遗憾的是不能给两位加分!
 
换成用SQL语句插入,这样写太麻烦.而且要注意是不是有什么字段是必填的.不能为空
 
在执行增加的时候,请在前面一定要加上EDIT,不然会出错。这是DELPHI的一个问题。
再说多几次EDIT也无所谓。把INSERT换成APPEND或APPENDRECNO
 
多谢各位!此问题我已经解决,先前由于在win98下面,一进入跟踪调试就死机,找不到出错的地方。
主要是第二个问题,原因是FieldValues['kssj'] 是个variety,虽然字段类型是Date,但是当他的值
是空的时候,就不是Data型了,因此出现了类型不一致的错误!
再一次谢谢各位!
 

Similar threads

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