欢迎来到助燃的Blog!

对你有益的氧气,或者……对你有害的氯气
 
 
粉丝 - 0
关注 - 0
我的主页  个人资料
我的闪存  发短消息

搜索

 
 

常用链接

  • 我的随笔
  • 我的空间
  • 我的短信
  • 我的评论
  • 更多链接
  • 我的参与
  • 我的新闻
  • 最新评论
  • 我的标签

我的标签

  • Access(1)
  • Jet(1)
  • SQL(1)
  • compute by(1)
  • 模拟(1)
  • 分类(1)
  • 汇总(1)
  • mysql(1)
  • limit(1)

随笔分类

  • Asp.net+AJAX(6) (rss)
  • 我的程序人生(1) (rss)

随笔档案

  • 2009年4月 (1)
  • 2008年7月 (1)
  • 2007年9月 (1)
  • 2007年8月 (1)
  • 2007年7月 (2)
  • 2007年1月 (2)
  • 2006年12月 (1)

最新评论

  • 1. Re:为gridview“删除”列添加确认对话框
  • 太牛了
  • --wudi123123
  • 2. Re:为gridview“删除”列添加确认对话框
  • 我注册了个帐号,就为了感谢一下你。牛啊。。。。
  • --rockyear
  • 3. Re:mysql limit 用法详解(修正版)
  • thanks
  • --pw2009
  • 4. re: 为gridview“删除”列添加确认对话框
  • 顶~~
  • --问问112
  • 5. re: 在vs2008为asp.net ajax添加js智能感知
  • <%if(false)}%><script src="js/MicrosoftAjax.js" type="text/javascript"&...
  • --yiyanxiyin

阅读排行榜

  • 1. 为gridview“删除”列添加确认对话框(33175)
  • 2. 在Asp.net中使用dojo的splitContainer控件(1737)
  • 3. 如何修正CalendarExtender在updatePanel中发生错位的问题(1121)
  • 4. 在vs2008为asp.net ajax添加js智能感知(963)
  • 5. mysql limit 用法详解(修正版)(946)

评论排行榜

  • 1. 为gridview“删除”列添加确认对话框(52)
  • 2. 在Asp.net中使用dojo的splitContainer控件(10)
  • 3. 在asp.net中使用符合xhtml规范的spliter控件(4)
  • 4. 在vs2008为asp.net ajax添加js智能感知(4)
  • 5. 如何修正CalendarExtender在updatePanel中发生错位的问题(1)

Powered by: 博客园
模板提供:沪江博客
博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅订阅 | 管理

2009年4月16日

mysql limit 用法详解(修正版)

在google中输入"mysql limit",得到的前两条记录内容是雷同的,其中有这样一段

“//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: 

mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. ”

这段其实是在误人子弟,来看看mysql的官方文档:http://dev.mysql.com/doc/refman/6.0/en/select.html

内容摘录如下:


The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be non-negative integer constants (except when using prepared statements).

With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1):

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. This statement retrieves all rows from the 96th row to the last:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

With one argument, the value specifies the number of rows to return from the beginning of the result set:

SELECT * FROM tbl LIMIT 5;     # Retrieve first 5 rows

In other words, LIMIT row_count is equivalent to LIMIT 0, row_count.

 

posted @ 2009-04-16 09:57 助燃 阅读(946) | 评论(1) | 编辑
 

2008年7月25日

为Access模拟compute by分类汇总功能

最近用Access数据库做一个微型应用,需要实现类似SQL Server里compute by语法的效果,网上google了一下,得知jet不支持,只好自己用.net模拟一个了,暂时只支持根据一个字段sum另一个字段,即sum(fieldA) compute by (filedB)。注意fieldA必须是decimal类型,如果是double类型恐怕需要修改源代码。

 

 1/**//// <summary>
 2        /// 模拟SQL SERVER中的分类汇总ComputeBy语句
 3        /// </summary>
 4        /// <param name="sourceTable">源数据</param>
 5        /// <param name="sumField">求和字段</param>
 6        /// <param name="byField">分类字段</param>
 7        /// <param name="needTotolSum">是否需要汇总合计</param>
 8        /// <returns>目标数据源,重新绑定控件的DataSource属性后生效</returns>

 9        public static DataTable ComputeBy(DataTable sourceTable, string sumField, string byField, bool needTotolSum)
