精华内容
下载资源
问答
  • 我构建了一个相当基本的查询生成器类,以避免字符串连接的混乱,并处理缺乏命名参数的问题。创建查询相当简单。PublicFunctionGetQuery()AsStringWithNewMSAccessQueryBuilder.QueryBody="SELECT*FROMtblEmployees"....

    我构建了一个相当基本的查询生成器类,以避免字符串连接的混乱,并处理缺乏命名参数的问题。创建查询相当简单。Public Function GetQuery() As String

    With New MSAccessQueryBuilder        .QueryBody = "SELECT * FROM tblEmployees"

    .AddPredicate "StartDate > @StartDate OR StatusChangeDate > @StartDate"

    .AddPredicate "StatusIndicator IN (@Active, @LeaveOfAbsence) OR Grade > @Grade"

    .AddPredicate "Salary > @SalaryThreshhold"

    .AddPredicate "Retired = @IsRetired"

    .AddStringParameter "Active", "A"

    .AddLongParameter "Grade", 10

    .AddBooleanParameter "IsRetired", False

    .AddStringParameter "LeaveOfAbsence", "L"

    .AddCurrencyParameter "SalaryThreshhold", 9999.99@

    .AddDateParameter "StartDate", #3/29/2018#

    .QueryFooter = "ORDER BY ID ASC"

    GetQuery = .ToString    End WithEnd Function

    ToString()方法的输出如下所示:从1=1和(StartDate>#3/29/2018#或StatusChangeDate>#3/29/2018#)和(StatusIndicator in(‘A’,‘L’)OR>10)和(工资>9999.99)和(退休=假)ID ASC中选择*;

    每个谓词都用Parens包装以处理链接和/OR子句,而同名的参数只需声明一次。完整代码在我的GitHub并转载如下。我也有一个版本对于使用ADODB参数的Oracle传递查询。最后,我想将两者都封装在IQueryBuilder界面中。VERSION 1.0 CLASSBEGIN

    MultiUse = -1  'TrueENDAttribute VB_Name = "MSAccessQueryBuilder"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = TrueAttribute VB_PredeclaredId = FalseAttribute VB_Exposed = True'@Folder("VBALibrary.Data")'@Description("Provides tools to construct Microsoft Access SQL statements containing predicates and parameters.")Option ExplicitPrivate Const mlngErrorNumber As Long = vbObjectError + 513Private Const mstrClassName As String = "MSAccessQueryBuilder"Private Const mstrParameterExistsErrorMessage As String = "A parameter with this name has already been added to the Parameters dictionary."Private Type TSqlBuilder

    QueryBody As String

    QueryFooter As StringEnd TypePrivate mobjParameters As ObjectPrivate mobjPredicates As CollectionPrivate this As TSqlBuilder' =============================================================================' CONSTRUCTOR / DESTRUCTOR' =============================================================================Private Sub Class_Initialize()

    Set mobjParameters = CreateObject("Scripting.Dictionary")

    Set mobjPredicates = New CollectionEnd Sub' =============================================================================' PROPERTIES' ============================================================================='@Description("Gets or sets the query statement (SELECT, INSERT, UPDATE, DELETE), exclusive of any predicates.")Public Property Get QueryBody() As String

    QueryBody = this.QueryBodyEnd PropertyPublic Property Let QueryBody(ByVal Value As String)

    this.QueryBody = ValueEnd Property'@Description("Gets or sets post-predicate query statements (e.g., GROUP BY, ORDER BY).")Public Property Get QueryFooter() As String

    QueryFooter = this.QueryFooterEnd PropertyPublic Property Let QueryFooter(ByVal Value As String)

    this.QueryFooter = ValueEnd Property' =============================================================================' PUBLIC METHODS' ============================================================================='@Description("Maps a boolean parameter and its value to the query builder.")'@Param("strName: The parameter's name.")'@Param("blnValue: The parameter's value.")Public Sub AddBooleanParameter(ByVal strName As String, ByVal blnValue As Boolean)

    If mobjParameters.Exists(strName) Then

    Err.Raise mlngErrorNumber, mstrClassName & ".AddBooleanParameter", mstrParameterExistsErrorMessage    Else

    mobjParameters.Add strName, CStr(blnValue)

    End IfEnd Sub' ============================================================================='@Description("Maps a currency parameter and its value to the query builder.")'@Param("strName: The parameter's name.")'@Param("curValue: The parameter's value.")Public Sub AddCurrencyParameter(ByVal strName As String, ByVal curValue As Currency)

    If mobjParameters.Exists(strName) Then

    Err.Raise mlngErrorNumber, mstrClassName & ".AddCurrencyParameter", mstrParameterExistsErrorMessage    Else

    mobjParameters.Add strName, CStr(curValue)

    End IfEnd Sub' ============================================================================='@Description("Maps a date parameter and its value to the query builder.")'@Param("strName: The parameter's name.")'@Param("dtmValue: The parameter's value.")Public Sub AddDateParameter(ByVal strName As String, ByVal dtmValue As Date)

    If mobjParameters.Exists(strName) Then

    Err.Raise mlngErrorNumber, mstrClassName & ".AddDateParameter", mstrParameterExistsErrorMessage    Else

    mobjParameters.Add strName, "#" & CStr(dtmValue) & "#"

    End IfEnd Sub' ============================================================================='@Description("Maps a long parameter and its value to the query builder.")'@Param("strName: The parameter's name.")'@Param("lngValue: The parameter's value.")Public Sub AddLongParameter(ByVal strName As String, ByVal lngValue As Long)

    If mobjParameters.Exists(strName) Then

    Err.Raise mlngErrorNumber, mstrClassName & ".AddNumericParameter", mstrParameterExistsErrorMessage    Else

    mobjParameters.Add strName, CStr(lngValue)

    End IfEnd Sub' ============================================================================='@Description("Adds a predicate to the query's WHERE criteria.")'@Param("strPredicate: The predicate text to be added.")Public Sub AddPredicate(ByVal strPredicate As String)

    mobjPredicates.Add "(" & strPredicate & ")"End Sub' ============================================================================='@Description("Maps a string parameter and its value to the query builder.")'@Param("strName: The parameter's name.")'@Param("strValue: The parameter's value.")Public Sub AddStringParameter(ByVal strName As String, ByVal strValue As String)

    If mobjParameters.Exists(strName) Then

    Err.Raise mlngErrorNumber, mstrClassName & ".AddStringParameter", mstrParameterExistsErrorMessage    Else

    mobjParameters.Add strName, "'" & strValue & "'"

    End IfEnd Sub' ============================================================================='@Description("Parses the query, its predicates, and any parameter values, and outputs an SQL statement.")'@Returns("A string containing the parsed query.")Public Function ToString() As StringDim strPredicatesWithValues As String

    Const strErrorSource As String = "QueryBuilder.ToString"

    If this.QueryBody = vbNullString Then

    Err.Raise mlngErrorNumber, strErrorSource, "No query body is currently defined. Unable to build valid SQL."

    End If

    ToString = this.QueryBody

    strPredicatesWithValues = ReplaceParametersWithValues(GetPredicatesText)

    EnsureParametersHaveValues strPredicatesWithValues    If Not strPredicatesWithValues = vbNullString Then

    ToString = ToString & " " & strPredicatesWithValues    End If

    If Not this.QueryFooter = vbNullString Then

    ToString = ToString & " " & this.QueryFooter & ";"

    End IfEnd Function' =============================================================================' PRIVATE METHODS' ============================================================================='@Description("Ensures that all parameters defined in the query have been provided a value.")'@Param("strQueryText: The query text to verify.")Private Sub EnsureParametersHaveValues(ByVal strQueryText As String)Dim strUnmatchedParameter As StringDim lngMatchedPoisition As LongDim lngWordEndPosition As Long

    Const strProcedureName As String = "EnsureParametersHaveValues"

    lngMatchedPoisition = InStr(1, strQueryText, "@", vbTextCompare)

    If lngMatchedPoisition <> 0 Then

    lngWordEndPosition = InStr(lngMatchedPoisition, strQueryText, Space$(1), vbTextCompare)

    strUnmatchedParameter = Mid$(strQueryText, lngMatchedPoisition, lngWordEndPosition - lngMatchedPoisition)

    End If

    If Not strUnmatchedParameter = vbNullString Then

    Err.Raise mlngErrorNumber, mstrClassName & "." & strProcedureName, "Parameter " & strUnmatchedParameter & " has not been provided a value."

    End IfEnd Sub' ============================================================================='@Description("Combines each predicate in the predicates collection into a single string statement.")'@Returns("A string containing the text of all predicates added to the query builder.")Private Function GetPredicatesText() As StringDim strPredicates As StringDim vntPredicate As Variant

    If mobjPredicates.Count > 0 Then

    strPredicates = "WHERE 1 = 1"

    For Each vntPredicate In mobjPredicates

    strPredicates = strPredicates & " AND " & CStr(vntPredicate)

    Next vntPredicate    End If

    GetPredicatesText = strPredicatesEnd Function' ============================================================================='@Description("Replaces parameters in the predicates statements with their provided values.")'@Param("strPredicates: The text of the query's predicates.")'@Returns("A string containing the predicates text with its parameters replaces by their provided values.")Private Function ReplaceParametersWithValues(ByVal strPredicates As String) As StringDim vntKey As VariantDim strParameterName As StringDim strParameterValue As StringDim strPredicatesWithValues As String

    Const strProcedureName As String = "ReplaceParametersWithValues"

    strPredicatesWithValues = strPredicates    For Each vntKey In mobjParameters.Keys

    strParameterName = CStr(vntKey)

    strParameterValue = CStr(mobjParameters(vntKey))

    If InStr(1, strPredicatesWithValues, "@" & strParameterName, vbTextCompare) = 0 Then

    Err.Raise mlngErrorNumber, mstrClassName & "." & strProcedureName, "Parameter " & strParameterName & " was not found in the query."

    Else

    strPredicatesWithValues = Replace(strPredicatesWithValues, "@" & strParameterName, strParameterValue, 1, -1, vbTextCompare)

    End If

    Next vntKey

    ReplaceParametersWithValues = strPredicatesWithValuesEnd Function' =============================================================================

    展开全文
  •   用于创建交叉表查询,该查询对于记录 计算总计、平均值、计数或其他类型的查询,然后按照两类信息对结果进行分组,一组数据分布数据表的左侧,另一组数据分布数据表的顶端 2、语法:   TRANSFROM ...

    transform 语句的应用详解:

    1、功能:

      用于创建交叉表查询,该查询对于记录 计算总计、平均值、计数或其他类型的查询,然后按照两类信息对结果进行分组,一组数据分布在数据表的左侧,另一组数据分布在数据表的顶端。通俗点说,就是使用 sql 实现透视表功能


    2、语法:

      TRANSFROM aggfunction
      SELECT statement
      PIVOT pivotfield [ in (vlaue1 [,value2 [, …]] ) ]
      对参数的解析:
      1、aggfunction: 对所选数据进行操作的 sql 聚合函数,常见的有 count、sum、avg 等函数
      2、SELECT statement: 为需要进行的 select 语句
      3、pivotfield : 用来在查询的结果集中创建列标题的字段或表达式
      4、value 值: 用于创建列标题的固定值


    3、transform 语句与透视表的对应关系:

      1)aggfunction: 聚合函数的参数,相当于数据透视表数据区域的值字段,使用聚合函数即设置值字段的汇总方式
      2)select statement: 相当于数据透视表的行字段,因为行字段都是不重复的值,所以要使用 group by 去重
      3)pivotfield: 相当于数据透视表的列字段,后面的
    in (vlaue1 [,value2 [, …]] ) 相当于列字段中项的排序及筛选

    下图是对应关系的图解
    在这里插入图片描述
    实例:
    实例1:统计 “测试表” 中,各班级的男女人数

    TRANSFORM Sum(测试表.人数) AS 人数合计
    SELECT 测试表.班级
    FROM 测试表
    GROUP BY 测试表.班级
    PIVOT 测试表.性别;
    

    《实例1》的返回结果:
    在这里插入图片描述


    实例2:统计 “测试表” 中,各班级的男生数量

    TRANSFORM Sum(测试表.人数) AS 人数之合计
    SELECT 测试表.班级
    FROM 测试表
    GROUP BY 测试表.班级
    PIVOT 测试表.性别 in("男");
    

    《实例2》的返回结果:
    在这里插入图片描述

    4、具体应用:实现行、列的合计,小计

    在这里插入图片描述
    1)行的合计

    /*
    对 transform 语句的另一种理解:可以看作是将 select 出来的记录,按 pivotfield 字段分类,对 TRANSFORM 后面的字段进行聚合运算 
    */
    TRANSFORM Sum(得分) AS 人数之合计
       SELECT 姓名, 班级, sum(得分) as 总分
    	 FROM 测试表
    	GROUP BY 姓名, 班级
    	order by 班级
        PIVOT 科目;
    

    《行合计》的返回结果:
    在这里插入图片描述

    2)列的合计

    transform sum(T.得分)
       select T.姓名, 
    	   	  iif(T.班级="9999","", T.班级) as 班级, 
    	   	  sum(得分) as 总得分
      	 from
    		  (SELECT 姓名, 班级, 科目, 得分 from 测试表
    		   union all
    		   select "合计" as 姓名, "9999" as 班级, 科目, sum(得分)
    		     from 测试表
    		    group by 科目) T
        group by T.姓名, T.班级
        order by T.班级
        pivot T.科目
    

    《列合计》的返回结果:
    在这里插入图片描述


    3)小计

    TRANSFORM Sum(得分) AS 人数之合计
       select T.姓名, T.班级, sum(得分) as 总得分
         from
    		 (SELECT * 
    			FROM 测试表
    		   union all
    		  select "小计" as 姓名, 班级, 科目, sum(得分)
    		    from 测试表	 
    		   GROUP BY 班级, 科目		   
    		   union all		   
    		  select "合计" as 姓名, "" as 班级, 科目, sum(得分)
    		    from 测试表	 
    		   GROUP BY 科目) T 
        group by T.姓名, T.班级
    	order by T.班级 
        PIVOT T.科目;
    

    《小计》的返回结果:
    在这里插入图片描述
    总结: 列的合计和小计,都是先构造出包含“合计”的数据源,然后对新的数据源进行 transform 操作

    展开全文
  • 被人问到一个这样的问题:在ACCESS中创建了窗体,在窗体内的文本框中输入参数,传递给SQLserver的存储过程中,返回结果集,生成报表.已知可以通过ACCESS的传递查询执行SQL的存储过程,问:如何把窗体中输入的参数传入到动态...
        被人问到一个这样的问题:在ACCESS中创建了窗体,在窗体内的文本框中输入参数,传递给SQLserver的存储过程中,返回结果集,生成报表.已知可以通过ACCESS的传递查询执行SQL的存储过程,问:如何把窗体中输入的参数传入到动态查询中?

        以前在软件公司中工作,从来没有这样诡异地使用过ACCESS跟SQLSERVER.但现在发现在企业中,类似的看上去让人不爽的应用还是很多的.没有思路,于是到CSDN上询问.
        CSDN上面ACCESS版网友wangtiecheng给出下面的代码:
       
    '更改传递查询的SQL语句
    Public Sub ChangeSQL(strPassThroughQueryName As String, strPassthroughSQL As String)
        
    '1、初始化
            
        
    Dim cat As New ADOX.Catalog
        
    Dim Pro As ADOX.Procedure
        
    Dim Cmm As New ADODB.Command
        
        
    '2、判断输入参数的有效性
        If strPassthroughSQL = "" Or Len(strPassthroughSQL) = 0 Then Exit Sub
        
        
    Set cat.ActiveConnection = CurrentProject.Connection                '使用本地连接 CurrentProject.Connection
        Set Pro = cat.Procedures(strPassThroughQueryName)
        
    Set Cmm = Pro.Command
        Cmm.CommandText 
    = strPassthroughSQL
        
    ' Cmm.CommandTimeout = 300
        Set Pro.Command = Cmm
        
        
    '3、更改 PassThrough 串成功
        
        
    Set cat = Nothing
        
    Set Pro = Nothing
        
    Set Cmm = Nothing
    End Sub
        在ACCESS中创建一个新的模块(模块名不能与sub名相同),拷入代码.
        VBA编辑器窗口,工具-引用,Microsoft ADO Ext. 2.8 for DLL and Security打勾.
        然后在执行存储过程前的代码中调用ChangeSQL子函数即可修改传递查询的SQL.

    转载于:https://www.cnblogs.com/cime63/archive/2007/11/14/959196.html

    展开全文
  • 工作过程中遇到这样一个问题:“如何重新设置ACCESS中表的自动递增字段的起始编号?”网上找了一些资料,发现以下方法是确实可行的: 自定义access自动编号起始值: 改变自动编号字段的起始值: ...
    工作过程中遇到这样一个问题:“如何重新设置ACCESS中表的自动递增字段的起始编号?”在网上找了一些资料,发现以下方法是确实可行的:


    自定义access自动编号起始值:


    改变自动编号字段的起始值:


    创建一个带参数的追加查询如下: 
    PARAMETERS [Number] Long; 
    INSERT INTO yourTable( fieldname ) 
    SELECT [Number] AS Expr1;


    详解:


    “yourTable”为你的包含自动编号字段的表的表名;
    “fieldname ”为自动编号的字段名,如“id”;
    Number 为运行这个查询时,所输入参数,即:你指定的起始编号。


    例:
    将“product”表里的“id”编号改成“1”开始,即:


    先删除“product”表里的所有数据,在access查询窗口中输入:


    PARAMETERS [Number] Long; 
    INSERT INTO product( id) 
    SELECT [Number] AS Expr1;


    然后点击“运行”在弹出的输入窗口中输入“1”点确定,此时会插入一行数据,id为1,其他非主键id数据列为空,当再重新插入数据时,id自动递增为2,以此类推。
    展开全文
  • 但实验后发现手机直接忽略BSSID这个参数的配置,一直连的是信号强度最强的wifi信号,并且再次查询保存手机里的WifiConfiguration配置的BSSID这一项显示为null。。难道4.0以上的android都不支持指定BSSID的连接吗...
  • 13.6.2 在Access中创建Outlook任务项 417 13.6.3 从Access中向Outlook中输入联系人 419 13.6.4 从Access中删除Outlook中的联系人 423 13.6.5 从Access中创建Outlook日历条目 424 13.7 用DDE调用其他应用程序...
  • ACCESS数据库管理工具1.0.0

    热门讨论 2006-03-16 00:00:00
    但是字段的添加,我发现只能在创建表的时候才能添加(打开一个表的时候,如何给它添加字段,是不是用普通代码难以实现,还是实现起来很麻烦,希望和高手交流)。 (3)可以连接数据库,生成一个形如:LINK+数据...
  • 23610.8.3 基于表被选定的记录进行计算 23810.9 设计参数查询 24010.9.1 向月销售量查询添加一个参数 24010.9.2 指定参数的数据类型 24110.10 创建交叉表查询 24210.10.1 使用向导生成一个季度产品销售 交叉表查询...
  • 23610.8.3 基于表被选定的记录进行计算 23810.9 设计参数查询 24010.9.1 向月销售量查询添加一个参数 24010.9.2 指定参数的数据类型 24110.10 创建交叉表查询 24210.10.1 使用向导生成一个季度产品销售交叉表查询 ...
  • 23610.8.3 基于表被选定的记录进行计算 23810.9 设计参数查询 24010.9.1 向月销售量查询添加一个参数 24010.9.2 指定参数的数据类型 24110.10 创建交叉表查询 24210.10.1 使用向导生成一个季度产品销售交叉表查询 ...
  • 23610.8.3 基于表被选定的记录进行计算 23810.9 设计参数查询 24010.9.1 向月销售量查询添加一个参数 24010.9.2 指定参数的数据类型 24110.10 创建交叉表查询 24210.10.1 使用向导生成一个季度产品销售交叉表查询 ...
  • MYSQL中文手册

    2013-03-11 21:21:34
    同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用...
  • 同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
  • 第一部分 界面设计

    2013-10-22 23:10:34
    实例226 如何在程序中创建Access数据库ODBC数据源 实例227 如何在程序运行时创建数据库BDE别名 实例228 如何在安装程序中设置BDE引擎 实例229 如何消除MS-SQL Server数据库连接的登录框 实例230 如何连接MS-SQL ...
  • Spring中文帮助文档

    热门讨论 2013-08-05 14:40:17
    12.2.2. Spring容器中创建 SessionFactory 12.2.3. The HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的...
  • MySQL中文参考手册

    2009-06-09 14:29:18
    + 1.2.1 本手册使用的约定 o 1.3 MySQL的历史 o 1.4 MySQL的主要特征 o 1.5 MySQL稳定性? o 1.6 顺应2000年 o 1.7 SQL一般信息和教程 o 1.8 有用的MySQL相关链接 * 2 MySQL 邮件列表及如何提问或报告错误...
  • MySQL中文参考手册.chm

    热门讨论 2007-06-11 21:31:17
    10.2.3 调节服务器参数 10.2.4 MySQL 怎样打开和关闭数据库表 10.2.5 同一个数据库中创建大量数据库表的缺点 10.2.6 为什么有这么多打开的表? 10.2.7 MySQL 怎样使用内存 10.2.8 ...
  • Access 表配置校验规则,默认不允许访问,需要对 每张表、每种角色、每种操作 做相应的配置,粒度细分到行级 https://github.com/Tencent/APIJSON/issues/12 3.如何校验参数 Request 表配置校验规则 ...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    79 <br>0115 如何判断是否为数字 79 <br>0116 如何在字符串查找指定字符 79 <br>0117 如何在字符串中用一子串替换另一子串 80 <br>0118 将新字符串添加到已有字符串 80 <br>0119 如何在...
  • SQLHelper.cs

    热门讨论 2009-03-09 10:22:10
    此方法通过将连接字符串和命令文本连接起来创建一个键,然后将参数数组存储 Hashtable 。 要从缓存检索参数,请使用 GetCachedParameterSet 方法。此方法将返回一个 SqlParameter 对象数组,这些对象已使用...
  • 实例093 嵌套查询在查询统计的应用 171 3.13 子查询 173 实例094 把子查询用作派生的表 173 实例095 把子查询用作表达式 175 实例096 UPDATE语句应用子查询 176 3.14 联合语句UNION 178 实例097 使用...
  • 实例093 嵌套查询在查询统计的应用 171 3.13 子查询 173 实例094 把子查询用作派生的表 173 实例095 把子查询用作表达式 175 实例096 UPDATE语句应用子查询 176 3.14 联合语句UNION 178 实例097 使用...
  • Excel_VBA教程

    2014-09-22 11:36:34
    第七课 如何在EXCEL里使用定时器 20 三、学习微软 EXCEL 2002 VBA 编程和XML,ASP技术 22 第一章 电子表格自动化简介和了解宏命令 22 1了解宏 22 2宏命令的普通应用 22 3写宏之前的计划 23 4录制宏 24 5运行宏 26 6...
  • 有两部分,请分别下载。 基本信息 作者: 赵振平 [作译者介绍] 出版社:电子工业出版社 ISBN:9787121061899 上架时间:2008-5-30 出版日期:2008 年5月 ... 耗时3年,作者曾为...实务15 linux(unix)环境...
  • 有两部分,请分别下载。 基本信息 作者: 赵振平 [作译者介绍] 出版社:电子工业出版社 ISBN:9787121061899 上架时间:2008-5-30 出版日期:2008 年5月 ... 耗时3年,作者曾为...实务15 linux(unix)环境...
  • 5.2 SQL Server Management Studio中创建数据库 107 5.3 使用Create database语句创建数据库 113 5.3.1 基本语法 113 5.3.2 T-SQL中的语法约定 114 5.3.3 参数讲解 115 5.3.4 Create Database语句需要注意的...
  • 实例133 如何在图片上平滑移动文字 165 3.7 图像动画 167 实例134 动画背景窗体 167 实例135 随鼠标移动的图像 169 实例136 十字光标定位 170 实例137 抓取鼠标形状 171 3.8 图像识别 172 实例138 ...
  •  cc实例108 如何在图片上平滑移动文字   3.9 图像管理   cc实例109 管理计算机内图片文件的程序   cc实例110 提取并保存应用程序图标   3.10 图片动画   cc实例111 利用图片制作屏幕保护程序   ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 109
精华内容 43
关键字:

如何在access中创建参数查询