100分大放送

jeff222 2003-10-19 04:44:30
最近做一个系统,需要点一个按钮BitButton1后为员工基本信息数据表中的每一个员工自动生成本月工资并插入到数据表“本月工资”中,内容包括日期、姓名、所在部门、基本工资、岗位津贴、学历贴、工龄工资等几部分构成。
其中日期是windows系统的日期,姓名和所在部门是员工基本信息表中的数据,基本工资是根据“员工基本信息”表中的“职位”字段确定的,比如:经理3000,副经理2000,职员1500等(这个信息保存在“基本工资”表中),岗位津贴是根据“员工基本信息”表中的“岗位”字段确定的,比如:小车司机200,秘书150等(这个信息保存在“岗位津贴”数据表中),学历贴根据“员工基本信息”表中的“文化程度”字段确定,比如大本津贴120,中专100等(这个信息保存在“学历贴”数据表中),工龄工资根据“员工基本信息”表中的“入司时间”字段确定,入公司1年工龄工资长20块。
老是在插入的时候报错:SQL:没有执行可选择特性。
高手帮忙啊!100分全给,只要能实现。
...全文
32 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw549 2003-10-23
  • 打赏
  • 举报
回复
呵呵,阿春,好久不见。
我这几天正在甲方单位,很少上qq,也很少来这里,最近可好?
有时间切磋一下。
hongqi162 2003-10-23
  • 打赏
  • 举报
回复
@_@
hmzgz81 2003-10-23
  • 打赏
  • 举报
回复
对了,合理设计一下你的数据库吧!实现这个功能会很简单的!
mrtxc 2003-10-23
  • 打赏
  • 举报
回复
库结构:
基本信息表:
ID,姓名,部门ID,职位ID,岗位ID,学历ID,入司时间,……);

职位表:
职位ID,职位名称,基本工资

岗位表:
岗位ID,岗位名称,岗位津贴


学历表:
学历ID,学历名称,学历津贴

部门表:
部门ID,部门名称,……



工资表:
ID,日期、姓名、所在部门、基本工资、岗位津贴、学历贴、工龄工资
mrtxc 2003-10-23
  • 打赏
  • 举报
回复
执行代码:
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids;

type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
qrJBXX: TADOQuery;
dsJBXX: TDataSource;
qrGZ: TADOQuery;
dsGZ: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
DBGrid2: TDBGrid;
cmd: TADOCommand;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
SQL: String;
begin

SQL := 'select now() as RQ,a.姓名,b.部门名称,c.基本工资,d.岗位津贴,e.津贴,(year(now())-year(a.入司时间))*20 as GLGZ '
+ ' from 基本信息 a,部门 b,职位 c,岗位 d,学历 e'
+ ' where (a.部门=b.ID) and (a.职位=c.ID) and (a.岗位=d.ID) and (a.学历=e.ID)'
+ ' order by a.id';

with cmd do
begin
CommandText := 'insert into 工资(日期,姓名,部门,基本工资,岗位津贴,学历津贴,工龄工资) '
+ SQL;

try
Execute;
finally
end;
end;

qrGZ.Close;
qrGZ.Open;


end;

end.
mrtxc 2003-10-23
  • 打赏
  • 举报
回复
窗口代码:
object Form1: TForm1
Left = 21
Top = 106
Width = 749
Height = 375
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 0
Top = 0
Width = 329
Height = 348
Align = alLeft
DataSource = dsJBXX
ImeName = 'hkl0804'
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object Button1: TButton
Left = 336
Top = 0
Width = 25
Height = 345
Caption = '>>'
TabOrder = 1
OnClick = Button1Click
end
object DBGrid2: TDBGrid
Left = 376
Top = 0
Width = 365
Height = 348
Align = alRight
DataSource = dsGZ
ImeName = 'hkl0804'
TabOrder = 2
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\helphim.mdb;Persi' +
'st Security Info=False'
LoginPrompt = False
Mode = cmShareDenyNone
Provider = 'Microsoft.Jet.OLEDB.4.0'
Left = 24
end
object qrJBXX: TADOQuery
Active = True
Connection = ADOConnection1
CursorType = ctStatic
Parameters = <>
SQL.Strings = (
'select a.姓名,b.部门名称,c.职称名称,d.岗位名称,e.学历名称,a.入司时间'
'from 基本信息 a,部门 b,职位 c,岗位 d,学历 e'

'where (a.部门=b.ID) and (a.职位=c.ID) and (a.岗位=d.ID) and (a.学历=e.ID' +
')'
'order by a.id ')
Left = 120
end
object dsJBXX: TDataSource
DataSet = qrJBXX
Left = 152
end
object qrGZ: TADOQuery
Active = True
Connection = ADOConnection1
CursorType = ctStatic
Parameters = <>
SQL.Strings = (
'select * from 工资')
Left = 464
end
object dsGZ: TDataSource
DataSet = qrGZ
Left = 504
end
object cmd: TADOCommand
Connection = ADOConnection1
Parameters = <>
Left = 536
end
end
jeff222 2003-10-20
  • 打赏
  • 举报
