<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>工作记录</title><link>http://bigshrimp.cndev.org/category/492.aspx</link><description>记录目前工作的状态</description><managingEditor>吃得很胖的虾</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>吃得很胖的虾</dc:creator><title>ADOQuery override 的 iprovidersupport </title><link>http://bigshrimp.cndev.org/archive/2004/12/03/4796.aspx</link><pubDate>2004-12-03 20:21:00Z</pubDate><guid>http://bigshrimp.cndev.org/archive/2004/12/03/4796.aspx</guid><wfw:comment>http://bigshrimp.cndev.org/comments/4796.aspx</wfw:comment><comments>http://bigshrimp.cndev.org/archive/2004/12/03/4796.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://bigshrimp.cndev.org/comments/commentRss/4796.aspx</wfw:commentRss><trackback:ping>http://bigshrimp.cndev.org/services/trackbacks/4796.aspx</trackback:ping><description>&lt;P&gt;该死的DBISAM不支持iprovider ,去论坛上看,居然说早就知道这个问题,但最近太忙,没时间实现,faint...&lt;/P&gt;
&lt;P&gt;正好要用到clientdataset 只好仿照ADOQuery 来实现接口的部分过程.&lt;/P&gt;
&lt;P&gt;adoQuery override 的 接口函数&lt;/P&gt;
&lt;P&gt;procedure PSEndTransaction(Commit: Boolean); override;&lt;BR&gt;procedure PSExecute; override;&lt;BR&gt;function PSExecuteStatement(const ASQL: string; AParams: TParams; ResultSet: Pointer = nil): Integer; override;&lt;BR&gt;procedure PSGetAttributes(List: TList); override;&lt;BR&gt;function PSGetDefaultOrder: TIndexDef; override;&lt;BR&gt;function PSGetKeyFields: string; override;&lt;BR&gt;function PSGetParams: TParams; override;&lt;BR&gt;function PSGetQuoteChar: string; override;&lt;BR&gt;function PSGetTableName: string; override;&lt;BR&gt;function PSGetIndexDefs(IndexTypes: TIndexOptions = [ixPrimary..ixNonMaintained]): TIndexDefs; override;&lt;BR&gt;function PSGetUpdateException(E: Exception; Prev: EUpdateError): EUpdateError; override;&lt;BR&gt;function PSInTransaction: Boolean; override;&lt;BR&gt;function PSIsSQLBased: Boolean; override;&lt;BR&gt;function PSIsSQLSupported: Boolean; override;&lt;BR&gt;procedure PSReset; override;&lt;BR&gt;procedure PSSetParams(AParams: TParams); override;&lt;BR&gt;procedure PSSetCommandText(const CommandText: string); override;&lt;BR&gt;procedure PSStartTransaction; override;&lt;BR&gt;function PSUpdateRecord(UpdateKind: TUpdateKind; Delta: TDataSet): Boolean; override;&lt;/P&gt;&lt;img src ="http://bigshrimp.cndev.org/aggbug/4796.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>吃得很胖的虾</dc:creator><title>解决intraweb7.x在delphi 7下安装帮助文件后无法按F1导向的问题．</title><link>http://bigshrimp.cndev.org/archive/2004/12/03/4784.aspx</link><pubDate>2004-12-03 12:38:00Z</pubDate><guid>http://bigshrimp.cndev.org/archive/2004/12/03/4784.aspx</guid><wfw:comment>http://bigshrimp.cndev.org/comments/4784.aspx</wfw:comment><comments>http://bigshrimp.cndev.org/archive/2004/12/03/4784.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://bigshrimp.cndev.org/comments/commentRss/4784.aspx</wfw:commentRss><trackback:ping>http://bigshrimp.cndev.org/services/trackbacks/4784.aspx</trackback:ping><description>其实很简单，安装完index content link后，记得把borland delphi help目录下的d7.gid删除掉．&lt;img src ="http://bigshrimp.cndev.org/aggbug/4784.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>吃得很胖的虾</dc:creator><title>webserver的错误捕捉和类型</title><link>http://bigshrimp.cndev.org/archive/2004/11/20/4641.aspx</link><pubDate>2004-11-20 16:49:00Z</pubDate><guid>http://bigshrimp.cndev.org/archive/2004/11/20/4641.aspx</guid><wfw:comment>http://bigshrimp.cndev.org/comments/4641.aspx</wfw:comment><comments>http://bigshrimp.cndev.org/archive/2004/11/20/4641.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://bigshrimp.cndev.org/comments/commentRss/4641.aspx</wfw:commentRss><trackback:ping>http://bigshrimp.cndev.org/services/trackbacks/4641.aspx</trackback:ping><description>&lt;P&gt;异常类型:&lt;/P&gt;
&lt;P&gt;1.前台导向类&lt;/P&gt;
&lt;P&gt;程序可通过try except块来捕捉,根据异常handle来判断程序处理.通过生成错误导向页面来引导用户处理.&lt;/P&gt;
&lt;P&gt;2.后台异常类&lt;/P&gt;
&lt;P&gt;后台程序出现可预知的错误,通过try except块来捕捉,根据异常handle来判断程序处理,运行时log到指定文件.&lt;/P&gt;
&lt;P&gt;3.后台无法预料的错误&lt;/P&gt;
&lt;P&gt;用madshiExcept捕捉后让用户选择处理方式.&lt;/P&gt;&lt;img src ="http://bigshrimp.cndev.org/aggbug/4641.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>吃得很胖的虾</dc:creator><title>delphi  下 用assert 来完成错误的捕捉.</title><link>http://bigshrimp.cndev.org/archive/2004/11/20/4640.aspx</link><pubDate>2004-11-20 16:18:00Z</pubDate><guid>http://bigshrimp.cndev.org/archive/2004/11/20/4640.aspx</guid><wfw:comment>http://bigshrimp.cndev.org/comments/4640.aspx</wfw:comment><comments>http://bigshrimp.cndev.org/archive/2004/11/20/4640.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://bigshrimp.cndev.org/comments/commentRss/4640.aspx</wfw:commentRss><trackback:ping>http://bigshrimp.cndev.org/services/trackbacks/4640.aspx</trackback:ping><description>&lt;DIV class=postText&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Assert&amp;nbsp; 过程原形&lt;BR&gt;[code]procedure Assert (expr :Boolean [; const msg: string]);[/code]&lt;BR&gt;在system.pas 里 Assert 的实现是:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;B&gt;&lt;PRE&gt;&lt;CODE&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;B&gt;procedure &lt;/B&gt;_Assert(&lt;B&gt;const Message&lt;/B&gt;, Filename: AnsiString; LineNumber: Integer);
&lt;/FONT&gt;&lt;I&gt;&lt;FONT size=2&gt;{$IFDEF PUREPASCAL}
&lt;/FONT&gt;&lt;/I&gt;&lt;FONT size=2&gt;&lt;B&gt;begin
  if &lt;/B&gt;Assigned(AssertErrorProc) &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;B&gt;then
    &lt;/B&gt;AssertErrorProc(&lt;B&gt;Message&lt;/B&gt;, Filename, LineNumber, Pointer(-1))
  &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;B&gt;else
    &lt;/B&gt;Error(reAssertionFailed);  &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;I&gt;// loses return address
