首 页 开发联盟 开发培训 下载中心 相关教程 点击排行 留言 开发手册
 
用户名:     密 码:     验证码:   
 
宏达软件开发网 > 教程排行中心 >
宏达软件开发网 > >点击排行
    • 67
    • 65

    利用脚本实现自动更新数据

    所属类别名称:系统资料     发布日期:2010-7-14 18:27:00

       软件有时存在这种情况,这里有三个字段“上次结余 本次充装  本次结余”。如图

    我想修改同一个编号的中间某条记录中的数据,单击保存后自动修改下面的数据。通过脚本就可以实现这个功能,脚本如下:

    第一:保存后:

     

    脚本如下:

    <script>
      var
       m:double;
       n:double;
       i:integer;  // 定义变量 m、 n、 i
      begin
        m:=DataMdl_Tabledoc.fieldbyname('上次结余数量m3').value;   //将当前记录上次结余数量赋值给变量M

        n:=DataMdl_Tabledoc.fieldbyname('上次结余金额(元)').value;    //将当前记录上次结余数量赋值给变量n

    DataMdl_ADOQueryTemp.Sql_text:= 'select * from 充装信息 where ID > ' +  DataMdl_Tabledoc.fieldbyname('ID').asstring + ' AND  编号='''+ DataMdl_Tabledoc.fieldbyname('编号').asstring +''''+'order by  ID';
        DataMdl_ADOQueryTemp.open;
        while not DataMdl_ADOQueryTemp.eof  do
         begin
          DataMdl_ADOQueryTemp.edit;
          DataMdl_ADOQueryTemp.fieldbyname('上次结余数量m3').value := m;
          DataMdl_ADOQueryTemp.fieldbyname('上次结余金额(元)').value := n;
          DataMdl_ADOQueryTemp.fieldbyname('本次结存数量m3').value:=  DataMdl_ADOQueryTemp.fieldbyname('上次结余数量m3').value - DataMdl_ADOQueryTemp.fieldbyname('本次充装数量m3').value;
          DataMdl_ADOQueryTemp.fieldbyname('本次结存金额(元)').value:=  DataMdl_ADOQueryTemp.fieldbyname('上次结余金额(元)').value - DataMdl_ADOQueryTemp.fieldbyname('本次充装金额(元)').value;
          DataMdl_ADOQueryTemp.post;
          m:=DataMdl_ADOQueryTemp.fieldbyname('本次结存数量m3').value;
          n:=DataMdl_ADOQueryTemp.fieldbyname('本次结存金额(元)').value;
          DataMdl_ADOQueryTemp.next ;
         end;
         DataMdl_ADOQueryTemp.close;

     

    DataMdl_ADOQueryTemp.Sql_text:='SELECT * FROM  充装信息';
    DataMdl_ADOQueryTemp.OPEN;
    DataMdl_ADOQueryTemp.CLOSE;


      END.


    </script>

    • 97
    • 91

    利用按扭脚本实现“删除录入密码”

    所属类别名称:系统资料     发布日期:2010-6-2 18:08:00

    当确定删除一条记录时需要知道管理员的密码,如果录入正确则才可删除,如果录入不正确则提示无权删除。

    具体实现:打开设计录入窗口创建按扭,然后点击右侧脚本内容打开如图

    脚本内容:

    var
    s:string;
    oform:Tform;
    oLabel:TLabel;
    oEdit:TEdit;
    oButton:TButton;
    begin
    if Application.messagebox('确定删除当前记录吗?','记录删除提示',1)=1 then
    begin
    DataMdl_ADOQueryTemp.CLOSE;
    DataMdl_ADOQueryTemp.Sql_text:='SELECT 密码 FROM  操作人员管理';
    DataMdl_ADOQueryTemp.OPEN;

    oform:=TForm.create(nil);
    oform.BorderStyle:=bsDialog;
    oform.Position:=poMainFormCenter;
    oform.width:=200;
    oform.height:=100;
    oLabel:=TLabel.Create(oform);
    oLabel.Parent:=oform;
    oLabel.Left:=10;
    oLabel.Top:=10;
    oLabel.Caption:='请输入删除口令';
    oEdit:=TEdit.Create(oform);
    oEdit.Parent:=oform;
    oEdit.Left:=10;
    oEdit.Top:=40;
    oEdit.PasswordChar:='*';
    oform.ShowModal;
    s:=oEdit.Text;
    oform.Free;
    if s=DataMdl_ADOQueryTemp.fields[0].asstring then
    begin
    DataMdl_Tabledoc.delete;
    end
    else
    begin
     Application.messagebox('您没有删除当前记录的权限','记录删除提示',0)
    end;
    DataMdl_ADOQueryTemp.CLOSE;
    end;
    end.

    脚本解析:

    var
    s:string;
    oform:Tform;
    oLabel:TLabel;
    oEdit:TEdit;
    oButton:TButton;

    //以上都是上定义变量

    begin
    if Application.messagebox('确定删除当前记录吗?','记录删除提示',1)=1 then //弹出确定删除当前记录的对话框

    begin
    DataMdl_ADOQueryTemp.CLOSE;//执行关闭

    DataMdl_ADOQueryTemp.Sql_text:='SELECT 密码 FROM  操作人员管理';//执行SQL获得密码

    DataMdl_ADOQueryTemp.OPEN; //执行打开

    oform:=TForm.create(nil);
    oform.BorderStyle:=bsDialog;
    oform.Position:=poMainFormCenter;
    oform.width:=200;
    oform.height:=100;
    oLabel:=TLabel.Create(oform);
    oLabel.Parent:=oform;
    oLabel.Left:=10;
    oLabel.Top:=10;
    oLabel.Caption:='请输入删除口令';
    oEdit:=TEdit.Create(oform);
    oEdit.Parent:=oform;
    oEdit.Left:=10;
    oEdit.Top:=40;
    oEdit.PasswordChar:='*';
    oform.ShowModal;
    //以上是定义录入密码的窗口及录入密码用*

    s:=oEdit.Text;
    oform.Free;
    if s=DataMdl_ADOQueryTemp.fields[0].asstring then
    begin
    DataMdl_Tabledoc.delete;
    //如要录入正确则删除

    else
    begin
     Application.messagebox('您没有删除当前记录的权限','记录删除提示',0)//否则弹出对话框图无权删除。
    end;
    DataMdl_ADOQueryTemp.CLOSE;
    end;
    end.

     

     


     


     

    • 99
    • 89

    利用按扭脚本实现“重置”

    所属类别名称:系统资料     发布日期:2010-6-2 17:58:00

    对于已经录入的车主名称,手机号码点重置按扭后可以清空。

    具体实现:打开设计录入窗口创建按扭,然后点击右侧脚本内容打开如图

    脚本内容:

    begin
    DataMdl_Tabledoc.cancel;
    end.

    脚本解析:

    begin
    DataMdl_Tabledoc.cancel;//对主表当前录入的内容取消
    end.

    • 89
    • 93

    利用按扭脚本实现“提交成功”

    所属类别名称:系统资料     发布日期:2010-6-2 17:52:00

    点击提交按钮弹出对话框提交成功。

    具体实现:打开设计录入窗口创建按扭,然后点击右侧脚本内容打开如图

    脚本内容:

    begin
    if (DataMdl_Tabledoc.state=dsedit) or (DataMdl_Tabledoc.state=dsInsert) then
    begin
      DataMdl_Tabledoc.post;
    end;
    Application.messagebox('提交成功','信息提交',0)
    end.

    脚本解析:

    bdgin //执行代码开始

    if (DataMdl_Tabledoc.state=dsedit) or (DataMdl_Tabledoc.state=dsInsert) then
    //如果主表是编辑或插入状态

    begin
      DataMdl_Tabledoc.post;
    end;
    //执行主表保存结束

    Application.messagebox('提交成功','信息提交',0)//弹出提交成功对话框

    end.

    • 88
    • 96

    利用脚本功能实现只能打印一次报表

    所属类别名称:系统资料     发布日期:2010-6-2 10:43:00

    打开报表设置窗口,如下图

    首先编写打印后执行的语句,单击打印后执行脚本按钮,编写语句如下图

    然后编写打印前执行的语句,单击打印前执行脚本按钮,编写语句如下图

    注:在编写语句前要在内部表增加一个字段,类型不限制,这个字段起标识作用,如上图的“打印”字段。

    脚本解析:

    1、打印后脚本:

    begin
    if DataMdl_Tabledoc.Fieldbyname('打印').asstring='S' then

    exit;//如果主表的打印字段其值为S,那么就退出操作。

    if not ((DataMdl_Tabledoc.state=dsedit) or (DataMdl_Tabledoc.state=dsinsert)) then DataMdl_Tabledoc.edit;//如果主表不是编译或者插入状态,把主表置为编译状态。

    DataMdl_Tabledoc.Fieldbyname('打印').asstring:='S';//如果主表是编译状态,调用主表打印字段,赋其值为S,这里可以赋任意的字符值。
    DataMdl_Tabledoc.post;//保存主表
    end.

    2、打印前脚本:

    begin
    if DataMdl_Tabledoc.Fieldbyname('打印').asstring ='S' then
    begin

    //如果打印字段已经赋值为S,将系统变量SYSTEMINFO_CANPRINT标识为FALSE

    SYSTEMINFO_CANPRINT:=FALSE;

    Application.messagebox('当前信息已经打印过,不能再打印','打印合法检查',0);

    //如果系统变量SYSTEMINFO_CANPRINT值为FALSE,弹出对话框提示不能打印的信息。
    exit;
    end
    else
    SYSTEMINFO_CANPRINT:=TRUE;//将系统变量SYSTEMINFO_CANPRINT赋值为TRUE

    end.  

    • 105
    • 96

    互联网三层--SQL计算与验证部分问题

    所属类别名称:系统资料     发布日期:2010-6-2 9:16:00

    互联网三层客户端在增加记录的时候如出现以下提示:

    这个时候就要检查SQL计算与验证,出现上图提示时,名称为“本次积分”的计算执行点是“记录保存后”,改成“记录保存前”以后,就不再提示错误。

    所以:慎用“记录保存后”,可以适当运用“记录保存前”。因为多次使用“记录保存”后容易产生冲突,系统后台无法分辨先执行哪个“记录保存后”。

    • 143
    • 150

    安装SQL时,出现如图错误提示

    所属类别名称:SQL资料     发布日期:2010-3-19 9:37:00

    安装SQL SERVER时,出现如图所示的错误:

    造成这个错误的原因,电脑安装过SQL SERVER,没有卸载,重新安装过操作系统后,再次安装SQL SERVER时出现这个提示。

    解决方法:在电脑磁盘有一个Microsoft SQL Server文件夹,手工删除后,再安装就可以了。

    • 193
    • 182

    如何取消“记录分组的查询设置”

    所属类别名称:系统资料     发布日期:2010-3-16 10:02:00

     去掉表格界面的分组设置,点击 “显示分组设置”前的复选框,下面分组字段显示相应的字段,点击“移去”,把分组字段全部移除,点击"保存". 然后点击关闭按钮即可。
    • 287
    • 190

    验证的那四个提示方式如何选择,语句的区别

    所属类别名称:系统资料     发布日期:2010-3-12 13:48:00

    数据验证是指的:根据所设置SQL语句的执行结果及所选验证方式;阻止或允许某些操作(触发执行点)的执行并向用户返回提示信息。

        常用于以下方面:

        1,将某些字段设置为必读字段,如果字段为空,则提示用户输入;

              2,防止关键字段重复,如已有重复字段,则提示用户信息重复;

              3,禁止已经存在的符合某种条件的记录再进行修改;

        验证方式说明:

              1,记录存在时提示:所设置SQL语句返回的记录数大于0

              2,记录为空时提示:所设置SQL语句返回的记录数等于0

        3,返回的第一条记录的第一个字段值为非0

        4,返回的第一条记录的第一个字段值为0

        验证一般将触发执行点放在“记录保存前”和“记录删除前”,这样可以起到提示加禁止的作用。如果放到记录保存后或删除后。那么只能起到提示作用,保存和删除记录的动作已经被执行了。

    • 181
    • 197

    报表中的几个区,具体如何使用呢?

    所属类别名称:系统资料     发布日期:2010-3-12 13:47:00

    标题区:用于存放报表标题,仅会显示在报表第一页

    表头区:用于打印相应表格(由“报表设置”中的“数据源”决定)的当前所有字段名称

    细节区:用于打印相应表格(由“报表设置”中的“数据源”决定)的当前所有记录

    汇总区:汇总细节区中的数字字段,如果已有细节区,那么勾选汇总区后,系统会自动生成相应字段的汇总表达式,可以进行手工修改。

    页头区:用于存放报表最上方(页头)的公共部分,会显示在报表所有页面

    页脚区:用于存放报表最下方(页脚)的公共部分,会显示在报表所有页面

    • 176
    • 188

    关于SQL计算触发执行点的相关解释

    所属类别名称:系统资料     发布日期:2010-3-12 13:44:00

    记录新增后:记录新增后执行,一般用于生成编号。

             状态描述:此时用户点击了新增(或者加号)按钮,系统新增一条记录,记录尚

         未保存,如果有ID自动编号字段,ID值为真空(null)

         记录保存前:记录保存前执行,一般用于替换当前记录相关字段和验证

             状态描述:此时用户点击了保存(对号)按钮,系统将先执行计算语句,再保存记录,如果有ID自动编号字段,ID值为真空(null)。因为记录尚未保存,因此汇总和库存计算中不会包含此条记录。

         记录保存后:记录保存后执行,一般用于替换当前记录相关字段和汇总、库存等计算

             状态描述:此时用户点击了保存(对号)按钮,系统已将记录保存,然后执行保存后计算。如果有ID自动编号字段,此时已赋值。因为记录已经保存,因此汇总和库存计算中包含此条记录。

         录入窗口光标转移时:当用户在录入窗口变换输入控件时触发执行,一般用于实时计算或者实时验证。

     
         记录删除前:记录删除前执行,一般用于汇总、库存等计算

             状态描述:此时用户点击了删除(减号)按钮,系统提示是否删除,如用户选择是,系统先执行删除前计算,然后再将记录删除。因为记录还没有删除,因此汇总和库存计算中包含此条记录。

         记录删除后:记录删除后执行,一般用于汇总、库存等计算
             状态描述:此时用户点击了删除(减号)按钮,系统提示是否删除,如用户选择是,系统先将记录删除,然后再执行删除后计算。因为记录已经删除,因此汇总和库存计算中不包含此条记录。
    综上所述:我们对于汇总和库存一般采用如下方式处理:
              如果节点上是主从表关系(如入库主表和入库从表),那么汇总和库存计算
          可以采用记录保存后和记录删除后进行配对(二者计算语句相同)。
      如果节点上仅有主表(如入库表),那么汇总和库存计算就要采用记录保存 
              后和记录删除前进行配对。因为系统对记录删除后取主表参数支持的不太好,有
              可能取不到。删除前的计算有其特殊情况,不能直接将删除后语句照搬过来。照
              搬过来,就会出现库存不变的情况,因为记录还未被删除,计算时还是会计入库
              存当中。我们可以分析一下,如果这条记录被删除,那么库存将减少这条记录所
              标识的数量,除此以外,不会造成其他影响。因此,我们只需要直接从库存中减
              掉这些数量即可,处理上反而比删除后要简单。
    • 184
    • 193

    利用脚本功能计算折扣率

    所属类别名称:系统资料     发布日期:2010-3-11 13:42:00

    折扣率=实收金额/应收金额
    将主表的 “实收金额”/ “应收金额”的值自动填写到从表的“折扣率”字段中;
    典型的主表值更改从表值,而且更改从表当前的多行记录。
    具体实现:
    脚本如下:
    <script>
    var
    m:double;
    begin
    if (DataMdl_Tabledoc.fieldbyname('应收金额').isnull) or (DataMdl_Tabledoc.fieldbyname('应收金额').value=0) then exit;
    m:=DataMdl_Tabledoc.fieldbyname('实收金额').value/DataMdl_Tabledoc.fieldbyname('应收金额').value;
    DataMdl_DetailTableTADODataSet0.close;
    DataMdl_ADOQueryTemp.Sql_text:='UPDATE 销售明细 SET 折扣率=' + floattostr(m) + ' WHERE 销售单号="' + DataMdl_Tabledoc.fieldbyname('销售单号').asstring +'"';
    DataMdl_ADOQueryTemp.ExecSQL;
    DataMdl_ADOQueryTemp.Sql_text:='SELECT * FROM  销售明细';
    DataMdl_ADOQueryTemp.OPEN;
    DataMdl_ADOQueryTemp.CLOSE;
    DataMdl_DetailTableTADODataSet0.OPEN;
    end.
    </script>
    脚本解析:
    一、脚本可以在使用SQL的地方出现
    二、脚本必须使用<script>....</script>包围起来
    三、脚本使用pascal语言
    具体语句解释:
    <script> 
    var //定义变量开始标示
    m:double; //定义变量M
    begin  //执行代码开始
    if (DataMdl_Tabledoc.fieldbyname('应收金额').isnull) or (DataMdl_Tabledoc.fieldbyname('应收金额').value=0) then exit;
    //DataMdl_Tabledoc是主表对应的内部数据对象
    //DataMdl_Tabledoc.fieldbyname('应收金额').isnull  是应收金额为空
    //DataMdl_Tabledoc.fieldbyname('应收金额').value=0  是应收金额为0
    If()or()then exit;   当应收金额为空或0时,退出
    m:=DataMdl_Tabledoc.fieldbyname('实收金额').value/DataMdl_Tabledoc.fieldbyname('应收金额').value;
    //变量赋值要用:=
    //DataMdl_Tabledoc是主表对应的内部数据对象
    //DataMdl_Tabledoc.fieldbyname('实收金额').value是获得实收金额的值
    DataMdl_DetailTableTADODataSet0.close;
    //DataMdl_DetailTableTADODataSet0是第一个从表的内部对象,这个语句关闭从表,避免下面执行处理时冲突
    DataMdl_ADOQueryTemp.Sql_text:='UPDATE 销售明细 SET 折扣率=' + floattostr(m) + ' WHERE 销售单号="' + DataMdl_Tabledoc.fieldbyname('销售单号').asstring +'"';
    //DataMdl_ADOQueryTemp是SQL语句命令执行对象,这个语句制定执行的SQL语句
    DataMdl_ADOQueryTemp.ExecSQL;
    //执行指定的语句
    DataMdl_ADOQueryTemp.Sql_text:='SELECT * FROM  销售明细';
    DataMdl_ADOQueryTemp.OPEN;
    DataMdl_ADOQueryTemp.CLOSE;
    //其实这三行可以不用,这次用来缓冲,确保修改数据已经存到硬盘上
    DataMdl_DetailTableTADODataSet0.OPEN;
    //重新打开从表
    end.//执行代码结束
    </script>
     
    说明:上面的DataMdl_Tabledoc、DataMdl_DetailTableTADODataSet0、DataMdl_ADOQueryTemp都可以在编写代码时通过ctrl+O获得
    代码编辑器会列出当前可用的对象
    • 148
    • 148

    SQL DELETE 语句

    所属类别名称:SQL资料     发布日期:2010-3-2 15:11:00

    DELETE 语句
    DELETE 语句用于删除表中的行。
    语法
    DELETE FROM 表名称 WHERE 列名称 = 值
    Person:
    LastName
    FirstName
    Address
    City
    Gates
    Bill
    Xuanwumen 10
    Beijing
    Wilson
    Fred
    Zhongshan 23
    Nanjing
    删除某行
    "Fred Wilson" 会被删除:
    DELETE FROM Person WHERE LastName = 'Wilson'
    结果:
    LastName
    FirstName
    Address
    City
    Gates
    Bill
    Xuanwumen 10
    Beijing
    删除所有行
    可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
    DELETE FROM table_name
    或者:
    DELETE * FROM table_name
    • 139
    • 153

    SQL UPDATE 语句

    所属类别名称:SQL资料     发布日期:2010-3-2 15:09:00

    Update 语句
    Update 语句用于修改表中的数据。
    语法:
    UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
    Person:
    LastName
    FirstName
    Address
    City
    Gates
    Bill
    Xuanwumen 10
    Beijing
    Wilson
     
    Champs-Elysees
     
    更新某一行中的一个列
    我们为 lastname 是 "Wilson" 的人添加 firstname:
    UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
    结果:
    LastName
    FirstName
    Address
    City
    Gates
    Bill
    Xuanwumen 10
    Beijing
    Wilson
    Fred
    Champs-Elysees
     
    更新某一行中的若干列
    我们会修改地址(address),并添加城市名称(city):
    UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
    WHERE LastName = 'Wilson'
    结果:
    LastName
    FirstName
    Address
    City
    Gates
    Bill
    Xuanwumen 10
    Beijing
    Wilson
    Fred
    Zhongshan 23
    Nanjing
    • 146
    • 150

    SQL INSERT INTO 语句

    所属类别名称:SQL资料     发布日期:2010-3-2 15:06:00

    INSERT INTO 语句
    INSERT INTO 语句用于向表格中插入新的行。
    语法
    INSERT INTO 表名称 VALUES (值1, 值2,....)
    我们也可以指定所要插入数据的列:
    INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
    插入新的行
    "Persons" 表:
    LastName
    FirstName
    Address
    City
    Carter
    Thomas
    Changan Street
    Beijing
    SQL 语句:
    INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
    结果:
    LastName
    FirstName
    Address
    City
    Carter
    Thomas
    Changan Street
    Beijing
    Gates
    Bill
    Xuanwumen 10
    Beijing
    在指定的列中插入数据
    "Persons" 表:
    LastName
    FirstName
    Address
    City
    Carter
    Thomas
    Changan Street
    Beijing
    Gates
    Bill
    Xuanwumen 10
    Beijing
    SQL 语句:
    INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
    结果:
    LastName
    FirstName
    Address
    City
    Carter
    Thomas
    Changan Street
    Beijing
    Gates
    Bill
    Xuanwumen 10
    Beijing
    Wilson
     
    Champs-Elysees

    首页 上一页 下一页 尾页 页次:1/3页 共有43条教程排行 转到: 

    关于我们 | 联系方式 | 合作方式 | 相关条款 | 常见问题
    公司地址:山东省聊城市振兴路西路18号楼     邮政编码:252000    客服电话:0635-8386265
    版权所有:HONGDA SOFTWARE    宏达软件     鲁ICP备09000001号