10        {
11            int rowCount = sourceTable.Rows.Count;
12            if (rowCount == 0) return sourceTable;//数据量为0,不执行计算分类汇总
13            DataTable destTable = sourceTable.Copy();//深拷贝数据源
14            int insertTimes = 0;//插入次数,用于记录数据源与其拷贝之间的相对偏移量
15            int i = 0;
16            int j = 0;
17            decimal sum = 0;//分类汇总
18            decimal totolSum = 0;//合计
19            DataRow dr;
20            while (i < rowCount)
21            {
22                sum += (decimal)sourceTable.Rows[i][sumField];
23                j = i + 1;
24                if (j < rowCount && sourceTable.Rows[i][byField].ToString() != sourceTable.Rows[j][byField].ToString())
25                {
26                    dr = destTable.NewRow();
27                    dr[sumField] = sum;
28                    totolSum += sum;
29                    sum = 0;
30                    destTable.Rows.InsertAt(dr, j + insertTimes);//插入分类汇总
31                    insertTimes++;
32                }

33                i++;
34            }

35            dr = destTable.NewRow();
36            dr[sumField] = sum;
37            destTable.Rows.InsertAt(dr, j + insertTimes);
38            //分类汇总插入完毕,插入合计
39            if (needTotolSum)
40            {
41                totolSum += sum;
42                dr = destTable.NewRow();
43                dr[sumField] = totolSum;
44                destTable.Rows.Add(dr);
45            }

46            return destTable;
47        }
posted @ 2008-07-25 01:06 助燃 阅读(354) | 评论(0) | 编辑
 

2007年9月6日

让Validation Callout Extender与Custom Validator协作
官方的说明中提到ValidatorCalloutExtender并不支持CustomValidator的服务器端验证,而我又迫切需要这个功能,于是使用google大法,找到了这篇名为《Validating Server Side using the Validation Callout Extender with the Custom Validator》 的文章,它提到了可以通过让Page类实现System.Web.UI.ICallbackEventHandler接口从而使页面本身支持异步回调,接着指定CustomValidator的ClientValidationFunction属性,把验证事件关联到一个客户端的js函数,在该函数中通过异步回调获得服务器端验证结果后返回,那么对于ValidatorCalloutExtender而言,没有与服务器端通信,只是从js中获得了一个验证结果,效果自然是大大的好。

不过,这个方法太烦杂了,上次看了老赵的这篇 分清ASP.NET AJAX中的Extender和Behavior模型 当时就受到了启发,在服务器端验证事件中,若验证失败,则注册一个启动脚本,内容是调用ValidatorCalloutExtender的Behavior中显示气泡提示的方法,那么当这个启动脚本被执行不就大功告成了嘛!

说干就干,首先摸索了一下那个弹出气泡的方法名,居然就是show(),要是不对恐怕还要到官方文档里面查,接着在页面中添加一个RegularExpressionValidator,因为如果ValidatorCalloutExtender直接关联带有服务器端验证的CustomValidator会报错,所以需要一个替代品,例如:
<asp:RegularExpressionValidator ID="rev" runat="server" ErrorMessage="用户名密码错误!" 
                    ControlToValidate
="Password" Display="None" ValidationExpression="\w*|\W*"></asp:RegularExpressionValidator>  
其中,ErrorMessage即弹出气泡中的提示文字,若提示内容会由于服务器端验证结果动态变化,则可以在后台代码中动态改变该属性从而达到目的;ControlToValidate为弹出气泡指向的文本框;Display设为none用于隐藏这个替代品;正则表达式设为“\w*|\W*”表示任意字符都能通过验证,这样就不会出现客户端正则表达式验证没通过而激活气泡提示的情况了。接着添加一个ValidatorCalloutExtender,注意要指明BehaviorID属性
                <cc1:ValidatorCalloutExtender ID="vceLogin" runat="server" TargetControlID="rev" BehaviorID="vceLoginBehavior">
                
</cc1:ValidatorCalloutExtender>
接下来转到后台代码,在验证失败后添加一条注册启动脚本的语句
ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), "loginFailed", "window.setTimeout(\"$find('vceLoginBehavior').show();\",500);", true);                
之所以在js中用到了延时,是因为之前不用延时直接执行会发生$find('vceLoginBehavior')对象为Null的意外,遗憾的是原因我到目前也没有找到,麻烦哪位高人指点一下哈,在下先谢过!这个写法自然不够安全,最好能写成若$find('vceLoginBehavior')对象为空,隔一段时间再执行直到执行成功为止,这儿就先偷个懒,毕竟我的这个程序大多是内网用的,网速可以保证。如果觉得有必要在气泡弹出时将焦点移动到气泡所指向的文本框,那就再追加一句
ScriptManager1.SetFocus(txtPassword);
OK,大功告成!实际测试时还发现了ValidatorCalloutExtender的一个小bug,气泡部分可能被页面上的控件遮住,没设z-index的关系,不得以改了源码,AjaxControlToolkit\ValidatorCallout\ValidatorCalloutBehavior.js的第68行追加一句
popupTable.style.zIndex = "1000";
在漫长的编译过程中,想了下为什么这个控件没有指定css的class,也没有指定id,本来只要有其中任意一个,我就不用来改源码了...
以上内容适用于10618,更新到10920后,按上述做法居然出现问题,请听我继续分解...
版本更新后,运行时报错“this._popupBehavior为空或不是对象”,郁闷不已。只能把两个版本的ValidatorCalloutBehavior.js文件拿过来对比,发现问题出在直接调用behavior的时候,不会进行DOM构造了,因此找到了被封装的用于构造DOM的函数_ensureCallout()执行之,其后调用show()方法,顺利解决问题!
也就是原先的代码改为
ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), "loginFailed", "window.setTimeout(\"$find('vceLoginBehavior')._ensureCallout();$find('vceLoginBehavior').show();\",500);", true);

