zoukankan      html  css  js  c++  java
  • 开端2(2)

    --------------------------------------------
    1。是否允许同时增删改多行?如果允许,是否需要引入事务???中途出错怎么处理??
    2。在页面取消一个操作时,是否要重新查询
    3。执行服务出错是否需要按钮状态保持-  -  //暂时保持

    4.删除组时,是否要查看组下面是否有单位存在??--是否建立了外键??
    5. 复制新增咋不能用啦??-----它会自动根据你选择的行,是否可以复制新增而是否显示
    6。.做日历模板改咋做里?不清楚内部逻辑--
      (!)05中,哪个是主键:模板id,星期,属性--共同做主键? 是共同做主键,修改时不可修改
     (2)删除04表时,是否要把05表对应的删除掉 -- 是,05表是由根据04表的id来查询的,若没了04表中对应数据,对用户来说,05表中数据不可见
     (3)是否允许删除多行..-功能键主要是对哪个gridview的操作,,哪个tab页为当前页,操作哪个不太合理,因可以来回变动--设置为不可来回变动的,用一个bool值表示是否点击了2步操作的按钮
     另用一个int值表示当前所应保持的tab页..
     (4)所有表数据将来会有个主键,rec_id是通过GUID生成的,使用:System.Guid.NewGuid().ToString();将产生一个唯一的字符串.世界唯一,干!
     (5)EIInfo没能找到合适的行过滤的方法,,用DetaView不方便.查询多次有损效率,,郁闷--需求,当选择模板id时,根据id查询具体模板,然后在显示时,按照星期字段,分别显示在七个不同的grid中..
     (6)重构,重构,,干,,貌似很多相似的方法都可以再继续重构-->结果成了,方法名套方法名-,再套方法名---究竟是好还是不好呢??是清晰了还是更复杂啦?
     (7)TTA数据字典..公司内部操作数据库的工具可能和 dbDesinger相似,,没用户名密码不能深层研究下
     (8)笔记本功能键要去了解下,,干Fn+ F11把无线关了..省的它自动搜索,不停弹出图标提示,已连接
     (9)还是得抽时间,细看下所谓的业务流程,别总想着有人解释,总想着做时在看
    ------
    FMBD05: 多记录区域1,2,3,对应06,07.08表,查询区域06。.复制区域 2个下拉框,新增区域?
     日,周,月 对应什么????
     新增区域的: 日历,使用基本日历,工作时间模板什么意思
    --------------------------------------------

    SELECT  * from test where code_name = dbo.nvl(@NAME,code_name) and code_id = dbo.nvl(@ID,code_id)
    dbo.nvl()使用方法,判断是否是空值,空值则取后一个参数的值,当后一个参数为列名时--也即表示,当后一个参数为空时,后一个参数将不作为选择条件,因如code_name=code_name
    在程序中的使用--针对一个表即可只写一个查询即可,列出所有字段,对于不做为查询依据的只要为该值赋空值即可

    当在efgrid中添加一列时,默认没有列明称,当使用该控件时就会报异常"**列名是必须的
     strAttribId = inInfo.blk_info[0].Rows[index]["ATTRIB_ID"].ToString(); index是从零开始的,超出范围时会报错

    很傻的一个错误,当还原数据库时,选中总项,在选择任务还原,,而不是选中要还原的数据库,右击原则还原..会提示正在使用???不知道哈
    删除原来数据库(关闭连接)--再重新还原

    保存的是用户名还是用户id

    1。怎样判断是否选中行;
    (1)if ((bool)this.efGridResult[i, "check_option"] == true)
      i的取值?grid标题行为第0行,一次类推;;;;;EFUserRows 表示数据行,Rows.Count包含标题行,在grid属性中可设置EFUserRows = 0 则不会有初始化时的空行
      代码:
       for (int i = 1; i <= this.efGridResult.EFUserRows; i++)
        {
            if ((bool)this.efGridResult[i, "check_option"] == true)
            {
                //代码代号不能为空
                if (this.efGridResult[i, "code_t_no"] == null || string.IsNullOrEmpty(this.efGridResult[i, "code_t_no"].ToString().Trim()))
                {
                    MessageBox.Show("代码代号不能为空");
                    return false;
                }
              }
        }
    2。怎样固定一列不可修改..如在修改时不能修改主键,新增时可修改,且变色
    (1)色变了怎么还原回去???
        this.efGridResult.Cols["code_t_no"].AllowEditing = false;
        this.efGridResult.Cols["code_t_no"].StyleNew.BackColor =SystemColors.ScrollBar;// Color.Gray; //设为灰色
     ----当修改时,设置为不可编辑不好,,改为::当新增时可编辑,初始状态不可编辑  
     
    3。分析下c++文件AssisFunction.cpp的内容
    #region{
    #include "stdafx.h"
    using namespace BM2;
    using namespace BM2::Data;
    using namespace BM2::Data::DbClient;
    /******************************************************************
     * 函数功能:实现数据库非查询操作
     * 参数描述:
     *   1. CDbConnection * conn 数据库链接对象
     *   2. BM2_TCHAR * sqlstr  SQL语句
     *   3. EIClass * paraei  SQL参数
     * 返回值  :小于0表示SQL操作不成功,正值为影响的行数
     *****************************************************************/
    int NonQuerySQLFunc(CDbConnection * conn, BM2_TCHAR * sqlstr, EIClass * paraei)
    {
     int flag = 0, flag2 = 0;
     CString tmp(""), tmp2("");
     CString sql(sqlstr);
     sql = sql.Trim();
     EIClass para;

    //正常的sql 语句如select,update,delete 等大于6位字符.
     if(sql.GetLength() <= 6 || paraei == NULL)
     {
      EDLog(1,1,"%s","SQL操作类型不正确!");
      return -1;
     }
     try
     {
      //根据前6位字符判断是增删改的哪一项
      if(sql.Substring(0,6).ToLower() == "update") //更新--可更新多行.若paraei 含多行记录,则生成 的sql语句??????有疑问
      {
       flag = -1;
       //如果更新语句含有*,则去掉*
       for(int i=0;i<sql.GetLength();i++)
       {
        if(sql[i] == '*')
        {
         flag = i;
         sql = sql.Delete(flag,1); //删除*;
         break;
        }  
       }
       //含有*号
       if(flag != -1)
       {
        //需要替换*为表字段和@参数
        //更新数据 条数:paraei->Tables[0].Columns.get_Count()
        for(int i=0;i<paraei->Tables[0].Columns.get_Count();i++)
        {
         CDataColumn & col = paraei->Tables[0].Columns[i];
         tmp = col.get_ColumnName().ToUpper(); //如id列,列名id; tem = " id "
         
         //硬编码方式,去除EI_ROW_NUM列
         if(tmp == "EI_ROW_NUM")
          continue;

         tmp += "=@";                            //tem = " id=@ "
         tmp += col.get_ColumnName().ToLower();  //temp = "id=@ID"
         tmp += ",";                             //temp = "id=@ID,"
         sql = sql.Insert(flag,tmp);  //在原*位置插入类似 id = @ID, 的语句
         flag += tmp.GetLength();
        }
        sql = sql.Delete(flag-1,1);    //删除一个,类似  temp = "id = @ID,name=@NAME"
       }
      }
      else if(sql.Substring(0,6).ToLower() == "insert")
      {
       flag = -1;
       flag2 = -1;
       for(int i=0;i<sql.GetLength();i++)
       {
        if(sql[i] == '*')
         if(flag == -1)
         {
          flag = i;
          sql = sql.Delete(i,1);
          i--;
         }
         else
         {
          flag2 = i;
          sql = sql.Delete(i,1);
          break;
         }
       }
       if(flag != -1 && flag2 != -1)
       {
        //需要替换*为表字段和@参数
        for(int i=0;i<paraei->Tables[0].Columns.get_Count();i++)
        {
         CDataColumn & col = paraei->Tables[0].Columns[i];
         tmp = col.get_ColumnName().ToUpper();

         //硬编码方式,去除EI_ROW_NUM列
         if(tmp == "EI_ROW_NUM")
          continue;

         tmp += ",";
         sql = sql.Insert(flag,tmp);
         flag += tmp.GetLength();
         flag2 += tmp.GetLength();
         if(col.get_DataType() == DsType::DT_STRING)
         {
          tmp = tmp.Insert(0,"@");
          tmp = tmp.Insert(tmp.GetLength()-1,"");
         }
         else
          tmp = tmp.Insert(0,"@");
         sql = sql.Insert(flag2,tmp.ToLower());
         flag2 += tmp.GetLength();
        }
        sql = sql.Delete(flag2-1,1);
        sql = sql.Delete(flag-1,1);
       }
      }
      else if(sql.Substring(0,6).ToLower() == "delete")
      {
      }
      else
      {
       EDLog(1,1,"%s","SQL操作类型不正确!");
       return -1;
      }

      //解析sql,将@参数名统一放入para中
      flag = -1;
      flag2 = 1;
      CDataTable & t = para.Tables[0];
      t.Columns.Add(DsType::DT_STRING,"paraname");
      //只记录SQL语句中的@参数名
      for(int i=0;i<sql.GetLength();i++)
      {
       if(sql[i] == '@')
       {
        flag = i;
        continue;
       }
       if(flag >= 0 && (sql[i] ==  ',' || sql[i] == ' '
       || sql[i] == ')' || sql[i] == '(' || sql[i] == '\0'
       || sql[i] == ' ' || sql[i] == '\''))
       {
        tmp = sql.Substring(flag+1,i-flag-1).ToLower(); /////
        CDataRow & row = t.Rows.Add();
        row["paraname"] = tmp;
        flag = -1;
        continue;
       }
       if(flag >= 0 && i == sql.GetLength() - 1)
       {
        tmp = sql.Substring(flag+1,i-flag).ToLower();
        CDataRow & row = t.Rows.Add();
        row["paraname"] = tmp;
        flag = -1;
       }

      }

      //使用Command对象
      CDbCommand command(sql,conn);
      
      //为参数赋值,并执行sql:command.ExecuteNonQuery();
      for(int i=0;i<paraei->Tables[0].Rows.get_Count();i++)
      {
       //遍历要处理的行,每次循环处理一行
       command.Parameters.Clear();
       for(int j=0;j<para.Tables[0].Rows.get_Count();j++)
       {
        //遍历参数表
        CDataRow & row = para.Tables[0].Rows[j];
        tmp = (CString)row["paraname"];
        CDataProxy * cp = NULL;
        flag = -1;
        //开始查找参数值
        for(int tc=0;tc<paraei->Tables.get_Count();tc++)
        {
         for(int cc=0;cc<paraei->Tables[tc].Columns.get_Count();cc++)
         {
          //遍历每一个列
          tmp2 = paraei->Tables[tc].Columns[cc].get_ColumnName().ToLower();
          if(tmp2 == tmp)
          {
           flag = 0;
           if(tc == 0)
           {
            //参数在主数据源中,取当前第i行
            cp = &(paraei->Tables[tc].Rows[i][cc]);
           }
           else
           {
            //参数在辅助数据源中
            if(paraei->Tables[tc].Rows.get_Count() > i)
            {
             //取对应行的参数
             cp = &(paraei->Tables[tc].Rows[i][cc]);
            }
            else
            {
             //取第一行的参数
             cp = &(paraei->Tables[tc].Rows[0][cc]);
            }
           }
           break;
          }
         }
         //找到后跳出
         if(flag == 0) break;
        }
        if(flag < 0) return -1;
        tmp2 = (CString)(*cp);
        //防止空字符参数
        if(cp->m_DataType == DsType::DT_STRING)
         if(tmp2 == "") tmp2 = " ";
        command.Parameters.Set(tmp,tmp2);
       }
       flag = command.ExecuteNonQuery();
       if(flag < 0) return -1;
      }
     }
     catch(CDbException& ex)
     {
      EDLog(1,1,"%s",ex.GetMsg());
      return -1;
     }
     return flag;
    }
    #endregion }

    4。分析下基础画面类型
    (1)类似模板画面一
    (2)上面查询框,下面tab 如:FMBD04 ,FMBD10
    (3)多个相关联的grid.如: FMBD05
    (4)含有树状节点的,和tab,如FMBD06 ,FMBD23,FMBD28,FMBD29
    (5)不含grid的如:FMBD18
     ----------先去看下,含树结构的
     
    5.EA01画面后台待配置SERVICE查询区究竟查的傻???
       查询的,在EA03表中,但在EA01表中没有的项

    6..当执行到 outInfo.sys_info.flag < 0 内时,也要按钮状态保持
    7。当查询没有数据时也要提示下

        private void efGrid1_CellButtonClick(object sender, RowColEventArgs e)
        {
            EIInfo info = new EIInfo();
            EIInfo eiInfo = new EIInfo();
            if (this.efGrid1.Cols[this.efGrid1.Col].Name == "resname")
            {
                info.SetColName(1, "name");
                info.SetColName(2, "appname");
                if (this.efGrid1[this.efGrid1.Row, "resname"] == null)
                {
                    info.SetColVal(1, 1, 1, "");
                    info.SetColVal(1, 1, 2, this.cursystem);
                }
                else
                {
                    info.SetColVal(1, 1, 1, this.efGrid1[this.efGrid1.Row, "resname"].ToString());
                    info.SetColVal(1, 1, 2, this.cursystem);
                }
                eiInfo = EITuxedo.CallService("esqueryformname", info);
                if (eiInfo != null)
                {
                    int row = eiInfo.GetDropDownChoice(EFFunction.EFGetRectangle(this.efGrid1, this.efGrid1.Row, this.efGrid1.Col), 10, new object[] { "name", "description" });
                    if (row != -1)
                    {
                        this.efGrid1[this.efGrid1.Row, "resname"] = eiInfo.GetColVal(1, row, "name");
                        this.efGrid1[this.efGrid1.Row, "description"] = eiInfo.GetColVal(1, row, "description");
                    }
                }
            }
       
    11,1,0,0,0,95,Columns:0{Width:29;AllowSorting:False;Name:"grid_head";Style:"DataType:System.Int32;TextAlign:RightCenter;";} 1{Width:57;AllowSorting:False;Name:"check_option";Caption:"选择";AllowDragging:False;Style:"DataType:System.Boolean;ImageAlign:CenterCenter;";StyleFixed:"TextAlign:CenterCenter;";} 2{Caption:"物料";} 3{Caption:"源单位";} 4{Width:35;Caption:"符号";} 5{Caption:"系数";} 6{Width:32;Caption:"符号";} 7{Caption:"额外数量";} 8{Width:37;Caption:"符号";} 9{Caption:"目的单位";} 10{Caption:"化整";} 


    C1.Win.C1FlexGrid.ColumnCollection
     /OUT:"..\..\..\Ubind\p_lmtm_9400.dll"    /INCREMENTAL /NOLOGO /LIBPATH:"D:\Source\Server\Libd" /LIBPATH:"D:\Source\Server\Arch\CPP\Libd" /DLL /MANIFEST /MANIFESTFILE:"..\..\..\Obj\Win32\Debug\p_lmtm_9400.dll.intermediate.manifest"                /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /ASSEMBLYDEBUG /PDB:"d:\Source\Server\Arch\CPP\Ubind\p_lmtm_9400.pdb" /DYNAMICBASE /FIXED:No /NXCOMPAT /IMPLIB:"..\..\..\Libd\p_lmtm_9400.lib" /MACHINE:X86 /ERRORREPORT:PROMPT bm2core.lib bm2data.lib bm2ei.lib bm2dbclnt.lib libEPCrypt.lib libEPES.lib libBM.lib libLMTM.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
     

  • 相关阅读:
    mysqldump 导出数据库为DBname的表名为Tname的表结构 导出数据库的所有表的表结构
    mysqldump 备份某张表 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions,
    nfs missing codepage or helper program, or other error
    date 增加一个小时 减少一个小时
    mysqldump 备份单个数据库
    mysql删除账户
    怎么删除某个用户的所有帖子?
    mongodb删除重复数据
    ReSharper2018破解详细方法
    激活windows和office
  • 原文地址:https://www.cnblogs.com/9421/p/1760419.html
Copyright © 2011-2022 走看看