回复
表结构:
基本信息表:(员工编号,姓名,职位, 岗位, 学历,入司时间,……);
01 a 贴身秘书 小车司机 大本 1982-2-3
02 b 一般职员 保安队长 中专 1983-3-6
基本工资表:(职位, 基本工资)
贴身秘书 600
一般职员 500
岗位津贴:(岗位, 岗位津贴){只有部分岗位有津贴}
小车司机 200
班组长 150
学历贴表:(文化程度, 学历贴)
大本 50
中专 30
每月的工龄工资=工龄*20(注:工龄=现在时间-入司时间)20为公司自定的,可以修改。
附部分代码:
begin
with gl_w_rusi_time do
begin
close;
sql.Clear;
sql.Add('select Year(Getdate()-入司时间)-1900 as 工龄 from worker_basic_info');
open;
end;
with ADOQueryworker_basic_sel do
begin
close;
sql.Clear;
sql.Add('select * from worker_basic_info order by 所在部门');
open;
end;
with ADOQuery_jxgz do
begin
close;
sql.Clear;
ADOQuery_jxgz.sql.Add('select * from 绩效工资');
open;
end;
ADOQueryworker_basic_sel.First;
while not ADOQueryworker_basic_sel.Eof do
begin
ADOQuery_jxgz.First;
while not ADOQuery_jxgz.Eof do
begin
if ADOQueryworker_basic_sel.FieldByName('职位').AsString=ADOQuery_jxgz.FieldByName('职位').AsString
then str:=ADOQuery_jxgz.fieldbyname('工资').AsFloat;
ADOQuery_jxgz.next;
end;
ADOQuery_gw.First;
while not ADOQuery_gw.Eof do
begin
if ADOQueryworker_basic_sel.FieldByName('职位').AsString=ADOQuery_gw.FieldByName('岗位').AsString
then gangw_w:=ADOQuery_gw.FieldByName('津贴').AsFloat;
ADOQuery_gw.next;
end;
ADOQuery_xuel.First;
while not ADOQuery_xuel.Eof do
begin
if ADOQueryworker_basic_sel.FieldByName('文化程度').AsString=ADOQuery_xuel.FieldByName('文化程度').AsString
then gangw_xl:=ADOQuery_xuel.FieldByName('学历贴').AsFloat;
ADOQuery_xuel.next;
end;
with ADOQueryinsert_wage do
begin
with ADOQueryworker_basic_sel2 do
begin

end;
close;
sql.Clear;
sql.Add('insert into 本月工资(日期,员工编号,姓名,部门,绩效工资,岗位工资,学历贴) values(:date,:ID,:name,:dept,:strr,:gw,:xueli)');
ADOQueryinsert_wage.Parameters.ParamByName('Date').Value:=DateTimePicker1.DateTime;
ADOQueryinsert_wage.Parameters.ParamByName('ID').Value:=ADOQueryworker_basic_sel.fieldbyname('员工编号').AsString;
ADOQueryinsert_wage.Parameters.ParamByName('name').Value:=ADOQueryworker_basic_sel.fieldbyname('姓名').asstring;
ADOQueryinsert_wage.Parameters.ParamByName('dept').Value:=ADOQueryworker_basic_sel.fieldbyname('所在部门').asstring;
ADOQueryinsert_wage.Parameters.ParamByName('strr').Value:=str;
// ADOQueryinsert_wage.Parameters.ParamByName('gongling').Value:=gongling_w;
ADOQueryinsert_wage.Parameters.ParamByName('gw').Value:=gangw_w;
ADOQueryinsert_wage.Parameters.ParamByName('xueli').Value:=gangw_xl;
ExecSQL;
end;
ADOQueryworker_basic_sel.next;
end;
end;
错误信息:Project ** raised Exception Class *** with message "[Microsoft][ODBC_SQL_Driver]没有执行可选特性",process stoped,use step or run to continue.


如果把sql.Add('insert into 本月工资(日期,员工编号,姓名,部门,绩效工资,岗位工资,学历贴) values(:date,:ID,:name,:dept,:strr,:gw,:xueli)');
中的参数全改成常数,一切正常。只要有后面的参数就会出错,即使把,:strr,:gw,:xueli屏蔽,只剩:date,:ID,:name,:dept也会出错。
是在;ExecSQL; 处处的错。



delphipan 2003-10-20
  • 打赏
  • 举报
回复
UP
BG2WUI 2003-10-20
  • 打赏
  • 举报
回复
数据库的设计很重要,如果结构合理,在以后的编程中也会省不少的事。

不过,如果你非要坚持你的设计结构,我可以给你提供一些处理方式。

如果一个语句很难做,就别再试着用一个来做。

化整为零,用多个简单的语句去处理一个复杂问题,也未尝不可。

如果你用的是非桌面数据库,可以写存储过程,至少我知道SQL-SERVER的T-SQL有执行可选

择特性。
Alanwn 2003-10-20
  • 打赏
  • 举报
回复
关注!
g58521547 2003-10-20
  • 打赏
  • 举报
回复
学习
HuterTT 2003-10-20
  • 打赏
  • 举报
回复
UP^_^
zzh54zzh 2003-10-20
  • 打赏
  • 举报
回复
up ^_^
sy_315 2003-10-20
  • 打赏
  • 举报
回复
union
myboor 2003-10-20
  • 打赏
  • 举报
回复
easy
dickeybird888 2003-10-20
  • 打赏
  • 举报
回复
(@ $ @)

哈哈
csntgao 2003-10-20
  • 打赏
  • 举报
回复
把你的表结构和SQL up 上来,我给你看看
snowfog 2003-10-20
  • 打赏
  • 举报
回复
up
Tiack 2003-10-20
  • 打赏
  • 举报
回复
支持mrtxc(阿春)
IORILI 2003-10-20
  • 打赏
  • 举报
回复
支持
加载更多回复(11)

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