用SQL语句实现自动输入

在学习事件编程的时候,我们接触到了自动输入的例子。
这个例子有一个问题,就是必须将行政区域表的所有数据加载到Foxtable,上述代码才能完成自动输入的任务,由于中国的县级行政区域不过2000多个,所以这不算大的问题。
如果基础数据表不是行政区域,而是一个有几万行的表,那么仅仅为了实现自动输入而将整个表加载到Foxtable中是得不偿失的,如果有几十万甚至过百万行的数据,那么加载整个表根本就是不现实的。

所以本节我们要学习在不加载基础数据表的情况下,如何实现自动输入。
本节的例子可以参考CaseStudy目录下的文件:SQL与自动输入.Table。
该文件使用外部数据源作为基础数据表,数据源文件为:行政区域.mdb。

设计步骤

1、首先省市列的列表项目是固定的,所以我们在项目事件AfterOpenProject加入代码:

Dim cmd As New SQLCommand
Dim
dt As DataTable
cmd.ConnectionName =
"行政区域"
cmd.CommandText =
"SELECT DISTINCT 省市 From {行政区域}"
dt = cmd.ExecuteReader

Tables
("客户").Cols("省市").Combolist = dt.GetComboListString("省市"
)

这样打开项目后,会从后台的行政区域表提取不重复的省市值作为客户表省市列的列表项目,尽管行政区域表并没有加载。

2、在客户表的PrepareEdit事件中加入代码:

If e.IsFocusCell Then
    If e.Col.Name = "县市" Then
        Dim
cmd As
New SQLCommand
        Dim
dt As
DataTable
        cmd.ConnectionName =
"行政区域"
        cmd.CommandText =
"SELECT DISTINCT 县市 From {行政区域} Where [省市] = '" & e.Row("省市") & "'"
        dt = cmd.ExecuteReader
        e.Col.Combolist = dt.GetComboListString(
"县市")
    End
If
End
If

这样在编辑客户表的县市列之前,会从后台的行政区域表提取该省市的县市值,作为县市列的列表项目使用。

3、最后将客户表DataColChanged事件的代码设置为:

If e.DataCol.Name = "省市" Orelse e.DataCol.Name = "县市" Then
    Dim cmd As New SQLCommand
    Dim
dt As
DataTable
   
Dim dr As DataRow = e.DataRow
    cmd.ConnectionName =
"行政区域"
    cmd.CommandText =
"SELECT * From {行政区域} Where [省市] = '" & dr("省市") & "' And [县市] = '" & dr("县市") & "'"
    dt = cmd.ExecuteReader

    If
dt.DataRows.Count > 0
Then
        dr(
"区号") = dt.DataRows(0)("区号")
        dr(
"邮编") = dt.DataRows(0)("邮编")
    Else

        dr(
"区号") = Nothing
        dr(
"邮编") = Nothing
   
End If
End
If

这样一旦在客户表的某行输入省市和县市两列内容后,会从后台的行政区域表查找对应的行,如果找到,则将该行的区号和邮编写入客户表中,否则清除区号和邮编。
 


本页地址:http://www.foxtable.com/webhelp/topics/1995.htm