另外,新版本果然多了个id,于是添加z-index不用更改源代码了,只需要在css文件中加上一句
        #vceLoginBehavior_popupTable,#vcePwd_popupTable,#vceUsername_popupTable
        
{}{
            z-index
:1000;
        
}
   
上面的例句适用于多个ValidatorCalloutExtender存在的情况,只要写一次就可以了,几个id之间用逗号隔开。behavior的命名规则是这样的:如果已经被指定,则使用指定名称拼上"_popupTable"否则会使用Extender的id拼上"_popupTable"。舒服~
posted @ 2007-09-06 15:48 助燃 阅读(719) | 评论(1) | 编辑
 

2007年8月11日

在vs2008为asp.net ajax添加js智能感知
今天找了好久,终于搞清楚了,scriptManager控件支持js智能感知,而从其继承的toolkitScriptManager不支持。至少在vs2008b2中是这样。
要在js文件中添加asp.net ajax的js智能感知(与scriptManager控件无关),在js文件的开头添加这样一行即可:
///<reference name="MicrosoftAjax.js"/>
若要在aspx文件中添加智能感知,网上很多都说可以在ScriptManager标记内添加
<Scripts>
  
<asp:ScriptReference Path="" />
</Scripts>               
不过我基于toolkitScriptManager如此尝试仍然失败了,最后自己把C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025\MicrosoftAjaxLibrary\System.Web.Extensions\1.0.61025.0目录下的MicrosoftAjax.js文件拷贝到project的js目录下,然后用传统的js方式引用
<script src="js/MicrosoftAjax.js" type="text/javascript"></script>
居然成功地获得了智能感知,只是这两天写程序的时候发现,这样写会引起莫名其妙的运行时冲突,如果是为了拥有智能感知,那么在运行时需要把这一行注释掉再运行。
posted @ 2007-08-11 23:44 助燃 阅读(963) | 评论(4) | 编辑
 

2007年7月24日

如何修正CalendarExtender在updatePanel中发生错位的问题
     摘要: 最近用到了CalendarExtender,结果不知道为什么发生了错位,如图在Google和百度上找了很久,中文的文章里面似乎只提到了如何本地化(就是显示中文的月份)以及怎么解决被下拉框挡住的问题,谈到格式错位的好像没有,我最后在官方论坛上找到一篇文章,解决了这个问题,就在这儿贴一下~应该也算是个bug吧,可能在0618之后的版本会有补丁。解决的方法是在调用CalendarExtender的页面所...  阅读全文
posted @ 2007-07-24 21:52 助燃 阅读(1121) | 评论(1) | 编辑
 

2007年7月21日

在asp.net中使用符合xhtml规范的spliter控件
     摘要: 之前为了使用spliter而尝试了dojo,有一个很严重的问题,其对xhtml规范支持得不好,使用时必须去掉xhtml的声明,这样一来,某些ms ajax control toolkit将无法正常使用。为了寻求更好的方法,我一直没有放弃,最近终于找到了这样一个spliter控件,它能支持xhtml,并且使用起来也很方便,接下来介绍其使用方法。我的布局是经典的左侧treeview,右侧gridvie...  阅读全文
posted @ 2007-07-21 16:10 助燃 阅读(832) | 评论(4) | 编辑
 

2007年1月30日

在Asp.net中使用dojo的splitContainer控件
     摘要: 在vs2005为winForm编程,有splitContainer控件可以用;可webForm可就没有这么个东西了。去问了赵老师,他说“试试dojo的splitContainer”,于是我查了N多资料捣鼓了1天终于搞定了,下面来总结一下这次收获的经验。效果图:如何使用dojo中的某个控件 去官方网站下载最新版本的dojo,我用的是0.4.1的。 将其解压缩后放在项目所在目录...  阅读全文
posted @ 2007-01-30 01:45 助燃 阅读(1737) | 评论(10) | 编辑
 

2007年1月1日

为gridview“删除”列添加确认对话框
     摘要: 如何为gridview控件里的“删除”列添加一个确认对话框?网上众说纷纭,大致见到了三种解决方案,现归纳如下:1、继承Web.IO里的button控件,为其实现一个IPostback的接口用于回调,具体代码之复杂,只有作者自己想体会吧……2、在gridview的RowDataBound事件中,遍历所有子控件,若属于LinkButton类,且Comma...  阅读全文
posted @ 2007-01-01 00:47 助燃 阅读(33175) | 评论(52) | 编辑
 

2006年12月31日

告别06,喜迎07
     摘要: 终于在cnblogs里安了个窝,本来已经有两处窝了,不过看上了这儿贴代码的功能,所以就赶在06年的最后一刻搬进来,当作是给自己的新年礼物吧以前两处住所贴了代码浏览器解析起来就不正常了但愿新的一年里,我能在这儿不断提升.net平台上的功力,记录下学习过程中的点点滴滴与各位分享。  阅读全文
posted @ 2006-12-31 23:37 助燃 阅读(256) | 评论(0) | 编辑
 
仅列出标题