我是菜鸟,现试做卡钟考勤系统,如不成功可能打包走人,但现在问题很多,SO HELP ME(如果成功,分不成问题) (200分)

  • 主题发起人 主题发起人 tianfaming
  • 开始时间 开始时间
T

tianfaming

Unregistered / Unconfirmed
GUEST, unregistred user!
1、一个卡钟数据库(硬件接口用到的数据库)与一个考勤数据库,我想把第一个数据库里的
TRANDATA表里的卡号,时间转入第二个数据库里的ATTENDANCE表,我现在只能实现一次转
档,但打卡记录改变时,要退出系统再进入才能转档,请问有什么方法在一个按钮中实现
多次转档(不要退出系统重进^-^)。
2、在1完成之后,也就是卡号,时间转入ATTENDANCE表后,要判断是否迟到早退,并且上下班
有很多时间段的员工,例如:
轮班:
生产部(白班):08:00~11:35 12:35~17:35 18:35~20:00
(晚班):19:50~22:30 23:35~04:30 05:35~08:10
工程部(白班):08:00~12:00 12:30~17:50 18:30~20:00
工程部(晚班):19:50~23:00 23:00~04:30 05:10~08:10
办公室人员:08:00~12:00 13:30~17:50
连班:
白班:08:00~11:20 (或者:08:00~11:45)11:40~17:20(或者:12:05~17:45)
17:40~20:00(或者:18:05~20:00)
晚班:20:00~22:30(或者:22:00~22:50)22:50~04:15(或者:23:10~04:35)
04:35~08:00(或者:04:55~08:00)
其中还有特殊部门需另外处理
请问在建库方面应怎样做,再有怎样实现考勤功能
以上逼于无奈,如嫌分散不够,再分允许的情况下可最大限度的给,我现在积分1200分
请多多帮忙,谢谢!!
 
对你第一个问题,我没看懂,记录改变指的是什么?
第二个问题,以下的INI可以帮助你
[Common]
总班别=1

[班别1]
内容=办公室
时间段=2
start1=8:00
end1=11:30
start2=14:00
end2=17:00
 
这是我1以前做的,一次运行只能转一次
attenmod为datamodule
procedure TConvertForm.SpeedButton1Click(Sender: TObject);
var
str:string;
i:integer;
begin
attenmod.ADODataSet1.Open;
attenmod.ADODataSet2.close;
attenmod.ADODataSet2.Active:=false;
str:='select * from attendance where 卡号=';
str:=str+''''+attenmod.ADODataSet1.fieldbyname('id').Value+'''';
attenmod.ADODataSet2.CommandText:='';
attenmod.ADODataSet2.CommandText:=str;
attenmod.ADODataSet2.Active:=true;

