xp同一时刻只能有一台机子连到远程机
在开始--程序--附件--远程桌面->ip,用户名,密码->选项(设置驱动器,设置后可以在本机复制远程电脑上的内容到所设定的驱动器(硬盘)里面)
1.需求说明::
BM2-D机械制造MES系统和造船总装MES系统----数字化工厂模型分册
数字化工厂模型是BM2-D产品的一级模块,主要负责建立企业各种制造资源的数字化模型,是整个MES系统的基础。
数字化建模包括基础数据管理、计划基础数据管理、工厂管理、WBS模版管理、物料及BOM管理、规则管理、物理工厂管理,工艺路线管理等多个方面。
以产线为依据,对每条工艺路径的每道工序,以工作中心为单位,对每个工位进行实绩数据、质量数据、设备点修数据等相关数据进行收集
对工厂内的产线、工作中心、工艺路径数据、物料基础数据、BOM数据进行管理
前提:
? 用户根据自己的管理需要对所有物料进行物料编码,并整理成文件
? 根据BOM及工艺整理BOM文件
? 用户整理工厂内产线信息、工作中心信息
? 根据工艺整理工艺路径文件
使用对象
生产管理部门、物流管理部门、财务管理部门、质量管理部门、设计管理部门。
系统基础数据管理功能,包括:单位管理、日历、组织管理、员工管理、币种、汇率
(!)
1.单位组的增删改(组ID不重复) FormFMBD01 TFMBD01
2.单位的增删改 FormFMBD02 TFMBD02
3.单位换算的增删改 (用户输入源单位,换算系数,额外数量,目标单位信息,点击保存按钮) FormFMBD03 TFMBD03
4.日历模版 FormFMBD04 TFMBD04 TFMBD05
5.日历 FormFMBD05 TFMBD06 TFMBD07 TFMBD08
6.组织单位(FormFMBD06) TFMBD09 TFMBD10 TFMBD73
7.组织单位生效记录(FormFMBD07) TFMBD09
8.组织单位地址信息(FormFMBD08) TFMBD10
9.组织单位职位(FormFMBD09 TFMBD14
10.组织单位工种(FormFMBD44) TFMBD15
11.组织单位合计(FormFMBD45)
4.2.12.员工管理(FormFMBD10) TFMBD11 TFMBD10 TFMBD12 TFMBD13
4.2.13. 员工职位(FormFMBD09) TFMBD14
4.2.14. 员工休假(FormFMBD11) TFMBD16
4.2.15. 工种管理(FormFMBD44) TFMBD15
4.2.16. 资质管理(FormFMBD12) TFMBD17
4.2.17. 币种/汇率(FormFMBD13) TFMBD18
4.2.18. 邮政编码(FormFMBD14) TFMBD20
4.2.19. 国家/地区(FormFMBD15) TFMBD21 TFMBD22 TFMBD23
4.2.20. 地址格式(FormFMBD16) TFMBD24 TFMBD25
4.2.21. 编号规则(FormFMBD17) TFMBD24 TFMBD26
4.2.22. 公司信息(FormFMBD18) TFMBD27
4.2.23. 代码类型(FormFMBD19)
4.2.24. 代码值(FormFMBD20) TFMBD30
4.2.25. 库存仓库(FormFMBD21) TFMBD41
4.2.26. 库存通道(FormFMBD22) TFMBD42
4.2.27. 库存库位(FormFMBD23) TFMBD43
4.2.28. 托盘(FormFMBD24) TFMBD44
4.2.29. 托盘类型(FormFMBD25) TFMBD45
4.2.30. 托盘类型组(FormFMBD26) TFMBD46 TFMBD47 TFMBD45
4.2.31. 铲车(FormFMBD27) TFMBD48
4.2.32. 用户规则(FormFMBD32) TFMBD73 TFMBD72
4.2.33. 业务规则(FormFMBD33) TFMBD71 TFMBD72
4.2.34. 设备类型(FormFMBD34) TFMBD31
4.2.35. 设备BOM维护(FormFMBD35)TFMBD32
4.2.36. 维修方法(FormFMBD36) TFMBD33
4.2.37. 维修内容(FormFMBD37) TFMBD34
4.2.38. 点检方法(FormFMBD38) TFMBD35
4.2.39. 故障类型(FormFMBD39) TFMBD36
4.2.40. 停机类型(FormFMBD40) TFMBD37
4.2.41. 异常类型(FormFMBD41) TFMBD38
4.2.42. 备件信息维护(FormFMBD42) TFMBD39
4.2.43. 工具类型(FormFMBD43) TFMBD40
4.2.44. 图纸大类(FormFMBD46) TFMBD62
4.2.45. 图纸小类(FormFMBD47) TFMBD63
2.项目无关的
(1)先做页面:::新建项目,添加引用,建立文件夹-->添加窗体[继承自EFFrom]->根据需求拖放对应控件 ->封装参数,调用后台CallServuces("PP:",eiinfo)-->然后登陆mes添加画面,注意画面名称如FormYMDB01,配置时名称YMDB01会默认前两位YM当做模块名.
当访问页面时,会去YM/目录下去找你所配置的dll.---然后配置按钮(主要是F1 dao F12的按钮是否显示--->然后到用户配置权限对应页面和按钮
(2)做后台:::::::不知道咋关联的(貌似是借助Tuxedo来管理,具体目录:server :::: Arch |Config|Include|Lib|Libd|Ubin|Ubind:::Arch下有CPP(Dev,Include,Lib,Libd,Ubin,Ubind)和Proc
一个模块对应一个文件夹,包含一个dllmain.cpp文件,内包含一个BOOL APIENTRY DllMain()方法,模块下其他方法文件夹对应该方法如lmca_01_del.cpp标示一个service,开头用
#include "stdafx.h"
#include "tlmca01.h"
// Service 入口
BM2F_ENTERACE(lmca_01_del)
//员工出勤记录删除
int f_lmca_01_del(EIClass * bcls_rec, EIClass * bcls_ret,CDbConnection * conn)
{}然后是方法体
3.前台可用代码
(1) this.grdResult.ColumnInfo = resources.GetString("grdResult.ColumnInfo");
在哪里定义的grdResult.ColumnInfo,绑定的efgrid 列
(2) //性别
this.grdResult.Cols["SEX"].DataMap = Utility.QueryCodeHashTable("SEX");
this.grdResult.Cols["SEX"].TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter;
使用Utility 公共方法查询通用的HashTable
(3) 以模态形式调用另一个窗体FormLMBI02(子窗体不关闭,父窗体不能用),并传递参数
this.EFShowDialogForm("LMBI02",string.Empty);// 调用新增,传递空
this.EFShowDialogForm("LMBI02", this.grdResult[this.grdResult.RowSel, "STAFF_NO"].ToString()); //调用修改传递id主键
(4) if (this.grdResult.EFChoiceCount <= 0) //用户选择的条数
{
MessageBox.Show("请选择要修改的人员!");
}
(5)this.grdResult[this.grdResult.RowSel, "STAFF_NO"].ToString() ;//选择行的STAFF_NO列的值
(6)
if (this.grdResult.EFChoiceCount <= 0)
{
MessageBox.Show("请选择要删除的人员!");
this.ef_args.buttonStatusHold = true; //啥意思??
return;
}
(7)//确认提示框
if (MessageBox.Show("您确定要删除吗?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
(8)
EI.EIInfo inInfo = new EI.EIInfo();
inInfo.SetBlockVal(this.grdResult); //设置inInfo的内容为efgrid选择的行的内容 ??????
EI.EIInfo outInfo = EI.EITuxedo.CallService(LMServiceName.LMBI_01_DEL, inInfo);
(9)//取消所有选中行
if (this.grdResult.EFChoiceCount > 0)
{
for (int i = 1; i <= this.grdResult.EFUserRows; i++)
{
this.grdResult[i, "check_option"] = false;
}
}
(10)点击选中或取消选中某一行,先判断是否可以多选,在判断是否已选中
EFChoseCount --选择行数
private void grdResult_Click(object sender, EventArgs e)
{
if (grid_SingleSel)
{
//修改时设置只允许单选
for (int i = 1; i <= this.grdResult.EFUserRows; i++)
{
this.grdResult[i, "check_option"] = false;
}
if (this.grdResult.RowSel > 0)
{
this.grdResult[this.grdResult.RowSel, "check_option"] = true;
}
}
else
{
//删除时允许多选
if (!(bool)this.grdResult[this.grdResult.RowSel, "check_option"])
this.grdResult[this.grdResult.RowSel, "check_option"] = true;
else
this.grdResult[this.grdResult.RowSel, "check_option"] = false;
}
}
#endregion
(11)下拉框选择事件
private void cmbWORKING_AREA_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.cmbWORKING_AREA.SelectedValue == null || this.cmbWORKING_AREA.SelectedValue.ToString() == string.Empty)
{
this.cmbWORKING_GROUP.DataSource = null;
}
else
{
this.cmbWORKING_GROUP.QuerySQL = string.Format("select CODE_PRO_NAME,CODE_PRO_NO from dbo.TBM01 where CODE_T_NO = 'WORKING_GROUP' and FATHER_T_NO = 'WORKING_AREA' and FATHER_PRO_NO= '{0}' order by REVEAL_SEQ", this.cmbWORKING_AREA.SelectedValue.ToString());
}
}
(12)组织查询条件(对于未选择的,赋值为Empty,在后台可据此判断查询条件
//性别
inInfo.SetColName(3, "sex");
if (this.cmbSEX.SelectedValue != null)
{
inInfo.SetColVal(1, "sex", this.cmbSEX.SelectedValue);
}
else
{
inInfo.SetColVal(1, "sex", String.Empty);
}
(13) //调用后台服务,传入inInfo,传出outInfo-----服务名称用LMServiceName.LMBI_01_INQ ??在哪儿定义??
EI.EIInfo outInfo = EI.EITuxedo.CallService(LMServiceName.LMBI_01_INQ, inInfo);
答::在Common.XML中,相关联的Common.dll ,common.pdb
<member name="F:Common.LMServiceName.LMBI_01_DEL">
<summary>
删除人员基本信息、劳资信息lmbi_01_del
</summary>
</member>
(14) //绑定Grid
outInfo.GetBlockVal(this.grdResult);
(15)如何添加一行 ????UIHelper 是哪个dll下的???
(16) UIHelper.ChangeGridProperty(this.grdResult, GridAction.None); 究竟是个什么东西?
UIHelper.ChangeGridProperty(this.grdResult, GridAction.Insert);
this.grdResult.EFAllowMenuNew = false;
this.grdCTF.KeyDown -= new System.Windows.Forms.KeyEventHandler(this.grdCTF_KeyDown);
UIHelper.FreezeButtonStatus(this);
UIHelper.ChangeGridProperty(this.grdResult, GridAction.None);
(17) /// <summary>
/// 部门下拉框选择事件--这是自定义的控件的使用
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmbDEPT_NO_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.cmbDEPT_NO.SelectedValue == null || this.cmbDEPT_NO.SelectedValue.ToString() == string.Empty)
{
this.cmbWORKING_AREA.DataSource = null;
this.cmbWORKING_GROUP.DataSource = null;
}
else
{
this.cmbWORKING_AREA.QuerySQL = string.Format("select CODE_PRO_NAME,CODE_PRO_NO from dbo.TBM01 where CODE_T_NO = 'WORKING_AREA' and FATHER_T_NO = 'DEPT_NO' and FATHER_PRO_NO= '{0}' order by REVEAL_SEQ", this.cmbDEPT_NO.SelectedValue.ToString());
}
}
EFComBox使用
所选择项::: this.efComboBox1.SelectedValue.ToString();
绑定方法:::(注意EIInfo 转换为DataTable,还有插入空行
public void bindCombox()
{
//查询
string querySql = string.Format("select CODE_PRO_NAME,CODE_PRO_NO from dbo.TBM01 where CODE_T_NO = 'DEPT_NO' order by REVEAL_SEQ");
EI.EIInfo outInfo = Common.Utility.ExecQuery(querySql);
if (outInfo.sys_info.flag < 0)
{
MessageBox.Show(outInfo.sys_info.msg, "查询错误");
this.efComboBox1.DataSource = null;
}
//根据返回值绑定数据项
//默认添加一个空白项
DataTable codeTable = outInfo.DataSet.Tables[0];
DataRow newRow = codeTable.NewRow();
newRow[0] = "";
newRow[1] = "";
codeTable.Rows.InsertAt(newRow, 0);
this.efComboBox1.DataSource = codeTable;
this.efComboBox1.DisplayMember = codeTable.Columns[0].ColumnName;
this.efComboBox1.ValueMember = codeTable.Columns[1].ColumnName;
}
(18)public sealed class LMServiceName 什么意思
(19)CTLMPF02 这是什么
-------
试着做个模板页出来
(1)想实现一个窗体,而要求子类必须重写一些方法----试了接口(选择要继承的窗体时看不到),,试了抽象类(同接口一样),----均不理想---最笨方法:单单提示
(2)对于参数是设为全局(父类中定义),还是在方法实现中定义?)
(3)定下来:除帮助查询外,新增,修改删除都是 分3不->预处理,执行,取消
(4)绑定efgird时,若用EIInfo 的 getBlockVal(efGrid1)需要预先设定绑定列 名称,绑定项
(5)标题,和信息提示(状态栏).与内容框无关可以使用splitwindow.
(6)新增时,添加一行(还可通过弹出菜单继续添加)
(7)把一行选中?? this.grdResult[this.grdResult.RowSel, "check_option"] = true;
(8)设个全局(父类中定义)--调用子类方法前清空,然后在子类中使用,在父类中绑定);
(9)原Common中的UIHelper类主要是根据动作Action控制efGrid的右键菜单各项是否可用
(7)准备新增 --新增若在点击确定后数据检查有错需重新输入则,状态??是否允许新增多条??如果点击右键新增呢?
(11)----当点击右键新增时,怎么触发F3被按下的事件,使处于新增状态
(12)--点击确定后出错(显示子系统不能为空,或其他错误)--页面确定,取消成灰色! error?
(13)最后一行为什么成为灰色啦??? --可设为不可编辑当点击功能键后再编辑,父类中就不要绑定啦.直接测试子类,修改父类
(14)决定---把绑定赋值等都放到子类中,再次尽可能简化父类
(15)是不是出现如下错误::
在 System.Delegate.Remove(Delegate source, Delegate value)
在 C1.Win.C1FlexGrid.Util.Styles.k.b(g A_0)
在 C1.Win.C1FlexGrid.CellStyleCollection.a(t A_0)
在 C1.Win.C1FlexGrid.CellStyleCollection.Clear()
在 C1.Win.C1FlexGrid.C1FlexGridBase.set_StyleInfo(String value)
在 YM.FormYMCM01.InitializeComponent() 位置 D:\新项目\测试项目\Source\Client\YM\YMBM\FormYMCM01.Designer.cs:行号 111
在 YM.FormYMCM01..ctor() 位置 D:\新项目\测试项目\Source\Client\YM\YMBM\FormYMCM01.cs:行号 21
(16)写个最简单的测试程序,实现增删改
SqlConnection con = new SqlConnection("Data Source=10.25.77.129;User ID=bm2d;Password=bm2d;");
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from test";
DataTable dt = new DataTable();
con.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
if (dt != null && dt.Rows.Count > 0)
{
System.Console.Write("ok");
}
(17)对于2步的按钮,当点击确定按钮.但执行不成功(如插入数据有误,需重新输入)时.F1到F12按钮的状态应该是灰色?
(18)-可以整体运行啦--ubin/cnslbee.exe --
(19)郁闷呀this.ef_args.buttonStatusHold = true; --- 整了接近一天的时间,,,也不完全是,这句话使按钮保持当前状态,并不是控制是否成灰色
(20)既有客户端又有服务器代码,进行调试时,,服务器端项目属性 --调试 附加选择是
(21)再一个解决方案下面点击新建解决方案文件夹就会建立一个文件夹--笨死啦
4。后台可用代码
(22)静态库:
中间目录:..\..\..\..\Obj\$(PlatformName)\$(ConfigurationName)\$(ProjectName)
输出目录:..\..\..\..\Libd
动态库:
中间目录:..\..\..\..\Obj\$(PlatformName)\$(ConfigurationName)\$(ProjectName)
输出目录:..\..\..\..\Ubind
(23)数据库表列明称统一用小写
(24)新建项目属性--连接器--附加库目录..\..\..\..\..\..\Libd;..\..\..\..\Libd (忘了附加库项了)
D:\Source\Server\Arch\CPP\Libd;D:\Source\Server\Arch\Libd
---C++ --常规里面 有附件包含目录..\..\..\..\..\..\Include;..\..\..\..\Include
(25)命名规则限制的很死,必须按照格式来,函数名已f开头.如f_lmbi_inq_1
(23)项目 更命名控件的要求 如de,liblm00
(24)这点很重要,,耽误了很长时间---属性-->链接器-->输入->附加依赖项----添加对应的lib(如bm2core.lib,bm2data.lib 等)
(25)指定光标在grid内某一块上
/Od /I "..\..\..\..\..\..\Include" /I "..\..\..\..\Include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_MBCS" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"..\..\..\..\Obj\Win32\Debug\libLMBI\libLMBI.pch" /Fo"..\..\..\..\Obj\Win32\Debug\libLMBI\\" /Fd"..\..\..\..\Obj\Win32\Debug\libLMBI\vc90.pdb" /W4 /nologo /c /ZI /TP /errorReport:prompt
/Od /I "..\..\..\..\..\..\Include" /I "..\..\..\..\Include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "UNICODE" /D "_WINDLL" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"..\..\..\..\Obj\Win32\Debug\p_ymbd_9998\p_ymbd_9998.pch" /Fo"..\..\..\..\Obj\Win32\Debug\p_ymbd_9998\\" /Fd"..\..\..\..\Obj\Win32\Debug\p_ymbd_9998\vc90.pdb" /W4 /nologo /c /ZI /TP /errorReport:prompt
(1)///dllmain.cpp
#include "stdafx.h"
using namespace BM2::Data;
#include <windows.h>
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE /*hModule*/,
DWORD ul_reason_for_call,
LPVOID /*lpReserved*/
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
------------------------------------------------------------------
------------------------------------------------------------------
/////查询lmbi_01_inq.cpp
#include "stdafx.h"
// Service 入口
BM2F_ENTERACE(lmbi_01_inq)
//查询人员信息
int f_lmbi_01_inq(EIClass * bcls_rec, EIClass * bcls_ret,CDbConnection * conn)
{
int doFlag = 0;
try
{
char staff_no[50] = "" ;
char user_name[50]= "" ;
char sex[50]= "" ;
char dept_no[50]= "" ;
char working_area[50]= "" ;
char working_group[50]= "" ;
char labour_team[50]= "" ;
char post[50]= "" ;
char job_cate[50]= "" ;
char user_type[50]= "" ;
char user_status[50]= "" ;
char delete_flag[50]= "" ;
if(bcls_rec->Tables[0].Columns.Contains("staff_no"))
{
bcls_rec->GetColVal(1, 1, "staff_no", staff_no);
}
if(bcls_rec->Tables[0].Columns.Contains("user_name"))
{
bcls_rec->GetColVal(1, 1, "user_name", user_name);
}
if(bcls_rec->Tables[0].Columns.Contains("sex"))
{
bcls_rec->GetColVal(1, 1, "sex", sex);
}
if(bcls_rec->Tables[0].Columns.Contains("dept_no"))
{
bcls_rec->GetColVal(1, 1, "dept_no", dept_no);
}
if(bcls_rec->Tables[0].Columns.Contains("working_area"))
{
bcls_rec->GetColVal(1, 1, "working_area", working_area);
}
if(bcls_rec->Tables[0].Columns.Contains("working_group"))
{
bcls_rec->GetColVal(1, 1, "working_group", working_group);
}
if(bcls_rec->Tables[0].Columns.Contains("labour_team"))
{
bcls_rec->GetColVal(1, 1, "labour_team", labour_team);
}
if(bcls_rec->Tables[0].Columns.Contains("post"))
{
bcls_rec->GetColVal(1, 1, "post", post);
}
if(bcls_rec->Tables[0].Columns.Contains("job_cate"))
{
bcls_rec->GetColVal(1, 1, "job_cate", job_cate);
}
if(bcls_rec->Tables[0].Columns.Contains("user_type"))
{
bcls_rec->GetColVal(1, 1, "user_type", user_type);
}
if(bcls_rec->Tables[0].Columns.Contains("user_status"))
{
bcls_rec->GetColVal(1, 1, "user_status", user_status);
}
if(bcls_rec->Tables[0].Columns.Contains("delete_flag"))
{
bcls_rec->GetColVal(1, 1, "delete_flag", delete_flag);
}
CDbCommand comm1(conn);
comm1.SetCommandText(
"select * from dbo.VLMBI01 where staff_no like '%'+dbo.nvl(@staff_no,staff_no)+'%' "
" and user_name like '%'+dbo.nvl(@user_name,user_name)+'%' and sex=dbo.nvl(@sex,sex) "
" and dept_no=dbo.nvl(@dept_no,dept_no) and working_area=dbo.nvl(@working_area,working_area) "
" and working_group=dbo.nvl(@working_group,working_group) and labour_team like '%'+dbo.nvl(@labour_team,labour_team)+'%' "
" and post=dbo.nvl(@post,post) and job_cate=dbo.nvl(@job_cate,job_cate) "
" and user_type=dbo.nvl(@user_type,user_type) and user_status=dbo.nvl(@user_status,user_status) "
" and delete_flag=dbo.nvl(@delete_flag,delete_flag) "
" order by staff_no ");
comm1.Parameters.Set("staff_no", staff_no);
comm1.Parameters.Set("user_name", user_name);
comm1.Parameters.Set("sex", sex);
comm1.Parameters.Set("dept_no", dept_no);
comm1.Parameters.Set("working_area", working_area);
comm1.Parameters.Set("working_group", working_group);
comm1.Parameters.Set("labour_team", labour_team);
comm1.Parameters.Set("post", post);
comm1.Parameters.Set("job_cate", job_cate);
comm1.Parameters.Set("user_type", user_type);
comm1.Parameters.Set("user_status", user_status);
comm1.Parameters.Set("delete_flag", delete_flag);
int nResultRecordCount = comm1.ExecuteQuery(bcls_ret->Tables[0]);
EDLog(1, 1, "共查询到%d条记录", nResultRecordCount);
}
catch(CDbException& ex)
{
strcpy(s.msg, ex.GetMsg());
s.flag = ex.GetCode();
doFlag = -1;
}
return doFlag;
}
//--------------------------------------------------------------------------
//删除代码lmbi_01_del.cpp
//--------------------------------------------------------------------------
#include "stdafx.h"
// Service 入口
BM2F_ENTERACE(lmbi_01_del)
//删除人员信息
int f_lmbi_01_del(EIClass * bcls_rec, EIClass * bcls_ret,CDbConnection * conn)
{
int doFlag = 0;
try
{
char rowguid[50]="";
for(int i=1;i<=bcls_rec->GetRow(1);i++){
bcls_rec->GetColVal(1, i, "ROWGUID", rowguid);
CDbCommand comm1("update TLMBI01 set DELETE_FLAG = '1' where ROWGUID = @rowguid", conn);
comm1.Parameters.Set("rowguid",rowguid);
comm1.ExecuteNonQuery();
}
}
catch(CDbException& ex)
{
strcpy(s.msg, ex.GetMsg());
s.flag = ex.GetCode();
doFlag = -1;
}
return doFlag;
}
//--------------------------------------------------------------------------
//删除代码lmbi_02_upl.cpp
//--------------------------------------------------------------------------
#include "stdafx.h"
#include "tlmbi01.h"
// Service 入口
BM2F_ENTERACE(lmbi_02_upl)
//修改人员基本信息中的照片路径
int f_lmbi_02_upl(EIClass * bcls_rec, EIClass * bcls_ret,CDbConnection * conn)
{
int doFlag = 0;
try
{
//人员基本信息
CTLMBI01 tlmbi01(conn);
// 获取前台传入参数
tlmbi01.MergeFrom(bcls_rec->Tables[0].Rows[0]);
//修改操作
tlmbi01.Update("PHOTO_PATH","ROWGUID");
}
catch(CDbException& ex)
{
strcpy(s.msg, ex.GetMsg());
s.flag = ex.GetCode();
doFlag = -1;
}
return doFlag;
}
5.再看详细需求
6.工程文件是*.vcproj文件,别看到个vs图标(如*.vcproj.ZK.ZHANGKAI.user)就狂点.工程才是基本单位