&lt;/I&gt;&lt;B&gt;end&lt;/B&gt;;
&lt;/FONT&gt;&lt;I&gt;&lt;FONT size=2&gt;{$ELSE}
&lt;/FONT&gt;&lt;/I&gt;&lt;FONT size=2&gt;&lt;B&gt;asm
        &lt;/B&gt;PUSH    EBX
{$IFDEF PIC}
        PUSH    EAX
        PUSH    ECX
        CALL    GetGOT
        MOV     EBX, EAX
        MOV     EAX, [EBX].AssertErrorProc
        CMP     [EAX], 0
        POP     ECX
        POP     EAX
{$ELSE}
        CMP     AssertErrorProc,0
{$ENDIF}
        JNZ     @@1
        MOV     AL,reAssertionFailed
        CALL    Error
        JMP     @@exit
@@1:    PUSH    [ESP+4].Pointer
{$IFDEF PIC}
        MOV     EBX, [EBX].AssertErrorProc
        CALL    [EBX]
{$ELSE}
        CALL    AssertErrorProc
{$ENDIF}
@@exit:
        POP     EBX
&lt;B&gt;end&lt;/B&gt;;
&lt;/FONT&gt;&lt;I&gt;&lt;FONT size=2&gt;{$ENDIF}
&lt;/FONT&gt;&lt;/I&gt;&lt;/FONT&gt;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;可以看出AssertErrorProc() 是没有初值的,通过对其赋值可以定义自己的Assert处理过程,另如果未对AssertErrorProc赋值,将调用Error()处理过程来做为异常处理.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;TAssertErrorProc = procedure (const Message, Filename: string;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LineNumber: Integer; ErrorAddr: Pointer);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;{$ASSERTIONS OFF/ON} 开关来决定Assert是否被调用.可以在project-option-complier里设置.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;这样就可以在beta或debug版本是打开,而最终发布时关闭调试输出了.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;一个简单的AssertErrorProc 例程:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;unit AssertLogs;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;interface&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;implementation&lt;BR&gt;uses&lt;BR&gt;&amp;nbsp; Windows,&lt;BR&gt;&amp;nbsp; SysUtils;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;var&lt;BR&gt;&amp;nbsp; runErrMsg : String;&lt;BR&gt;&amp;nbsp; oldAssertErrorProc : TAssertErrorProc;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;procedure LogAssert(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; runErrMsg := format('Error: %s, Addr: %p, in file(%d): %s ',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Message, ErrorAddr, LineNumber, FileName]);&lt;BR&gt;&amp;nbsp; if IsConsole then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Writeln(runErrMsg)&lt;BR&gt;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox(0, pChar(runErrMsg), 'Error Log by AssertLogs', 0);&lt;BR&gt;end;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;initialization&lt;BR&gt;&amp;nbsp; oldAssertErrorProc := AssertErrorProc;&lt;BR&gt;&amp;nbsp; AssertErrorProc := @LogAssert;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;finalization&lt;BR&gt;&amp;nbsp; AssertErrorProc := oldAssertErrorProc;&lt;BR&gt;end.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;*************************************&lt;BR&gt;那么在output debug信息时只需要:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Assert(false,outputstring);&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;img src ="http://bigshrimp.cndev.org/aggbug/4640.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>吃得很胖的虾</dc:creator><title>我的开发环境</title><link>http://bigshrimp.cndev.org/archive/2004/11/19/4625.aspx</link><pubDate>2004-11-19 15:11:00Z</pubDate><guid>http://bigshrimp.cndev.org/archive/2004/11/19/4625.aspx</guid><wfw:comment>http://bigshrimp.cndev.org/comments/4625.aspx</wfw:comment><comments>http://bigshrimp.cndev.org/archive/2004/11/19/4625.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://bigshrimp.cndev.org/comments/commentRss/4625.aspx</wfw:commentRss><trackback:ping>http://bigshrimp.cndev.org/services/trackbacks/4625.aspx</trackback:ping><description>&lt;P&gt;开发工具: delphi 7 Enterprise &lt;BR&gt;Web : Intraweb 7.1.12 For Delphi&lt;BR&gt;IDE : Castalia3 ,CnPack&lt;BR&gt;第三方控件: madshi Collection&lt;/P&gt;&lt;img src ="http://bigshrimp.cndev.org/aggbug/4625.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>