for i:=0 to attenmod.adodataset1.recordcount-1 do
begin
attenmod.ADODataSet2.Open;
attenmod.ADODataSet2.Edit;
if attenmod.ADODataSet1.FieldByName('燈號').Value='A' THEN
ATTENMOD.ADODataSet2.FieldByName('早上上班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='B' THEN
ATTENMOD.ADODataSet2.FieldByName('早上下班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='C' THEN
ATTENMOD.ADODataSet2.FieldByName('中午上班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='D' THEN
ATTENMOD.ADODataSet2.FieldByName('中午下班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='E' THEN
ATTENMOD.ADODataSet2.FieldByName('晚上上班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='F' THEN
ATTENMOD.ADODataSet2.FieldByName('晚上下班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value;
ATTENMOD.ADODataSet2.FieldByName('日期').Value:=attenmod.ADODataSet1.fieldbyname('日期').Value;
attenmod.ADODataSet2.Post;
convertform.Cursor:=crhourglass;
attenmod.ADODataSet1.Next;
end;
application.messagebox(pchar('转档完毕'),pchar('Information'),64);
convertform.Cursor:=crDefault;
end;
我想要实现的是多次转档,例如我在ATTENDANCE表里添加或删除一条记录后,以前要重新运行
才可以转入。
有类似考勤的源码没有,希望能给我参考,没有的多给点意见,拜托了!!
 
1.当有员工在考勤机上打卡,数据将更新到Trandata的时候,你在这里对第二个数据库的表
中内容进行更新.你将打卡机上的数据直接用sql语言输入到attendance表中就行了.
2.第二个问题我不知道成熟与否,仅共参考.
建两个表,
一个是应到表,将24小时分成一个个班段.
卡号 姓名 部门 日期 班段1 班段2 班段3........
(班段1,班段2的值是0,1.1表示这个班段该员工应该到,0则反之)
第二是实到表,
卡号 姓名 部门 日期 到的时间1 离开时间2 到达时间2 离开时间2. ....
(这个表的数据由读卡机那边转过来)
最后数据出来的时候,将二者进行对比,
 
在连班里的人数是不定的,
比如:假设此部门的总人数为20人
白班:上午人数情况为
08:00~11:20的时间段的人数为10(或者:08:00~11:45的时间段的人数为10)
可是在下午人数情况为
11:40~17:20就有可能为5人(或者:12:05~17:45时间段的人数为15人了)
此人数的变动可由其部门主管临时决定(原因是因为某段时间的工作量很大,就增加人;
某段时间的工作量很小,就减少人)
 
有没有这样麻烦哦,做一个表保存各部门主管的决定,然后工作人员-部门-(作息表+部门规定)
应该就知道是否迟到了嘛。
 
对于第一个你可以试试以下代码:
procedure TConvertForm.SpeedButton1Click(Sender: TObject);
var
str:string;
begin
attenmod.ADODataSet1.Open;

attenmod.ADODataSet2.Open;
attenmod.ADODataSet1.First;
attenmod.ADODataSet2.First;
while not attenmod.ADODataSet1.eof do
begin
attenmod.ADODataSet1.open;
attenmod.adodataset2.Close;
attenmod.adodataset2.active:=false;
STR:='select * from ATTENDANCE where 卡号=';
str:=STR+''''+attenmod.adodataset1.fieldbyname('id').Value+'''';
attenmod.ADODataSet2.commandtext:='';
attenmod.ADODataSet2.commandtext:=str;
attenmod.adodataset2.active:=true;
attenmod.adodataset2.open;
attenmod.adodataset2.edit;
if attenmod.ADODataSet1.FieldByName('燈號').Value='A' THEN
ATTENMOD.ADODataSet2.FieldByName('早上上班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='B' THEN
ATTENMOD.ADODataSet2.FieldByName('早上下班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='C' THEN
ATTENMOD.ADODataSet2.FieldByName('中午上班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='D' THEN
ATTENMOD.ADODataSet2.FieldByName('中午下班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='E' THEN
ATTENMOD.ADODataSet2.FieldByName('晚上上班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value else
if attenmod.ADODataSet1.FieldByName('燈號').Value='F' THEN
ATTENMOD.ADODataSet2.FieldByName('晚上下班').Value:=attenmod.ADODataSet1.fieldbyname('時間').Value;
ATTENMOD.ADODataSet2.FieldByName('日期').Value:=attenmod.ADODataSet1.fieldbyname('日期').Value;
attenmod.ADODataSet2.post;

attenmod.ADODataSet1.Next;

end;
application.MessageBox(pchar('转档完毕'),pchar('Information'),64);
end;
 
我现在手上的IC卡(非接触式)正好快完工了,要不要转让给你一套,可以硬件加软件
1.卡钟供应商是否提供动态库之类接口,(一般多有的)
每次接考勤数据之后应有个数据记录指针保存下来供下次收数据用,者或会重复收数据
2.在收完数据之后我是这样做的:
根据本次接收数据的日期范围,生成所有员工日期范围内的应考勤数据了(包含判
断是否有休息日,请假等,再取准点上下班时间段来进行上班下班时间是否在设定的时间
段内,是否迟到早退,或则记矿工,思路就这样,呵呵慢慢来)
我用 delph5 + SQL server7 公司可是用这卖钱哦
 
to jun :怎样的转让??
to 大家,请大家多提提意见!!!谢谢!!
 
我公司考勤软件就卖1000RMB以上,想要源码吗.....不好说啊,可能后面加个 0
 
谢谢大家!!
 
现在已搞定!谢谢大家!!
 
后退
顶部