首页 VFP学习笔记2

VFP学习笔记2

举报
开通vip

VFP学习笔记2 ·ReadExpression方法 返回在属性窗口中为一个属性值输入的表达式。设计和运行时可用。 Object.ReadExpression(cPropertyName) 参数 cPropertyName 指定要返回其表达式的属性的名称。 ·ReadMethod 方法 返回指定方法的文本。设计时可用。 Control.ReadMethod(cMethod) 参数 cMethod 指定方法的名称。 ·WriteExpression 方法 写一个表达式到一个属性。设计和运行时可用。 Ob...

VFP学习笔记2
·ReadExpression方法 返回在属性窗口中为一个属性值输入的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式。 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 和运行时可用。 Object.ReadExpression(cPropertyName) 参数 cPropertyName 指定要返回其表达式的属性的名称。 ·ReadMethod 方法 返回指定方法的文本。设计时可用。 Control.ReadMethod(cMethod) 参数 cMethod 指定方法的名称。 ·WriteExpression 方法 写一个表达式到一个属性。设计和运行时可用。 Object.WriteExpression[cPropertyName, cExpression] 参数 cPropertyName 指定要写入表达式的属性的名称。 cExpression 指定一个要作为表达式被写入这个属性的字符串。 ·WriteMethod 方法 将指定的文本写入指定的方法。仅设计时可用。 Control.WriteMethod(cMethodName, cMethodText [, lCreateMethod [, nVisibility [, cDescription ]]] ) 参数 cMethodName 指定将被写入文本的方法名。 cMethodText 指定要被写入方法的文本。 lCreateMethod 指定当方法不存在时是否要创建。由于这个方法仅在设计时可用,所以你必须在使修改生效之前先保存这个表单或类。 nVisibility 指定新方法的可见性。 nVisibility 可见性 1 Public(公用的) 2 Protected(受保护的) 3 Hidden(隐藏的) cDescription 指定一个新方法的描述文字。用来描述该方法的文字 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 最多 255 个字符。 【054】有关SQL命令、函数 ·设置表或临时表的属性 CursorSetProp(“Buffering”,3|5,Alias|WorkArea) ·放弃对缓冲行、缓冲表或临时表的修改 TableRevert(.T.|.F., Alias|WorkArea) .T.若启用表缓冲,则放弃对所有记录的修改。 .F.若启用表缓冲,则放弃当前记录的修改。 ·执行对缓冲表的修改 TableTpdate(0|1|2,[.T.|.F.[, Alias|WorkArea[,ErrorArray]]]) 0 若启用行缓冲,只实施当前记录。 1 若启用表缓冲,则实施所有记录;若启用行缓冲,则实施当前记录。 2 方式和1的情况一样,只是不产生错误。若包含错误数组,则创建错误数组。 .T. 覆盖其它用户的修改。 ·取消一条正在执行的SQL语句 SQLCancel(hsql) Hsql 链接句柄 返回值:1 成功,-1连接级错误,-2环境级错误。 ·把指定数据源表的列名及有关信息存储到VFP临时表中 SQLColumns(hsql,tblname[,FOXPRO|NATIVE][,temptbl]) 返回值:1 成功,0仍在执行,-1连接级错误,-2环境级错误。 FOXPRO列如下: 列名 说明 Field_name 列名 Field_type 数据类型 Field_len 列长度 Field_dec 小数位数 NATIVE: Table_qualifier 表限定符标识 Table_owner 表拥有者标识 Table_name 表标识 Column_name 列标识 Data_type 列数据类型 Type_name 列数据类型名 Precision 列的精度 Length 数据传送大小 Scale 列的宽度 Radix 数值类型的基准 Nullable 是否支持null值 Remarks 列的说明 ·提交一个事物 SQLCommit(hconn) 返回值: 1 成功,-1其他 ·建立连接,返回连接句柄 SQLConnect()--建立对数据源的连接。有两种版本的语法。 SQLCONNECT([nStatementHandle]) SQLCONNECT([cConnectionName | cDataSourceName [, cUserID [, cPassword ]][, lShared]]) 参数 nStatementHandle 指定对 nStatementHandle 表示的基本共享连接要创建的新语句句柄。新语句句柄使用 nStatementHandle 提供的设置,而不是使用默认设置。 注意: 不能对不共享的连接创建新语句句柄。如果试图依靠非共享连接创建新语句句柄,Visual FoxPro 将会产生错误。   也可以使用 SQLCONNECT( ) 在用 SQLSTRINGCONNECT( ) 打开的共享连接上获得新语句句柄。 cConnectionName 指定由 CREATE CONNECTION 命令创建的命名连接。当使用 CREATE CONNECTION 或连接设计器(Connection Designer)创建命名连接时,可以通过指定数据源名称、用户 ID 和密码来配置该连接。当在 SQLCONNECT( ) 中将该命名连接用作 cConnectionName 时,可以对可选参数 cUserID 和 cPassword 传递不同于命名连接的值。这些传递值被用于替代 cConnectionName 所指定命令连接中的用户 ID 和密码。例如,假设您使用 CREATE CONNECTION 或 Connection Designer 创建了叫 myNamedConnection 的命名连接,并指定了命名连接的 myUserID 和 myPassword 值。对于 SQLCONNECT( ),可以象下列代码那样,将 myNamedConnection 指定为 cConnectionName,然后将 myAltUserID 和 myAltPassword 指定为另一个用户 ID 和密码: 复制代码 SQLCONNECT("myNamedConnection", "myAltUserID", "myAltPassword") 然而,如果通过 CREATE CONNECTION 或 Connection Designer 使用连接串创建命名连接,在 SQLCONNECT( ) 中使用该命名连接,并试图将可选的用户 ID 和密码参数传递给 SQLCONNECT( ),Visual FoxPro 会产生相应的错误信息。当创建新共享连接时,cConnectionName 参数会引用当前数据库容器(DBC)中的命名连接。当基于现有共享连接创建新语句句柄时,cConnectionName 参数会引用前面以共享模式打开的连接。如果使用 cConnectionName 参数,而不使用 lShared 参数,或使用其值为 False (.F.) 的 lShared 参数,将总是创建不共享的新连接。当使用 cConnectionName 时,如果 lShared 为 True (.T.),而命名连接已经以共享模式打开,则所提供的用户名和密码应当匹配先前使用的值。否则,Visual FoxPro 会产生相应的信息。 cDataSourceName 指定 Odbc.ini 文件中定义的数据源名。也可以从 选择连接或数据源对话框 中选择数据源,该对话框在调用不带任何其他参数或只带 lShared 参数的 SQLCONNECT( ) 时出现。 cUserID 指定用于登录数据源的用户标识。 cPassword 指定获得对数据源访问的密码。 lShared 指定是否要创建共享连接。 lShared 说明 False (.F.) SQLCONNECT( ) 不创建共享连接。(默认) True (.T.) SQLCONNECT( ) 创建共享连接。 返回值 数值型数据类型。如果成功连接到数据源,SQLCONNECT( ) 会返回作为语句句柄的正的非零数字值。如果不能产生连接,SQLCONNECT( ) 会返回 –1。 提示: 应当将该语句句柄存储在内存变量中,并在后来需要连接句柄的函数调用中使用该变量。   说明 SQLCONNECT( ) 和 SQLSTRINGCONNECT( ) 函数返回的是作为语句句柄而不是连接句柄的数字值。虽然不能直接获得连接句柄,但仍然可以通过将连接语句句柄和串("Shared")作为参数传递,使用 SQLSETPROP( ) 和 SQLGETPROP( ) 函数设置和获得连接属性。所有其他的 SQL 函数都使用语句句柄来代替连接句柄。 如果发出了象 SQLCONNECT(cConnectionName, .T.) 这样的语句,而带有同样名称的共享连接已经打开,那么该连接的设置不会被更改为数据库容器(DBC)中该连接所存储的设置。然而,新语句句柄将会使用 DBC 中已声明的设置。 注意: 必须要废止 Open Database Connectivity (ODBC) 登录对话框以支持 SQL pass through 和 Microsoft Transaction Server。要废止 ODBC login 对话框,请使用 SQLSETPROP(nStatementHandle, 'DispLogin', 3) 语句,cStatementHandle 是 SQLCONNECT( ) 返回的语句句柄。也可以在 连接设计器 中废止 ODBC login 对话框。   示例 示例 1 下面示例假定叫 MyFoxSQLNT 的 ODBC 数据源存在并且可用。SQLCONNECT( ) 返回的数字值被存储在名为 gnConnHandle 的变量中。 如果成功连接到数据源,SQLCONNECT( ) 会返回正数,显示对话框,并调用 SQLDISCONNECT( ) 断开与数据源的连接。 如果不能连接到数据源,SQLCONNECT( ) 会返回负数并显示信息。 复制代码 STORE SQLCONNECT('MyFoxSQLNT', 'myUserID', 'myPassword') TO gnConnHandle IF gnConnHandle <= 0 = MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error') ELSE = MESSAGEBOX('Connection made', 48, 'SQL Connect Message') = SQLDISCONNECT(gnHandle) ENDIF 示例 2 下面示例中的每条语句都创建了新的共享连接。会出现 选择连接或数据源对话框,并且 SQLCONNECT( ) 会创建作为共享的连接。 复制代码 SQLCONNECT(.T.) SQLCONNECT( myConnectionName, .T. ) SQLCONNECT( myDataSourceName, myUserID, myPassword, .T. ) 示例 3 下面示例中的每条语句都创建了基于现有共享连接的新语句句柄。 复制代码 SQLCONNECT( nStatementHandleValue ) SQLCONNECT( myConnectionName, .T. ) ·终止连接 SQLDisconnect(hconn) 返回值: 1 成功,-1连接级错误,-2环境级错误。 ·SQL语句送入数据源处理 SQLExec() 发送一个处理过的 SQL 语句到数据源。 SQLEXEC(nStatementHandle [, cSQLCommand [, cCursorName[, aCountInfo]]]) 参数 nStatementHandle 指定由 SQLCONNECT( ) 函数返回的、要发送到到数据源的语句句柄。更多的信息,请参见 SQLCONNECT( ) 函数。 cSQLCommand 指定送入数据源的 SQL 语句。SQL 语句中可以包含一个参数化的 WHERE 子句,该子句创建一个参数化的视图。所有 WHERE 子句中的参数必须在发出 SQLEXEC() 之前定义。例如,如果参数是内存变量,那么该内存变量必须在 SQLEXEC() 发出之前创建并初始化。有关创建参数化视图的详细内容,请参阅如何创建参数化视图。可以在 SQL 语句中包含表达式。Visual FoxPro 在发送它们到数据源之前求值所有的 SQL 语句中的表达式。Visual FoxPro 可以求值内存变量名, 函数调用, 和参数中用括号括起来的表达式。 cCursorName 指定 Visual FoxPro 临时表的名称,结果集合将送入该临时表中。如果不包含临时表名,Visual FoxPro 使用默认名 SQLRESULT。对于多个结果集合,通过在第一个临时表的名称后追加一个递增的数值构成新临时表名。 aCountInfo 指定由行数信息装配的数组名。如果数组不存在, 就创建它。数组有两列: 1 – 别名, 2 –数量。 列 数组内容 数据类型 说明 别名 0 字符 指明 SQL 命令不返回任何结果。不是没有返回记录就是 SQL 命令在返回结果前失败了。(最后的 SQLMORERESULTS 调用) 或者在任何结果被处理前执行失败。只能在第一行上。行的 Count 列包含值 -1。 非空的大写串 字符 别名或临时表 – 记录获取操作的目标。行的 Count 列包含获取的记录数, 或者在获取失败时为 -1。如果 Count 是 -1, 临时表可能还没有创建。在异步执行时, 临时表的获取处理可以分成多个 SQLMORERESULTS 或 SQLEXEC 调用; 各个调用为临时表返回它们自己的获取数。 空串 字符 指明 SQL 命令 (INSERT, UPDATE 或 DELETE) 不返回结果集。 Count 影响数或获取记录。 整型 指明受 ODBC SQLRowCount 函数影响的记录。如果记录数不可用返回 -1。 返回值 数值型。如果存在多个结果集合,SQLEXEC( ) 返回结果集合的数目。如果 SQLEXEC( ) 仍在执行,SQLEXEC( ) 返回 0;当 SQLEXEC() 结束时,返回 1;如果发生连接级错误,SQLEXEC( ) 返回 -1。 说明 如果你要传递的 SQL 语句太长, 检查它是否超过了 Visual FoxPro 串长的最大限度 255 字符。太长的串会产生 "命令中含有不能识别的短语或关键字。" 错误。但是, 如果你把它们分割到多个相连的串中, 你可以传递长的 SQL 语句。例如:   复制代码 lnRetVal = SQLEXEC(lnHandle, "SELECT " + ; "FROM " + ; "WHERE ") 如果 SQLEXEC( ) 用于执行一个用 SQLPREPARE( ) 准备的 SQL 语句, 只需要连接句柄参数 nStatementHandle。cSQLCommand 和 CursorName 参数可以省略。更多的信息,请参见 SQLPREPARE( ) 函数。 如果 SQL 语句产生一个结果集合,那么 SQLEXEC() 将该结果集合存入指定的 Visual FoxPro 临时表中;如果 SQL 语句产生两个或多个结果集合,同时 SQLSETPROP() 设置为 1 (批处理方式),可以通过 SQLSETPROP( )函数设置 BatchMode 选项为 0,并且在每次调用 SQLMORERESULTS( )函数时更改临时表的名称来命名每个结果集合。 SQLEXEC() 是既能同步执行又能异步执行的四个函数之一。SQLSETPROP() 异步设置决定它们是同步执行还是异步执行。在异步方式下,必须重复调用 SQLEXEC() 直到返回一个非零值 ( 0 表示仍在执行)。 示例 以下示例展示不同的方法使用 SQLEXEC( ) 来执行 ad-hoc 查询并调用或创建存储过程:   复制代码 CLEAR LOCAL lnConn LOCAL lnPercent AS Int && Input parameters must be typed. LOCAL lnOutput lnPercent = 50 lnOutput = 0 * Make connection, assuming a local trusted connection. lnConn = SQLCONNECT('local') IF m.lnConn > 0 && Success. * Set the active database to PUBS. SQLEXEC(m.lnConn, 'use pubs') * Execute SELECT statement. SQLEXEC(m.lnConn, 'SELECT * FROM authors', 'PubAuthors') BROWSE * Execute INSERT statement, get value of identity field. SQLEXEC(m.lnConn, "INSERT INTO JOBS (job_desc, min_lvl, max_lvl); VALUES ('Developer',75,150)") SQLEXEC(m.lnConn, "SELECT SCOPE_IDENTITY()", "job_id") ? "ID for added Job is " + LTRIM(STR(job_id.exp)) * Execute DELETE statement. Get number of records affected. SQLEXEC(m.lnConn, "DELETE FROM JOBS WHERE job_desc ='Developer'") SQLEXEC(m.lnConn, "SELECT @@ROWCOUNT", 'rowcount') ? rowcount.exp, "record(s) deleted" * Call a stored procedure with no parameters. SQLEXEC(m.lnConn, 'sp_who', 'activeusers') BROWSE * Execute stored procedure with an INPUT parameter. SQLEXEC(m.lnConn, 'exec byroyalty ?lnPercent','HalfOffAuthors') * Create temp stored procedure with OUTPUT parameter and call it. SQLEXEC(m.lnConn, "CREATE PROCEDURE #MyProc @outparam int OUTPUT AS; SELECT @outparam=100") SQLEXEC(m.lnConn, "exec #myProc ?@lnOutput") ? m.lnOutput * Create a temp stored procedure with INPUT and OUTPUT parameters * and call it. SQLEXEC(m.lnConn, "CREATE PROCEDURE #MyProc2 " + ; "@inputparam INT, " + ; "@outparam int OUTPUT " + ; "AS SET @outparam=@inputparam*10") SQLEXEC(m.lnConn, "exec #myProc2 ?lnPercent, ?@lnOutput") ? m.lnOutput * Get version information. SQLEXEC(m.lnConn, 'SELECT @@VERSION','SQLVersion1') ? STRTRAN(SQLVersion1.Exp,CHR(0)) * Disconnect. SQLDISCONNECT(m.lnConn) ELSE ? "Unable to connect to SQL Server" ENDIF RETURN ·返回活动链接的当前设置 SQLGETPROP( ) 函数 返回一个活动连接的当前设置或默认设置。 SQLGETPROP(nStatementHandle, cSetting) 参数 nStatementHandle 指定由 SQLCONNECT( ) 返回的数据源语句句柄。如果指定 nStatementHandle 为 0, SQLGETPROP( ) 则返回环境设置。 cSetting 指定设置。关于你可以指定设置的一个列表,请参见 SQLSETPROP( ) 函数。 返回值 字符、数值或逻辑型数据类型。SQLGETPROP( ) 返回一个活动连接的当前或默认设置。如果发生连接级别错误 SQLGETPROP( ) 则返回 -1, 如果发生环境级别错误则返回 -2。 示例 下面示例用 SQLCONNECT( ) 来显示选择连接或数据源对话框。选择一个数据源, 测试该数据源连接。然后该示例使用 SQLGETPROP( ) 和数据源的 cSetting 显示结果。   复制代码 CLOSE ALL CLEAR ALL CLEAR nHandle=SQLCONNECT() IF nHandle > 0 cSource= SQLGETPROP(nHandle, "datasource") =MESSAGEBOX("Current Data Source = "+cSource,0,"Connection Results") ELSE =MESSAGEBOX("Connection Error = " + ; ALLTRIM(STR(nHandle)),0,"Connection Results") ENDIF =SQLDISCONNECT(nHandle) ·如果存在多个结果集合,则将另一个结果集合复制到 Visual FoxPro 临时表中。 SQLMORERESULTS( ) 函数 SQLMORERESULTS(nStatementHandle [, cCursorName [, aCountInfo]])) 参数 nStatementHandle 指定由 SQLCONNECT( ) 返回的数据源的语句句柄。 cCursorName 指定结果集要发送至的 Visual FoxPro 临时表名。如果未指定临时表名, Visual FoxPro 使用默认的名字 SQLRESULT。对于多个结果集, 新的临时表名是在第一个临时表名后添加递增的顺序数。 aCountInfo 指定要用行数信息填充的数组名。如果数组不存在就创建它。数组有两列: 1 – Alias, 2 –Count。 列 数组内容 数据类型 说明 Alias 0 字符 指明 SQL 命令不返回任何结果。不是没有返回记录就是 SQL 命令在返回结果前失败了。(最后的 SQLMORERESULTS 调用) 或者在任何结果被处理前执行失败。只能在第一行上。行的 Count 列包含值 -1。 非空的大写串 字符 别名或临时表 – 记录获取操作的目标。行的 Count 列包含获取的记录数, 或者在获取失败时为 -1。如果 Count 是 -1, 临时表可能还没有创建。在异步执行时, 临时表的获取处理可以分成多个 SQLMORERESULTS 或 SQLEXEC 调用; 各个调用为临时表返回它们自己的获取数。 空串 字符 指明 SQL 命令 (INSERT, UPDATE 或 DELETE) 不返回结果集。 Count 受影响的或获取的记录数。 整型 指明受 ODBC SQLRowCount 函数影响的记录。 如果记录数不可用返回 -1。 返回值 数值型。如果 SQL 语句仍在执行 SQLMORERESULTS( ) 返回 0, 执行结束返回 1, 如果未找到更多的数据返回 2。在非批处理模式中, SQLMORERESULTS( ) 会在各成功调用 SQLEXEC( ) 后被调用, 直到 SQLMORERESULTS( ) 返回 2 (未找更多数据)。SQLSETPROP( ) 批模式选项设置确定 SQLEXEC( ) 是否在批模式执行了一条 SQL 语句。 如果发生连接级错误 SQLMORERESULTS( ) 返回 – 1, 如果发生环境级错误返回 – 2。 说明 SQLMORERESULTS( ) 确定在非处理模式下用 SQLEXEC( ) 执行一条 SQL 语句时是否有多个结果集。如果有多个结果集, 它们被复制到一个 Visual FoxPro 临时表, 一次一个结果集。 SQLMORERESULTS( ) 是既能同步执行又能异步执行的四个函数之一。SQLSETPROP() 异步设置决定它们是同步执行还是异步执行。在异步方式下,必须重复调用 SQLMORERESULTS( ) 直到返回一个非零值 ( 0 表示仍在执行)。 示例 以下示例假定 SQLCONNECT( ) 成功发布了, 且它的返回值保存在一个名为 gnHandle 的变量中。用 SQLSETPROP( ) 来设置 BatchMode 属性为 False (.F.), 这样可以获取单独的结果集。 SQLMORERESULTS( ) 运行了两次来创建两个包含 SQLEXEC( ) 查询结果的临时表。SET 用于显示视图窗口和 SQLEXEC( ) 创建的临时表。   复制代码 = SQLSETPROP(gnHandle, 'BatchMode', .F.) && Individual result sets = SQLEXEC(gnHandle, 'SELECT * FROM authors; SELECT * FROM titles') = SQLMORERES(gnHandle) && First result set = SQLMORERES(gnHandle) && Second result set ·执行前的准备 SQLPREPARE( ) 函数 用 SQLEXEC( ) 为执行远程数据准备一个 SQL 语句。 SQLPREPARE(nStatementHandle, cSQLCommand, [cCursorName]) 参数 nStatementHandle 指定由 SQLCONNECT( ) 返回的数据源的语句句柄。 cSQLCommand 指定传递到数据源的 SQL 语句。 该 SQL 语句可以包含一个参数化的 WHERE 子句,创建一个参数化视图。WHERE 子句中的所有参数必须在 SQLPREPARE( ) 执行前事先 定义。例如,如果该参数是一个变量,那么该变量必须在 SQLPREPARE( ) 执行前被创建和初始化。关于参数化视图的更多信息, 请参见如何创建参数化视图。 cCursorName 指定发送到结果集中的 Visual FoxPro 临时表名。SQL 语句执行后返回的查询结果将被保存在这个表中。如果不包含临时表名,Visual FoxPro 将用 SQLRESULT 作为默认表 名。 对于多个结果集,新建的临时表名可由通过添加一个递增的数字到第一个临时表名中产生。 返回值 数值型 说明 SQLPREPARE() 将 SQL 语句传送到数据源,在那里可被更快地执行编译。SQL 语句被编译后,可被 SQLEXEC( ) 执行。如果 SQLEXEC( ) 用来执行一个用 SQLPREPARE( ) 准备的 SQL 语句,只需 SQLEXEC( ) 中的语句句柄。 示例   复制代码 gcAuthor = 'Smith' = SQLPREPARE(gnHandle, 'SELECT * FROM authors; WHERE au_lname = ?gcAuthor') = SQLEXEC(gnHandle) ... gcAuthor = 'Jones' = SQLEXEC(gnHandle) ·取消当前事务所做的更改 SQLROLLBACK( ) 函数 取消当前事务处理期间所做的任何更改。 SQLROLLBACK(nStatementHandle) 参数 nStatementHandle 指定由 SQLCONNECT( ) 返回的数据源语句句柄。 返回值 数值型。如果事务回滚成功,SQLROLLBACK() 返回 1;否则,返回 -1。如果 SQLROLLBACK( ) 返回 -1,可以使用 AERROR( ) 确定该事务不能回滚的原因。 说明 如果人工事务处理有效 (SQLSETPROP( ) 的 Transactions 属性设置成“人工”),就可以将多个更新发送到远程表中,这些更新可以用 SQLROLLBACK( ) 全部回滚。 可以用 SQLCOMMIT( ) 提交更新。 示例 下面的示例假定已经成功发出 SQLCONNECT( ),并且其返回值存入一个名为 gnHandle 的内存变量。SQLSETPROP( ) 将 Transactions 属性设置成 2 (人工),以允许使用 SQLCOMMIT( ) 和 SQLROLLBACK( )。 示例中用 SQLEXEC( ) 修改了表 authors,并用 SQLROLLBACK( ) 取消对该表的更改。   复制代码 = SQLSETPROP(gnHandle, 'Transactions', 2) && manual = SQLEXEC(gnHandle, "INSERT INTO authors (au_id, au_lname); VALUES ('aupoe', 'Poe')") = SQLROLLBACK(gnHandle) ·指定一个活动链接的设置 SQLSETPROP( ) 函数 指定一个活动连接的设置。使用 SQLSETPROP( ) 在连接级别上指定设置。若要在环境级别指定 Visual FoxPro 默认设置,用 0 作为连接语句句柄。 SQLSETPROP(nStatementHandle, cSetting [, eExpression]) 参数 nStatementHandle 指定由 SQLCONNECT( ) 返回的指向数据源的语句句柄。 cSetting 指定设置,下表列出了 cSetting 的值。 设置 描述 Asynchronous 指定结果集合是同步返回(默认值为“假”(.F.)),还是异步返回(“真”(.T.))。可读/写。 BatchMode 指定 SQLEXEC() 是一次返回全部结果集合 (默认值为“真”(.T.)),还是用 SQLMORERESULTS() 单个返回结果集合(“假”(.F.))。可读写。 ConnectBusy 如果共享连接繁忙,为“真”(.T.);否则为“假”(.F.)。只读。 ConnectString 登录的连接字符串。只读。 ConnectTimeOut 指定在返回连接超时错误前的等待时间(以秒计)。如果指定为 0,将无限期等待并且不返回超时错误。ConnectTimeOut 可从 0 到 600,默认值是 15。可读/写。 DataSource 和 ODBC.INI 文件中相同的数据源文件名。可读/写。 DisconnectRollback 指定一个当为最后的连接句柄调用 SQLDISCONNECT( ) 时要提交或回滚的未决的事务处理。 默认值为 false (.F.), 指明当为最后的连接句柄调用 SQLDISCONNECT( ) 时, 一个未决的事务处理被提交。 当为最后的连接句柄调用 SQLDISCONNECT( ) 时, 指定 true (.T.) 来回滚一个未决的事务处理。 自动事务处理连接不受此设置影响。 可读写。 DispLogin 包含一个数值,决定什么时候显示“ODBC 注册”对话框。DispLogin 可以设定为下列值: 1 或 DB_PROMPTCOMPLETE (在 FOXPRO.H 中定义)。默认值为 1。 2 或 DB_PROMPTALWAYS (在 FOXPRO.H 中定义)。 3 或 DB_PROMPTNEVER (在 FOXPRO.H 中定义)。 如果指定了 1 或 DB_PROMPTCOMPLETE, 则当需要的信息未得到时,Visual FoxPro 总是显示“ODBC 注册”对话框。 如果指定了 2 或 DB_PROMPTALWAYS, 则总是显示“ODBC 注册”对话框,允许连接前更改设置。 如果指定了 3 或 DB_PROMPTNEVER, 则不显示“ODBC 注册”对话框并且当所需要的注册内容不可用时,Visual FoxPro 产生一个错误。可读写。 DispWarnings DispWarnings 指定要显示一个错误信息 (“真”(.T.)),还是不显示一个错误信息 (“假”(.F.),默认值)。可读/写。 IdleTimeout 以秒计算的空闲超时间隔。在指定的时间间隔之后,活动的连接成为不活动的,默认值是 0 (无限期等待)。可读/写。 ODBChdbc 内部 ODBC 连接句柄,外部库文件 (FLL文件) 在调用 ODBC 时使用该句柄。只读。 ODBChstmt 内部 ODBC 语句句柄,外部库文件 (FLL文件) 在调用 ODBC 时使用该句柄。只读。 PacketSize 连接所用的网络包的大小,调整该值可以改善性能。默认值是 4096 字节 (4K)。可读/写。 Password 连接密码。只读。 QueryTimeOut 指定在返回常规超时错误前等待的时间(以秒计)。如果指定为 0,将无限期等待并且不返回超时错误。QueryTimeOut 可以是 0 到 600。可读/写。 Shared 指定基本连接是共享连接(真(.T.)), 或不是共享连接(假(.F.))。 只读。 Transactions 包含一个数值,该数值决定连接如何管理远程表上的事务处理。Transactions 可以设定为下列值: 1 或 DB_TRANSAUTO (在 FOXPRO.H 中定义)。是默认值,自动处理远程表的事务。 2 或 DB_TRANSMANUAL (在 FOXPRO.H 中定义)。通过 SQLCOMMIT( ) 和 SQLROLLBACK( ) 人工处理事务。可读/写。 UserId 用户标识。只读。 WaitTime 在 Visual FoxPro 检查 SQL 语句是否结束执行前延迟的以毫秒计的时间值。默认值是 100 毫秒。可读/写。 eExpression 对 cSetting 标明的设置指定值。如果省略了 eExpression 参数,则还原成设置的默认值。 返回值 数值型。如果调用成功,SQLSETPROP() 返回 1;否则,如果发生连接级别错误则返回 -1,发生环境级错误则返回 -2。 说明 可用 SQLGETPROP() 返回指定设置的当前值。 注意: 必须使 Open Database Connectivity (ODBC) 登录对话框失效来支持 SQL pass through 和 Microsoft Transaction Server。 若要使 ODBC 登录对话框失效,可使用 SQLSETPROP 语句 (cStatementHandle, 'DispLogin', 3),此处 cStatementHandle 是用 SQLCONNECT( ) 返回的语句句柄。ODBC 登录对话框也可以在连接设计器中禁止。     ConnectTimeOut 选项只能在 Visual FoxPro 级别上设置,而不能在连接级别上使用。所有其他选项既可在连接级 别,也可在 Visual FoxPro 级别上进行设置,每个在 Visual FoxPro 级别的设置作为随后连接的默认值。 示例 以下示例展示如何用 SQLSETPROP( ) 来设置当前连接包的大小。SQLCONNECT( ) 显示选择连接或数据源对话框来选择一个连接, 然后测试连接。设置包大小; 测试设置; 并且显示结果。   复制代码 CLOSE ALL CLEAR ALL CLEAR nHandle=SQLCONNECT() IF nHandle > 0 nSet=SQLSETPROP(nHandle, "PacketSize", 2048 ) IF nSet > 0 =MESSAGEBOX("PacketSize was set to 2048",0,"Connection Results") ELSE =MESSAGEBOX("Error setting PacketSize",0,"Connection Results") ENDIF ELSE =MESSAGEBOX("No Connection",0,"Connection Results") ENDIF =SQLDISCONNECT(nHandle) ·连接串建立连接 SQLSTRINGCONNECT( ) 函数 用连接串建立和数据源的连接。 SQLSTRINGCONNECT([lShared] | [cConnectString [, lSharable]]) 参数 lShared 指定是否建立一个共享连接。 lShared 说明 False (.F.) SQLSTRINGCONNECT( ) 不建立共享连接 (默认)。 True (.T.) SQLSTRINGCONNECT( ) 建立一个共享连接。 cConnectString 指定一些 ODBC 驱动程序需要的数据源连接字符串,Visual FoxPro 将该连接字符串传递给 ODBC 驱动程序。有关数据源连接字符串的详细内容,请参阅 ODBC 驱动程序的文档。也可以从 选择连接或数据源对话框 选择一个数据源, 它在你不带 cConnectString 参数调用 SQLSTRINGCONNECT( ) 时出现。 lSharable 指定 cConnectString 中指定的数据源是否有一个共享连接。 返回值 数值型。如果成功连接到数据源上,SQLSTRINGCONNECT() 返回一个正的、非零的语句句柄。如果不能连接 SQLSTRINGCONNECT( ) 返回 -1。 提示: 应该将这个语句句柄存入一个内存变量,在随后需要连接句柄的函数调用中使用该变量。   说明 SQLCONNECT( ) 和 SQLSTRINGCONNECT( ) 函数返回一个数值型的语句句柄值而不是连接句柄。不能直接获取一个连接句柄。仍然可以为此连接传递语句句柄和串 "Shared" 为表达式而用 SQLSETPROP( ) 和 SQLGETPROP( ) 函数设置和获取连接属性。所有其它的 SQL 函数用语句句柄代替连接句柄。 SQLSTRINGCONNECT( ) 总是在它成功连接后创建一个新的连接。但是, 设置 lShared 参数来确定你是否可以在稍后共享此连接。如果你设置 lShared 为 True (.T.) 来指定连接为可共享的, 你可以有稍后调用 SQLCONNECT( ) 并传递数值型的连接句柄值为第一个参数来共享此连接。更详细的信息,请参见 SQLCONNECT( ) 函数。 可以用 SQLCONNECT( ) 在一个用 SQLSTRINGCONNECT( ) 打开的共享的连接上来获取一个新的语句句柄。 示例 示例 1 以下示例假定名为 MyFoxSQLNT 的 ODBC 数据源存在并可用。SQLSTRINGCONNECT( ) 返回一个数值型的值, 它保存在名为 gnHandle 的变量中。 如果成功地连接到了数据源, SQLSTRINGCONNECT( ) 返回一个正的数值, 一个对话框显示出来, 并且 SQLDISCONNECT( ) 被调用来从数据源断开。 如果不能连接到数据源, SQLSTRINGCONNECT( ) 返回一个负数并显示信息。   复制代码 STORE SQLSTRINGCONNECT('dsn=MyFoxSQLNT;uid=myUserID;pwd=myPassword') TO gnConnHandle IF gnConnHandle < 0 = MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error') ELSE = MESSAGEBOX('Connection made', 48, 'SQL Connect Message') = SQLDISCONNECT(gnHandle) ENDIF 示例 2 以下示例展示如何不带数据源名地调用 SQLSTRINGCONNECT( ) 函数。   复制代码 lcDSNLess="driver = SQL Server;server=;uid=;pwd=" -或者-   复制代码 lcDSNLess="driver = {SQL Server};server=;uid=;pwd=" -或者-   复制代码 lcDSNLess="DRIVER = {SQL Server};" ; + "SERVER=;" ; + "UID=;" ; + "PWD=;" ; + "DATABASE=PUBS;" ; + "WSID=;" ; + "APP=MicroX(R) Sample App" lnConnHandle=SQLSTRINGCONNECT(m.lcDSNLess) ·将数据源的表名存储到  Visual FoxPro 的临时表中。 SQLTABLES( ) 函数 SQLTABLES(nStatementHandle [, cTableTypes] [, cCursorName]) 参数 nStatementHandle 指定用 SQLCONNECT( ) 返回的、指向数据源的语句句柄。 cTableTypes 指定一个或多个表类型。有效的表类型是“TABLE”、“VIEW”、“SYSTEM TABLE”或任何有效的数据源特定表类型的标识符。如果包含一个表类型的列表,则要用逗号将表类型分开。如果省略 cTableTypes 或 cTableTypes 是空字符串,则选定数据源中所有的表名。指定的表类型必须用单引号括起来。下面的示例示范了如何用一行文字来指定“VIEW”和“SYSTEM TABLE”表类型。   复制代码 ? SQLTABLES(handle, "'VIEW', 'SYSTEM TABLE'", "mydbresult") cCursorName 指定结果集发送到 Visual FoxPro 临时表的名称。如果不包含临时表名,Visual FoxPro 将使用默认名“SQLRESULT”。该结果的结构取决于 ODBC 句柄的内部 SQLTABLES( ) 函数。 返回值 数值型。如果临时表创建成功,SQLTABLES( ) 返回 1;如果 SQLTABLES( ) 仍在执行中,返回 0;如果发生连接级别的错误,则返回 -1;如果发生环境级别的错误,则返回 -2。 说明 SQLTABLES( ) 是既可同步执行又可异步执行的四个函数之一。SQLSETPROP( ) 的异步选项设置决定这些函数是同步还是异步执行。在异步方式中,你必须重复调用 SQLTABLES( ),直到返回一个非“假”(.F.) 值,否则表示函数仍在执行中。 示例 下面的示例假定一个调用 MyFoxSQLNT 的 ODBC 数据源是可用的。发出 SQLCONNECT( ),并将返回值存入名为 gnConnHandle 的变量中。 如果不能连接到该数据源,SQLCONNECT( ) 则返回一个负数,并显示一条信息。 如果成功地连接到该数据源,SQLCONNECT( ) 则返回一个正数,并显示一个对话框。SQLTABLES( ) 用来创建一个名为 mycursor 的临时表,该临时表包含有关数据源中表的信息。LIST 被用来显示关于表的有关信息。   复制代码 STORE SQLCONNECT('MyFoxSQLNT', '', '') TO gnConnHandle IF gnConnHandle < 0 = MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error') ELSE = MESSAGEBOX('Connection made', 48, 'SQL Connect Message') STORE SQLTABLES(gnConnHandle, 'TABLE', 'mycursor') TO nTables IF nTables = 1 SELECT mycursor LIST ENDIF ENDIF 【055】有关数据库和表的操作命令和函数 ·在当前库中添加表 Add Table tblname [Name longName] ·在表尾部添加一条空记录 Append [Balnk] [In WorkArea|Alias] ·从临时表添加数据 Append From Dbf(‘tempTable’) tempTable – 由SQL-Select 创建 ·将文本文件的内容复制到备注字段中 Append Memo memField From textFile.txt [Overwrite] Overwrite – 覆盖原内容。 ·文本文件的内容追加到当前数据库 Append Procedure From textFile.txt [Overwrite] ·清空当前记录中的数据 Balnk [Field fldList] [范围] [For condition|While condition] ·编译库中的存储过程 Compile Database dbname ·当前记录备注字段内容复制到文本文件 Copy Memo memFld To textFile.txt [Additive] ·当前库中的存储过程复制到文本文件 Copy Procedure To textFile.txt [Additive] ·用当前选定的表创建新表 Copy To tblname ·创建一个命名连接,并存储到当前数据库中。 CREATE CONNECTION [ConnectionName | ?] [DATASOURCE cDataSourceName] [USERID cUserID] [PASSWORD cPassWord] [DATABASE cDatabaseName] | CONNSTRING cConnectionString] 参数 ConnectionName 指定要创建的连接名。   显示 连接设计器 ,通过它可以建立并保存一个连接。 DATASOURCE cDataSourceName 指定连接的 ODBC 数据源名称。 USERID cUserID 指定 ODBC 数据源的用户标识。 PASSWORD cPassWord 指定 ODBC 数据源的密码。 DATABASE cDatabaseName 指定能成功连接的服务器上的数据库。 CONNSTRING cConnectionString 指定 ODBC 数据源的连接字符串。连接字符串可以用于代替 ODBC 数据源, 用户标识, 及 密码。 说明 如果忽略可选参数,将出现连接设计器,允许用于以交互方式创建连接。 示例 下例假设一个名为 MyFoxSQLNT 的 ODBC 数据源是可用的。先打开 testdata 数据库,然后建立一个名为 Myconn 的连接。DISPLAY CONNECTIONS 用于显示数据库中的命名连接。最后使用 DELETE CONNECTION 从数据库中移去连接。   复制代码 CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') CREATE CONNECTION Myconn DATASOURCE "MyFoxSQLNT" USERID "" PASSWORD "" CLEAR DISPLAY CONNECTIONS && 显示数据库中的命名连接 DELETE CONNECTION Myconn && 移去刚创建的连接 ·建立打开表之间的关系,从而在父表中移动记录指定时移动子表中的记录指针。 SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1 [, eExpression2 INTO nWorkArea2 | cTableAlias2 ...] [IN nWorkArea | cTableAlias] [ADDITIVE]] 参数 eExpression1 指定创建父表和子表间关系的关系表达式。该关系表达式通常是子表主控索引的索引表达式。如果 eExpression1 是数字,则当记录指针在父表中移动时计算它。然后,子表的记录指针移动到记录编号为 eExpression1 的记录上。忽略 SET RELATION 命令的所有参数,将移去当前选定工作区中所有关系。可以使用 SET RELATION OFF 命令移去一个特定的父子关系。更多的信息,请参见 SET RELATION OFF 命令。 INTO nWorkArea1| cTableAlias1 指定子表的工作区编号或表别名。 eExpression2INTO nWorkArea2| cTableAlias2... 指定一个关系表达式,以及工作区编号或子表别名,从而可以在父表和子表之间创建一个附加关系。每条关系之间用逗号分隔。 IN nWorkArea 指定父表的工作区。 IN cTableAlias 指定父表的别名。IN 子句允许创建关系时不必首先选择父表的工作区。如果省略 nWorkArea 和 cTableAlias,则父表必须在当前选定工作区中打开。 ADDITIVE 保留当前工作区中所有已存在的关系,并创建指定的关系。省略 ADDITIVE 将断开当前工作区中的任何关系,并创建指定的关系。 说明 在创建一个关系之前,表必须在不同工作区中打开。除非关系表达式是数字,否则子表必须建立基于公共字段的索引。子表的索引可以是单项(.idx)索引、结构复合(.cdx)索引,或非结构符合索引。如果索引是一个复合索引,则应使用 SET ORDER 命令指定适当的索引标识来排序子表中的记录。 注意: 如果调用带有非数值关系表达式的 SET RELATION 命令,且子表没有使用索引进行排序,则 Visual FoxPro 将产生一条错误信息。   可以创建存在公共字段的表间关系。使用单条 SET RELATION 命令可以创建单个父表与多个子表间的多重关系。 注意: 如果在子表中找不到匹配记录,则子表中的记录指针被放在表尾。   如果子表存在一个活动索引,则 eExpression1 的数据类型必须与子表的活动索引关键字相同。如果子表不存在活动索引,则 eExpression1 必须是数值型,在此情况下它表示要在子表中移动的记录数。 示例 示例 1 下例创建 customer 表和 orders 表间的关系,其中 customer 表中一条消费者记录可以对应 orders 表中的多个订购单记录。 通过使用公共字段创建关系,您可以浏览到任何消费者的所有订购单。该例使用 customer 表中的 Cust_ID 字段和 orders 表中的 Cust_ID 索引标识创建关系。orders 表中的索引通过消费者组织记录。 以下代码使用 USE 命令在 1 号工作区中打开 customer 表作为父表,然后在 2 号工作区中打开 orders 表作为子表。SELECT 命令选择 orders 表的工作区。SET ORDER 命令使用 Cust_ID 索引标识指定 orders 表的订购单。   复制代码 USE Customer IN 1 USE Orders IN 2 SELECT Orders SET ORDER TO TAG Cust_ID 以下代码使用 SELECT 命令选择 customer 表的工作区。SET RELATION 命令创建父表和子表中主控索引间的关系:   复制代码 SELECT Customer SET RELATION TO Cust_ID INTO Orders 以下代码在“浏览”窗口中打开 customer 表,选择 orders 表的工作区,然后为 orders 表打开“浏览”窗口:   复制代码 BROWSE NOWAIT SELECT Orders BROWSE NOWAIT 当您移动 customer 表中的记录指针时,orders 表中的记录指针随之移动。打开数据工作期窗口可以显示两表间创建的关系。 示例 2 下例创建一个单表内部的关系,或称为自我引用(self-referential)关系。通过在不同的工作区中以不同的别名打开相同的表,就可以通过使用两个别名创建相同表中的关系。以下代码首先使用 SELECT 命令选择表的工作区,并通过 USE 命令以 Manager 为别名打开表。然后使用 SELECT 命令选择相同的工作区,并通过 USE 命令和 AGAIN 关键字以 Employee 为别名再次打开表。表在两个不同的工作区中打开:   复制代码 SELECT 0 USE Employees ALIAS Manager SELECT 0 USE Employees AGAIN ALIAS Employee 以下代码使用 INDEX 命令创建一个基于 Reports_To 字段带有 Mgr_ID 索引标识的索引,然后使用 SET ORDER 命令设置表中索引顺序。创建的索引通过管理人员组织记录。   复制代码 INDEX ON Reports_To TAG Mgr_ID SET ORDER TO Mgr_ID 以下代码使用 SELECT 命令选择 Manager 别名作为父表。 SET RELATION 创建父表和子表中主控索引标识间的关系。子表中的主控索引通过员工组织记录。   复制代码 SELECT Manager SET RELATION TO Emp_ID INTO Employee 以下代码在“浏览”窗口中打开 Manager 别名的表,选择 Employee 为别名的表的工作区,然后为表打开“浏览”窗口:   复制代码 BROWSE SELECT Employee BROWSE 当您在 manager 表中移动记录指针时,employee 表中的记录指针随之移动,并且仅显示出所选管理人员所管理的那些员工。 解除当前选定工作区中的父表与相关子表之间建立的关系。 SET RELATION OFF INTO nWorkArea | cTableAlias ·创建表间的一对多关系。 SET SKIP TO [TableAlias1 [, TableAlias2] ...] 参数 TO TableAlias1[, TableAlias2] ... 指定多个子表的别名。这些表用来创建与父表的一对多关系。使用逗号分隔别名。在支持范围的命令中(DISPLAY、 LIST 等等),子表中每条对应记录都重复父表中的记录。使用不带其它参数的 SET SKIP TO 命令,从当前选定工作区中打开的父表中删除一对多关系。任何一对一关系仍保持有效。一对一关系可以用 SET RELATION TO 删除。 说明 使用 SET RELATION 命令,可以在不同工作区中打开的表间建立关系。当父表中的记录指针移动时,子表中的记录指针移动到第一条相应的记录上。SET RELATION 中的关系表达式确定了子表中记录指针移动到何处。如果为父表中的每条记录都创建了一对一关系,则记录指针移动到子表中第一条匹配的记录上。如果在子表中没有找到匹配记录,则子表中的记录指针移动到表尾。 通常,父表的一条记录都对应着子表中的多条记录。SET SKIP 允许创建父表中的一条记录与子表中的多条记录间的一对多关系。当浏览父表时,记录指针保持在相同的父记录上,直至记录指针遍历了子表中所有相关的记录为止。 要建立一对多关系,应首先用 SET RELATION 在父表和子表之间建立关系。然后,发出 SET SKIP 来创建一对多关系。 示例 该例在三张表中查找第一个字段内容相同的所有记录。首先使用 SCAN 扫描第一张表,该表与第二张表存在关系,第二张表与第三张表存在关系。然后第一张表对另外两张表执行 SET SKIP 命令。SET SKIP 对第二张表没有影响。它仅影响被扫描的表(替换,等等)。在该例中,找到 8 条匹配记录。   复制代码 CLOSE DATABASES * 用 Name 字段中的值 a 和 b 创建 parent 表 CREATE TABLE Parent FREE (Name C(1), Val C(10)) INSERT INTO Parent VALUES ('a', 'Parent.a1') INSERT INTO Parent VALUES ('b', 'Parent.b1') SELECT 0 && Child1 中将存在两个 a 和两个 b CREATE TABLE Child1 FREE (Name1 C(1), Val C(10)) INSERT INTO Child1 VALUES ('a', 'Child1.a1') INSERT INTO Child1 VALUES ('b', 'Child1.b1') INSERT INTO Child1 VALUES ('b', 'Child1.b2') INSERT INTO Child1 VALUES ('a', 'Child1.a2') INDEX ON Name1 TAG tagName && 标识名无关紧要 SELECT 0 && Child2 中将存在两个 a 和两个 b CREATE TABLE Child2 FREE (Name2 C(1), Val C(10)) INSERT INTO Child2 VALUES ('b', 'Child1.b1') INSERT INTO Child2 VALUES ('b', 'Child1.b2') INSERT INTO Child2 VALUES ('a', 'Child1.a1') INSERT INTO Child2 VALUES ('a', 'Child1.a2') INDEX ON Name2 TAG tagName && 标识名无关紧要 SELECT Child1 SET RELATION TO Name1 INTO Child2 SELECT Parent SET RELATION TO Name INTO Child1 SET SKIP TO Child1, Child2 && 注意对两个子表都设置 skip. && 否则,将仅列出 4 条记录. SCAN ALL && 将存在 8 中情况: 四个a的和四个b的 ? Parent.Val, Child1.Val, Child2.Val ENDSCAN ·当前表结构存入数组,返回字段数 AFIELDS( ) 函数 获取指定工作区中的表结构信息并存贮到一个数组中,通过表别名,或者当前选定的工作区指定,并且返回表的字段数。 AFIELDS( ArrayName [, nWorkArea | cTableAlias ] ) 参数 ArrayName 指定数组名,将表结构信息存放在这个数组中。如果指定的数组不存在,Visual FoxPro 将自动创建此数组。如果数组存在,但大小不足以包含 AFIELDS( ) 函数返回的所有信息,Visual FoxPro 将自动增加数组大小,使数组能容纳所有信息。 nWorkArea 指定表所在的工作区。 cTableAlias 指定表的别名。如果忽略 nWorkArea 和 cTableAlias,AFIELDS( ) 将获取当前选定的工作区中表的信息。 返回值 数值型数据类型。AFIELDS( ) 返回表中的字段数。数组包含18列,行数与表中的字段数相等。 下表描述了数组第一行中每列的内容和每列信息的数据类型。与表相关的信息从第 10 列到 16 列只在表中的第一行中。各字段在表中创建一行。 列号 字段信息 数据类型 1 字段名 字符型 2 字段类型: C = 字符型 Y = 货币型 D = 日期型 T = 日期时间型 B = 双精度型 F = 浮点型 G = 通用型 I = 整型 L = 逻辑型 M = 备注型 N = 数值型 Q = 可变长二进制型(Varbinary) V = 可变长字符型(Varchar) 和可变长字符型(二进制) (Varchar (Binary)) W = 大二进制对象(Blob) 字符 3 字段宽度 数值型 4 小数位 数值型 5 允许 Null 值 逻辑型 6 不允许代码页转换 逻辑型 7 字段有效性表达式 字符型 8 字段有效性文本 字符型 9 字段默认值 字符型 10 表有效性表达式 字符型 11 表有效性文本 字符型 12 长表名 字符型 13 插入触发器表达式 字符型 14 更新触发器表达式 字符型 15 删除触发器表达式 字符型 16 表注释 字符型 17 自动增量的 NextValue 值 数值型 18 自动增量的步长 数值型 说明 如果表中的字段使用了自动增量,步长值将大于0。 可以使用 COPY STRUCTURE EXTENDED 取代数组将获取的信息存放到一个表中。 示例 下面的示例创建名为 gaMyArray 的数组,数组中放置表 Customer 的字段信息,然后显示字段名。   复制代码 CLOSE DATABASES OPEN DATABASE (HOME(2) + 'Data\testdata') USE Customer && 打开 Customer 表。 gnFieldcount = AFIELDS(gaMyArray) && 创建数组。 CLEAR FOR nCount = 1 TO gnFieldcount ? gaMyArray(nCount,1) && 显示字段名。 ENDFOR ·返回表别名 Alias([WorkArea|Alias]) ·将一个数据工作期中的表别名和工作区存入内存变量数组。 AUSED(ArrayName [, nDataSessionNumber [, cTableName]]) 参数 ArrayName 指定保存数据工作期中表别名和工作区的数组名;如果指定的数组不存在,Visula FoxPro 将自动创建此数组。如果数组存在,但其大小不足以包含所有表别名和工作区,Visula FoxPro 将自动增加数组大小。如果数组大小超过所需值,Visula FoxPro 将截去多余部分。如果数组存在,但由于数据工作期中没有打开的表而使 AVSED() 函数返回 0,数组将保持不变。如果数组不存在,并且 AUSED( ) 函数返回 0,Visula FoxPro 将不创建此数组。 nDataSessionNumber 指定数据工作期编号,AUSED( ) 函数返回此数据工作期中的表别名和工作区。如果忽略参数 nDataSessionNumber,AUSED( ) 返回当前数据工作期的信息。使用 SET DATASESSION 可以指定当前数据工作期。 cTableName 数组中仅包含由 cTableName 指定的表的别名。如果 nDataSessionNumber 被设为空值 (.NULL.) ,当前数据工作期将被使用。 cTableName 具有下列的格式,按照 Visual FoxPro 搜寻表的顺序排列。DatabaseName!TableName 或 DatabaseName!ViewName,PathDatabaseName!TableName 或者 PathDatabaseName!ViewName,数据库容器 (DBC) 中定义的表名或数据工作期中当前DBC中的视图,简单或完整的表名。 返回值 数值型 说明 AUSED( ) 返回数组的行数,与数据工作期中打开表的数目相等。 AUSED( ) 函数创建一个二维数组,并且将数据工作期中打开表的别名存入数组的第一列,数组的第二列保存与表相应的工作区编号。 表别名以与打开时相反的顺序放入数组。例如, 第一个数组元素包含最后打开的表的别名, 最后一个数组元素包含第一个打开的表的别名。当在包含视图的视图上使用 TABLEUPDATE() 时该顺序是有用的。例如:   复制代码 FOR x = 1 TO AUSED(aTableAliases,1) IF CURSORGETPROP( "Buffering", aTableAliases(x) ) > 1 && 使用缓存 TABLEUPDATE( 0, .T., aTableAliases(x) ) ENDIF NEXT 示例 下面的示例使用 AUSED( ) 函数创建名为 gaInuse 的数组,数组中包含当前数据工作期打开表的别名及其工作区。显示当前数据工作区打开表的数目,然后显示表的别名和工作区。   复制代码 OPEN DATABASE (HOME(2) + 'Data\testdata') EXCLUSIVE USE Customer IN 0 CLEAR ? AUSED(gaInuse) DISPLAY MEMORY LIKE gaInuse CLOSE DATABASES ·是否找到结果 Found([WorkArea|Alias]) 【056】表单设计、报表运行命令 ·Create Form form.Scx|? As className From Classlib ·Do Form formName Name variable Linked With paramlist To Variable 【057】类似于Do Case的函数 ICase(lcondition1,eResult1,…,lcondition_n,eResult_n,eotherWiseResult) 示例:ICase(1+1=2,”First”,1+2=1,”Second”,”third”) 返回:”First” 【058】Scatter命令 从当前记录中把数据复制到一组内存变量或数组中。 语法: Scatter Fields fldnamelist Fields Like skeleton Fields Except skeleton [Memo] To aName To aName Blank MemVar MemVar Blank Name objName [Blank] [Additive] 示例: Use customer Scatter Name customer ?customer.Company &&--返回表中的值 ?m.customer.Company &&--返回对象属性值 示例: Create Table Test Free(Object C(10),Color C(16),sqft N(6,2)) Scatter MemoVar Blank m.Object=”Box” m.Color=”Red” m.Sqft=12.5 Append Blank Gather MemVar Browse 示例: Create Table Test Free(Object C(10),Color C(16),Sqft N(6,2)) Scatter Name oTest Blank oTest.Object=”Box” oTest.Color=”Red” oTest.Sqft=12.5 Append Blank Gather Name oTest Browse 示例: Select customer Scatter Name ocustomer Select Fields ReportDate,Rating Name ocustomer Additive Select MySessionTable Scatter Fields CookieText,SessionId Name ocustomer Additive 【060】VFP内置编辑的智能感应功能及用法 ·功能 ★输入命令缩写及空格后,命令会自动扩展。 ★输入函数名及左括号,对象名及点之后,系统会自动提示相应的参数或属性、方法名等供选择。 ★二次开发功能。即用脚本程序对功能进行扩展。 ·FoxCode表结构及用法 智能感应的所有内容及 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 都在一个表中定义,表的文件名在系统变量_FoxCode中存放。 ★FoxCode表的结构 字段名 说明 Type 类型。C 命令,F 函数,P 属性,S 脚本,O 对象,U 用户定义 Abbrev 引发智能感应的关键词,也是命令或函数的最短缩写。 Cmd 填写脚本的名称,放在{}内,此脚本名应在另外一条记录的Abbrev中。 Data 备注型。存放脚本程序或存放任意数据。 Expanded 命令或函数展开的全名。 Tip 提示信息。 Case 指定Case字段的内容 Save 指定Save字段的内容 Source 指定Source字段的内容 UniqueID 指定UniqueID字段的内容 User 指定User字段的内容 根据Type的不同,这些字段的意义有所区别,而且不一定全部需要。不需要的字段可以空着。下面是几种不同的组合方式: Type Abbrev Expanded cmd Data C|F 存放缩写 存放全称 脚本名可见 空 S 脚本名称 空 空 脚本程序 U U S 存放关键词 存放关键词 脚本名称 {} {脚本名} 空 脚本程序 数据 脚本程序 ·用户自定义类型的使用 用户自定义类型为U的记录。脚本实际上就是 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的VFP程序。调用脚本时,系统会传入一个对象型的参数:FoxCode,这个参数包含了用户输入的及FoxCode表中相应记录中的许多有用的信息。脚本程序的第一句必须是:LParameters接受传入的参数。 ·FoxCode对象的属性(无方法) 与FoxCode表字段同名的属性,分别代表相应字段的内容,其他属性如下: 属性 说明 CursorLocaChar 执行脚本后,放在要选中文本内容前后的特殊字符。默认~ DefaultCase 缺省大小写,来自Type为V的记录的Case字段内容 FileName 编辑的文件名 FullName 当前输入的正行文本 Location 使用编辑器的类型:0 命令窗口,1 程序,8 菜单片段,10 代码片段,12 存储过程 UserTyped FullLine 用户输入的文本,不包括激活键、前导空格或Tab。可用FullLine代替。 ValueTip ValueType 档ValueType为”T”时的提示。 脚本处理方案:”L” 显示列表项,”V” 显示值,”T” 提示 这个属性一般需要在脚本中赋值,用户自定义的一般设置为”V” Icon 项目数组使用的图标 Items 用数组填充显示运行脚本的列表项,需要设置ValueType为”L” Items[1,1] 显示在列表中的文本,Items[1,2] 项目提示 ItemScript 使用项目数组的脚本 ItemSort 是否排序项目数组,默认为.T. MenuItem 设置ValueType为L,用户运行脚本是否选择了菜单项。 ParamNum 函数的参数个数 ·实例分析 实例中假定Type为U,Abbrev为要替换的关键字。U相当于C(命令),是用空格激活的。若是类的方法或函数,是用左括号激活的,那么必须用F,其余的和U相似。 ★直接替换,不用脚本 在Expanded中存放展开后的字符串即可(≤26) ★用单条记录实现 脚本程序直接存放在当前记录的Data字段中,在cmd中存放{}。如:关键词为DC,替换Define Class语句块的多行内容,最后,光标停留在”类名”的位置。 LParameters oFoxCode If oFoxCode.Location # 1 &&--如果不是程序窗口不变。 Return “” EndIf oFoxCode.ValueType=”V” &&--此行必须 Text To myVal NoShow Define Class ~类名~ As Session OlePublic Procedure Init() EndProc EndDefine EndText Return myVal ★单独定义脚本 若脚本程序有通用性,则可以把脚本写到单独的记录中,供其他项调用。 Type Abbrev Data Cmd 定义脚本 S 脚本名 脚本程序 空 调用脚本 U 关键词 数据 {脚本名} 实例: 关键词为SQ,IQ分别生成SQL的Select与Insert语句,字段名由脚本生成。若当前已有表打开,则使用当前表,否则提示打开表。 Type Abbrev cmd Data U SQ {fieldlist} Select <> From <> Where ~条件~ Into Cursor U IQ {fieldlist} Insert Into <>(<>)Values(~<>~) S fieldlist脚本程序: LParameters oFoxCode oFoxCode.ValueType=”V” If Empty(Dbf()) &&--没有打开表,则提示打开 Use ? EndIf AFields(ar) Fieldlist=ar(1,1) For i=2 To Alen(ar,1) Fieldlist=fieldlist+”,”+ar(I,1) Next dbfName=JustStem(dbf()) Return TextMerge(oFoxCode.Data) &&-- 直接替换Data中的两个变量的内容 注意:TextMerge()函数可以用变量的值一次性替换字符表达式<<>>中的变量。 设置:_VFP.EditorOptions属性: ”lq” 关闭成员列表与快速显示。”IQ” 打开成员列表与快速显示 【061】在VFP中与Word进行通信的相关语句 ·创建Word对象oWord oWord=CreateObject(“Word.Application”) ·打开指定的Word文件(例如:XXX.DOC) oWord.Documents.Open(“XXX.DOC”) ·获取文档中第一张表的行数、列数 行数: oWord.Documents(1).Tables(1).Rows.Count 列数: oWord.Documents(1).Tables(1).Columns.Count ·获取某单元格的文本 oWord.Documents(1).Tables(1).Cell(I,J).Range.Text 【062】TextBox的自动完成功能(Auto Completion) ·键盘、鼠标、笔在文本框中的触发动作方式 ★从文本框的下拉列表中选择项目后,会替换文本框中的整个内容。 ★第一次单击文本框,自动显示下拉列表。 ★如果键盘定位到列表框,则只有输入一个字符时,才显示下拉列表,空格键将触发整个列表。列表的大小(可见部分)在Option对话框的View选项卡中设置。 ★下拉列表第一次显示时,下拉列表的内容根据用户输入的内容筛选,若无匹配项,将隐藏下拉列表。按BackSpace或Delete键,下拉列表会根据匹配结果重新调整下拉列表的大小。(可以用↑↓PagUp PagDown键选择项目) ★按Enter或Tab键,下拉列表选中的内容会插入文本框中。若已经在文本框中输入空格,则会首先截掉这些前导空格。 ★档列表项被选定并插入到文本框时,将进行”自动完成”表更新: 新项目,将增加一条记录。表中已存在的项目,将更新Updated、Count和Data字段,并只存储文本的最近指定情况。 [注意]”自动完成”表不存在,将自动建立该表。 ★用户在具有文本的文本框中重新输入,将在下拉表中显示精确匹配的项目。 ★文本的显示和内容区分大小写。 ★下拉列表中的项目,可以从列表中删除。方法是列表打开时,选择要删除的列表项,按Delete键。 ·AutoComp表 默认表为:AutoComp.dbf,结构如下: 字段名 类型 说明 Source C(20) 自动完成控件的源名称 Data C(254) 在控件中显示的数据 Count I 项目被选择的次数 Weight I 用于用户自定义的字段 Created I 日期时间字段,时间戳(创建) Updated T 日期时间字段,时间戳(使用) User M 用户字段 ★”自动完成”表属性:AutoCompSource引用 1 表不存在,自动建立。存在则自动打开 2 若没有指定目录,则使用Home(7)位置保存该表。如果要控制用于所有程序的全局设置,可以使用属性_Screen.AutoCompSource指定一个表,但TextBox.AutoCompSource属性优先执行。 3 若TextBox.AutoCompSource属性为空,则检测 _Screen.AutoCompSource属性,并作为源表,若两者皆为空,则使用默认Home(7)位置和AutoComp.dbf表 4 运行时,可以动态设置AutoCompSource属性。 5 可以编程访问”自动完成”表。 6 “自动完成”表以共享方式打开。 7 指定表存在,但不能打开,文本框将不支持自动完成功能,不产生错误。 8 “自动完成”表按如下表达式索引: Source+Upper(Left(Data,30))+Pad(Count,8) ·相关属性 AutoCompTable “自动完成”表的名称和位置,存储用于文本框的数据[读写] 语法: TextBox.AutoCompTable[=StrValue] strValue 默认为: Home(7)+”AutoComp.dbf” 应用于: _Screen,TextBox AutoCompSource 在”自动完成”表中,查找数据的源表[读写] 语法:TextBox.AutoCompSource[=StrValue] 说明: 当词条在”自动完成”表中被创建或访问时,将使用一个主键(在Source字段中)。缺省,若没有指定表,则使用文本框的名称(如:Text1)作为主键 通过使用该属性,可以在应用程序中共享这些”自动完成”列表信息。例如,可能许多表单中都有一个Address字段,通过为每个显示Address字段的文本框设置AutoCompSource属性到类似myAddress的表,这样整个程序就可以重复使用这些相同的”自动完成”词条。 示例: AddressForm.AddressText1.AutoCompSource=”myAddress” AutoComplete 指定自动完成模式 语法: TextBox.AutoComplete[=Value] 0(默认) 不支持Auto 1 支持Auto 按字母排序 2支持Auto 常用排序 3支持Auto 最近排序 4支持Auto 按用户定义的Weight字段排序 【063】从指定表中返回指定字段值的函数结构 Function GetItem(vcAlias,vcFile,vcFilter,vcRetFld) Local oldAlias,leRet leRet=NULL oldAlias=OpenTable(vcAlias,vcFile) Locate For &vcFilter. IF Found() leRet=Evaluate(vcAlias+[.&vcRetFld]) EndIf SelOldAlias(oldAlias) Return leRet EndFunc 【064】TreeView控件简介 TreeView控件使用ImageList属性指定的ImageList控件保存在Node对象中使用的点位图和图表。其属性、方法等如下: ·属性 属性 说明 DropHighLight 返回/设置Node对象或ListItem对象引用 Indentation 返回/设置TreeView控件缩排的宽度。默认: 38 LabelEdit 返回/设置一个值,确定用户是否可以编辑TreeView控件中的Node对象。 LineStyle 返回/设置显示在两点Node对象之间的线风格。 0 树线---- 在兄弟节点和父节点之间显示线 1 根线---- 除了0的情况,还显示于根节点之间的线 Nodes 返回TreeView控件中Node对象集合的引用。 Nodes集合的属性和方法如下: 属性 说明 Count Nodes 集合中的节点数 Text 某个节点的文本信息 Key 某个节点的关键字 Children 某个节点的子节点数 Parent 返回对某个节点(非根节点)父节点的引用 方法 语法及说明 Clear 清除Nodes集合中的所有节点 Add 在Nodes集合中添加一个Node对象。 Object.Add(Relative,RelationShip, Key,Text,Image,SelectImage) Remove 从Nodes集合中移去一个节点。 PathSeparator 返回/设置FullPath属性返回的全路径中的分隔符。 SelectedItem 返回选中的ListItem,Node或Tab对象的引用。 Sorted 返回/设置一个值,该值确定Node对象的子节点是否按字符表的次序排列 Style 返回/设置TreeView控件中每个Node对象上显示的图形和文本类型。 值 说明 0 只有文本 1 图像和文本 2 加减号和文本 3 加减号、图像和文本 4 线和文本 5 线、图像和文本 6 线、加减号和文本 7 (缺省)线、加减号、图像和文本 CheckBoxes FullRowSelect Scroll 返回/设置是否显示滚动条 SingleSel 返回/设置项目选中时是否展开 HotTracking TabIndex Children 返回Node对象中子节点的数量 Child Node对象的第一个子节点 Tag Visible DragIcon DragMode CausesValidation MouseIcon TabStop HelpContextID Name Parent 返回/设置Node对象的父节点对象 Container WhatsThisHelpID ToolTipText OleDragMode OleDropMode Height Width Index 指定Nodes集合中的某一节点 Left ColumnHeaderIcons 返回/设置ImageList控件为 Top Object Appearance BorderStyle Enable Font HideSelection hWnd MosePointer ImageList SelectedImage 返回/设置与ImageList控件关联的ListImage对象的索引 Selected 返回/设置是否选择了Node对象 Root 返回选择的Node的根节点的引用 Previous 返回TreeView控件中Node节点的前一个兄弟节点的引用 Next Node节点的下一个兄弟节点的引用 LastSibling Node对象的最后一个兄弟对象 FullPath 返回TreeView控件中所引用Node对象的全路径 FirstSibling Node对象的第一个兄弟对象 ExpandedImage Node对象展开时显示ListImage对象 Expanded 确定Node对象是展开还是收缩 ·方法/事件 方法/事件 语法及说明 StartLabelEdit 使用户可以编辑标签 语法: Object.StartLabelEdit Add(Nodes集合) 给Nodes集合增加一个Node对象 语法: Object.Add(relative,relationship,key,text,image,selectedimage) 参数 说明 Relative 已存在的Node对象索引。若没有指定则放在顶级节点的最后位置。 Relationship Node对象的相对位置关系 0 第一个,1 最后一个,2 下一个(默认) 3 前一个,4 子节点 Key 使用Item方法检取Node对象的唯一字符串 Text Node对象中显示的文本 Image 与ImageList控件关联的图像所引 SelectedImage Node对象选中时,所显示的与ImageList控件关联的图像所引 AfterLabelEdit 语法: AfterLabelEdit(cancel As Integer,newstring As String) Cancel 整数,确定标签操作是否取消(非零时取消) Newstring 用户输入的字符串 BeforeLabelEdit 语法:BeforeLabelEdit(cancel As Integer) Collapse Node对象收缩时,产生该事件。 语法: Collapse(Byval node As Node) CreateDragImage 语法:CreateDragImage() EnsureVisible 语法:EnsureVisible() Expand Node可视时产生 语法: Expand(Byval node As Node) HitTest 语法:HitTest(x As Single,y As Single) NodeClick 语法:NodeClick(Byval node As Node) Node对象 Nodes集合 语法:TreeView.Nodes TreeView.Nodes.Item(index) 34
本文档为【VFP学习笔记2】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_988366
暂无简介~
格式:doc
大小:80KB
软件:Word
页数:36
分类:
上传时间:2018-09-11
浏览量:20