以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  项目启动时的部分数据加载问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=49800)

--  作者:ndxfke
--  发布时间:2014/4/24 10:58:00
--  项目启动时的部分数据加载问题

看了帮助,也想实现动态加载数据来提高启动速度。

 

情况是这样的:我有个sql数据源,想在项目启动时,只加载特定几个数据表,其它暂不加载。

 

该写哪个事件呢,这两个事件看来看去,有点晕忽。

 

而尝试这两种试,没实现。求帮助.....

 

BeforeLoadInnerTable  (启动报错,说找到不表)

 

If e.DataTableName <> "平台管理" OrElse e.DataTableName <> "平台列表" OrElse e.DataTableName <> "快捷列表" OrElse e.DataTableName <> "系统选项列表"
    e.SelectString = "_Identify is null"
Else
    e.SelectString = "select * form \'" & e.DataTableName & "\'"
End If

 

 

BeforeLoadOuterTable   (启动正常,速度没提升,数据也被加载了)

 

If e.DataTableName <> "平台管理" OrElse e.DataTableName <> "平台列表" OrElse e.DataTableName <> "快捷列表"
    e.Cancel = True
Else
    e.Filter = ""
End If


--  作者:有点甜
--  发布时间:2014/4/24 11:05:00
--  

 在BeforeLoadOuterTable写代码控制加载便可。

 

If e.DataTableName <> "平台管理" OrElse e.DataTableName <> "平台列表" OrElse e.DataTableName <> "快捷列表"
    e.SelectString = "Select * from {" & e.DataTableName  & "} where [_Identify] Is null"
End If

 

http://www.foxtable.com/help/topics/0670.htm

 

[此贴子已经被作者于2014-4-24 11:05:15编辑过]

--  作者:ndxfke
--  发布时间:2014/4/24 11:21:00
--  

不行呢。

 

---------------------------
错误
---------------------------
加载表"部门设置"失败,详细错误信息:

System.Data.OleDb.OleDbException: 无法完成延迟准备。

无法预定义语句。

列名 \'_Identify\' 无效。

   在 System.Data.OleDb.OleDbDataReader.ProcessResults(OleDbHResult hr)

   在 System.Data.OleDb.OleDbDataReader.BuildSchemaTableRowset(Object handle)

   在 System.Data.OleDb.OleDbDataReader.GenerateSchemaTable(OleDbDataReader dataReader, Object handle, CommandBehavior behavior)

   在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)

   在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)

   在 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)

   在 System.Data.Common.DbDataAdapter.FillSchemaInternal(DataSet dataset, DataTable datatable, SchemaType schemaType, IDbCommand command, String srcTable, CommandBehavior behavior)

   在 System.Data.Common.DbDataAdapter.FillSchema(DataTable dataTable, SchemaType schemaType, IDbCommand command, CommandBehavior behavior)

   在 System.Data.Common.DbDataAdapter.FillSchema(DataTable dataTable, SchemaType schemaType)

   在 Foxtable.Ol01000l00O10Ol.O00Oll001OO100(OleDbConnection OlO101l00O, String O101lOO0O1l0, String O01OOl0ll10OO, DataSet O0ll01l0l10, DataTableCollection OOlOO1l0010O, String O0llO0O000l1l1l, Boolean Ol1l1O10l1, OleDbConnection O1ll001O0O0llO1, UserInfo O0lOOO, DataSet O0l11111OOO1, Int32 OOlO10O1O10l001)
---------------------------
确定  
---------------------------


--  作者:ndxfke
--  发布时间:2014/4/24 11:23:00
--  

貌似看懂错误的意思了...

 

再调试下


--  作者:有点甜
--  发布时间:2014/4/24 11:25:00
--  

或者改成这样也行

 

If e.DataTableName <> "平台管理" OrElse e.DataTableName <> "平台列表" OrElse e.DataTableName <> "快捷列表"
    e.SelectString = "Select * from {" & e.DataTableName  & "} where 1=2"
End If


--  作者:ndxfke
--  发布时间:2014/4/24 13:35:00
--  
这个好用,我正在愁有的没有ID怎么办呢
--  作者:ndxfke
--  发布时间:2014/4/24 14:03:00
--  

这个还没搞定,问问,这两者的区别在哪儿呢。

 

是不是,前者会加载出一个空表,后者不会?

 

e.SelectString = "Select * from {" & e.DataTableName  & "} where 1=2"

 

 

e.Cancel = true


--  作者:有点甜
--  发布时间:2014/4/24 14:25:00
--  
 回复7楼,是的。
--  作者:ndxfke
--  发布时间:2014/4/24 15:03:00
--  

现在还有两个问题,需要求助。

 

1、有两个表总提示名表无效,但我在 sql和外部数据菜单列表中,怎么也找不到这两个表。有什么方法解决呢?

 

2、调试过程中,没有进入到else里去执行,什么个原因呢?

If e.DataTableName <> "平台管理" Or e.DataTableName <> "平台列表" Or e.DataTableName <> "快捷列表" Or e.DataTableName <> "系统选项列表"
    e.SelectString = "Select * from {" & e.DataTableName  & "} where 1=2"
Else
    MessageBox.show(e.DataTableName )
    e.SelectString = "Select * from {" & e.DataTableName  & "}"
End If


--  作者:有点甜
--  发布时间:2014/4/24 15:07:00
--  

代码这样写,看弹出的表名

 

MessageBox.show(e.DataTableName )

 

If e.DataTableName <> "平台管理" Or e.DataTableName <> "平台列表" Or e.DataTableName <> "快捷列表" Or e.DataTableName <> "系统选项列表"
    e.SelectString = "Select * from {" & e.DataTableName  & "} where 1=2"
End If