




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 当我们在程序中用修改数据库的时候,只要不用commit切程序在运行,我们此时是查看不到数据库中当前操作的数据的,只有commit后,或退出该程序时,才能在数据库中查看到修改后的数据。a) 这是因为修改数据的时候是先有一个缓冲区,此时还没有修改到实际的数据,多以此时没用commit,而用rollback的时候,对缓冲区的修改代码将不被执行;此时就是起到出错数据回滚的操作b) 但是,当我们修改了数据没用到commit的时候,而是直接退出程序,此时数据库缓冲区中的修改代码也会被执行,也就是说,只要不用rollback,推车程序时数据也会被更改。c) 所以,当我们某个地方会出错需要数据回滚时,就
2、要在那里进行rollback操作。2. 在数据窗口对象里设置显示值和实际值时,要注意:当输出文档时任然使用的是实际值,显示值值是看的,没有实际意义。1 在我们第一次装PDM时,装数据库的时候数据库是没有程序的内部用户的,所以一般是建一个空数据库,然后进行初始化,这样数据库就有了2个用户了,然后再将有数据的数据库还原上去,但此时该数据库也是没有用户的,就要给它授权,即映射,此时执行Grant的代码就是映射授权。a) 所以,当没有系统用户时,执行Grant是没有用的。1. 我们在pb中,事件是可以继承的,方法是不能继承的:a) 如果子对象中的该方法写了新代码,则调用时是执行新写的代码,如果子对象该
3、方法中什么也没写,则会调用父对象的该方法b) 所以,可见继承是可以先执行父的再执行子的,方法是不行的c) 这个就叫做多态1.因为标题名字是字段名字加_t,所以,在自定义字段时,设置字段名时不要有“_”.1. 一定要注意补丁包升级和数据库升级,补丁包升级是将我们的程序进行升级,而数据库升级是对数据库进行修改操作的升级。a) 二者不是一回事,都要进行操作。b) 我们要区分数据库版本和程序版本,两者要对应才能正常运行。2. 我们调试时用的动态库为PB 文件夹下的动态库,程序运行时用的是Bin目录下的动态库,程序安装时用的也是Bin目录下的动态库,所以要清楚不同环境下的运行要求。3. 修改数据窗口对象
4、的查询语句时,先剪切再添加,这样更能反映到当前PB中来。4. 在我们触发事件打开窗口的时候,一定要注意打开窗口和当前窗口的关系,如果他们是继承关系,则会报错的!5. 在写SQL语句时注意where 1=1 的用法,我们开始就把这个写在一个变量中,当要增加条件时就直接加在后面。从而不用担心where出现的位置问题。在PB写代码时,不同的目标可以引用对方的库,所以我们编译时,先编译功能小的库,再编译功能齐全的库。为什么呢?比如:我们目标1调用目标2的库1,在库1中调用了许多目标1中的其他库的对象,在编译时就会将这些联系都写在库1.pbd文件中,当编译目标2时也会重新生成库1.pbd,由于在目标2中
5、没有库1中调用其他库的对象,因为目标2只是用到了库1中很小的一部分对象,这时编译并不会报错,所以重新生成的.pbd文件是不全的(一般发生在多个程序集成在一起的情况)。所以,我们只能先编译功能小的目标,再编译功能大的目标。防止相同库先后编译发生覆盖的错误。1. 记住,在分析代码的时候,要分功能模块来看,不要整体的来分析,那样会很复杂而且不容易想清楚,很容易乱。a) 分析每一小块的代码,知道他的作用和关联;最后将每个块联系起来串一边,就能晓得当前脚本的功能了。b) 有时候不一定要分析某个函数它内部是怎么操作的,只需要晓得它的返回结果,这样的函数就不用费劲的去分析代码了。2. 在我们的程序中是有版本
6、的,当定义好了程序中的版本后,就要进行数据库升级,这个升级就会将版本信息存放到数据库中,只有程序的版本和数据库的版本一致时,才可以登录系统。3. PB写的代码调试是要依赖与环境的,所以,当调试出问题时,就要把一些支持调试的.DLL文件拷贝到PB的安装目录下面去。a) 注意考入的.dll文件要和当前版本的程序相匹配,因为不同版本的程序里的.DLL文件是不一样的。4. 要注意区分程序运行的代码和程序安装的代码,两者是有区别的。5. 我们要注意本地数据源的连接,不是创建了数据源就可以能连的上去,同时也要为数据源指定数据库文件。否则找不到数据。6. 我们在使用对象的各种类型变量时,一定要注意值的滞留问
7、题,如有这种情况,则要在开头或结尾将其进行清空。a) Eg:当有一个数组il_partid 时,开始我们循环找到了2个值,放在il_partid1, il_partid2里面,完成了满足条件的查询。b) 但是当我们下一次检索时,只找到一个满足条件的值,放在了il_partid1里,此时我们查询时,则会出错,出现2个满足条件的值,因为我们值改变了il_partid1,但是il_partid2上次查询结果的值仍然保留在,故会出错。c) 所以,我们在每次执行代码前就要清空:il_partid = ll_emptd) 这样就避免了出错。7. 我们要清楚事件的触发和函数的调用,当我们不好用某个动作来触发
8、某个自定义的事件代码时,我们可以将该事件放在另一个事件的结尾用trigger 或post 来触发自定义事件。a) 事件其实就是代码!8. 注意:在我们用if 判断的时候,如果用= 是表示判断,不是赋值,而用函数返回值判断时,是要执行该函数再判断的,所以,不要搞混了,要清楚什么时候执行,什么时候表示判断。9. Modify基本可以修改数据窗口中所有的属性项。10. 我们要修改某对象的源时,可以将其Export 导出源码,然后我们就杂源码的定义部分修改对象的属性。要知道,我们对源直接修改就是修改对象的 本身属性。11. any 要想知道Any类型变量中保存数据的类型,可以使用函数ClassName
9、()12. 我们要连接多个数据库时,第一个数据库算是默认的,所以在我们用游标或select语句时都不用using sqlca; 不用就算是默认的。a) 所以,当用多个数据库时,检索数据的时候就要在查询的地方放用using语句,不然它算是连接到了默认的数据库,则会出错。b) 不管用哪个数据库都是要定义好数据源的,同时在代码中声明连接,这样才能得到数据。(声明:sqlca.odbc=;sqlca.code;)c) 在应用对象中声明的是数据源参数的链接,因为数据源和数据库之间的关系在创建数据源的时候一般会定义好的。d) 所以链接数据库,可看做2个部分,一个是创建数据源,再个是链接数据源。13. 我们
10、用自定义的数据窗口对象时,选择的是外部数据源,此时在画板界面上,是先定义字段的属性,再增加字段的。1. 要分清PB中对象和类的区别:a) 一般我们将windowmenutreeviewitem 等就是“类”,专门作为一种数据类型来定义该类型的实例。b) 而我们继承是在原类的基础上创建一个新类。c) New是创建新对象,不同与继承。14. 我们的PDM的代码包CODE一般包含2个文件夹:a) Inte_pbr文件夹:里面存放的是程序运行时需要的所有图片,但是加载图片进去还不够,它里面还有一个配置文件(INTEMAN.PBR;INTEPDM.PBR等),将每个图片的路径信息都写在了里面,只有这样程
11、序才能完全找到使用。b) 这个文件夹要安装到C盘下面,这是程序指定的路径。c) 因为在代码中的编译对象中包含了这2个文件夹的路径,所以当编译完成后生成的.pbd文件就包含了2部分的内容。d) 当没编译只是运行代码时,这个包就要放在指定路径下了,不然运行时图片都不会显示出来。15. 另外一个就是我们代码的安装包了。1. 当你创建一个工作目标(.pbt)后,它会自动创建一个应用库(.pbl),我们创建和操作的对象就放在这个应用库下面。2. 层次结构:工作空间目标应用库(多个)对象(多个)目标(多个)3. 一般一个工作目标就是一个应用程序,就是说同一个目标下不同应用库中的对象是可以互相访问的。4.
12、同一目标下的不同库中的对象可以相同。5. 不管是同一目标还是不同目标或是不同的库中,我们都可以将有用的对象拷贝到指定的库中。6. 且一个工作目标里面只有一个应用库中有且只能有一个(应用对象)。7. 我们创建的全局变量,它是在整个目标(程序)中是有效的。8. 应用对象的属性一般具有全局性,所以要慎重设置。9. 我们在PB系统树中创建的对象可以看做是一个实例对象,直接拿出去用,也可以看做一个类,用它来创建新的对象,新的对象将有原对象的所有属性和事件、方法。10. 不同对象中的控件名可以相同,不同库中的对象名字可以相同,不同目标的库名也是可以相同的。11. 但是,在一个目标中,不要将库名中的对象名取
13、一样的,这样会出错,因为同一目标下的对象是可以相互访问的。1. 在应用对象中设置事务对象的连接属性,与在DBprifile中添加DB是没有关联的。2. 当Return属于某个脚本时,就退出该脚本的运行,当它是某个脚本函数的代码时,则返回到调用该函数的位置。3. 我们要清楚每个函数在各种情况下的用法。它是与控件连一起用的还是单独可以用的,最好根据函数的功能和意思来分辨。4. 我们要把形参当作实际的值来看待。5. 一定要注意每个函数的功能,以及他们之间的内在联系:a) 例如:getfilesavename()i. 它是打开一个准备要保存的文件路径对话框,它返回路径名和文件名,除此之外不做其他的操作
14、。b) 又如oleobject的saveas():i. 它是将文件保存到一个指定路径,当这个路径和getfilename()的路径不相符时或没有传递时,它就会报错而不能保存。c) 又如PB中的saveas()i. 它不关前面的getfilesavename(),它的功能就是打开保存对话框,保存到指定位置进行保存。1. 我们所用的对象其实就是一堆视图化的代码,当我们想要改变某个对象的属性或内容时,可以直接编辑他们的源代码:Edit source.2. 当我们在定义函数时,规定了返回类型,则它会要求你返回一种类型。所以,如果不想返回值,则在定义的时候在返回值上填(none)1 我们用户定义事件其实
15、分2种情况:a) 通过事件ID 调用windows已经存在的事件。此时各项参数都是设置好的,只需要设置名字。b) 将事件ID设置为(none),此时我们就可以自己设置事件的各项参数了,此时可以说才是真正的用户事件。2 在pb中触发事件有2种方法:a) 通过我们手动的操作,来触发相应的事件。b) 通过TriggerEvent()或者Postevent()来触发。i. Object.TriggerEvent(clicked!)是立即触发用户指定的事件,在继续调用下面的事件,属于同步调用。ii. Object.Postevent(clicked!)是将用户指定的事件放置到指定控件事件队伍中的末尾,等
16、所有的事件都完毕后再执行该指定事件,属于异步调用事件。iii. Object.triggerevent(ue_delete)当执行的是用户自定义的事件时,则要加上引号,而不是以感叹号结尾。c) dw_department.event trigger ue_delete()d) w_main_frame.event post ue_paint()i. 这是CB控件clicked事件的一段脚本。ii. 可见,ue_delete()是dw_department对象的事件,现在是放在CB的clicked事件中去触发dw_department对象的ue_delete()事件。iii. 可见,事件是属于对
17、象的,所以前面要加限制。1. 他们通过ODBC连接的数据源时,在PB中是通过事务对象连接的ODBC的数据源,而在我们配置数据源时就定义好了要连接的数据库。2. 我们在PB 中对数据进行的修改操作基本都是对缓冲区进行的。3. 我们要区别缓冲区的数据和数据窗口显示的数据,大多情况缓冲区会直接反应到数据窗口上,但要注意区分开来。4. 在pb中建的DBfile文件数据库,并不是使我们开发的应用与数据源连接,但是它将数据库直接反应到PB中来了,我们可以直接在这里对数据库进行操作,而不用跑去修改本身的数据库。5. 记住,我们用事务对象连接的是数据源,DBfile是数据库的显示。6. 所以,我们通过对DBf
18、ile的修改来直接对数据库进行修改。7. 我们连接一个DBfile只是可以对其进行操作,同时也必须要连,因为我们处理数据时要进行语法效验,如果不连的话在保存时会报错。8. 因为在我们没有运行代码时,代码中连接数据库的代码根本就没有执行,故没有连到数据库中,所以,进行语法效验时是根据DBfile中连接的数据库进行效验的。所以,以后每次都要连上DBfile文件。1. 我们创建数据窗口对象时,会有标题名和内容名,内容名就是我们数据库表的字段名字,而标题名一般是表的字段名字加上“_t”,但是这是对象的名字,我们还要给标题的每个对象设置文本内容。2. 别把对象的名字和存在的内容搞混了 !1. 用游标读取
19、数据时,读取一行就要用sqlcode进行检查一边:a) 当为0时,这成功读取了当前的一条数据b) 当为-1时,读取错误c) 当为100时,则表示都读取完了 2. 当使用游标和存储过程时,十分注意commit和rollback的使用,因为他们将关闭两者的使用。3. 只要是对象,一般都是可以继承的 。4. 菜单的工具栏只能显示在MDI窗口中。5. 我们的全路径是目录文件名。6. 所以目录是没有“”的。1. fileopen()a) 以指定的方式打开指定的(存在或不存在)文件,可读或可写b) 返回句柄i. Fileopen(filepath,streammode!,write!,lockwrite!
20、,replace!)此时表示,如果该路径文件已经存在,那么就覆盖该文件。2. 此时一定要注意:a) 当是以写的方式打开(write!)时,它一定会重新创建一个空文件,如果路径已经存在,且有replace!,那么该空文件就会覆盖指定文件。b) 如果路径不存在,那么就会创建新的指定空文件。c) 当是以读的方式打开时,它不会创建新的文件,而是让你指定要打开的文件。d) 当lockwrite!时,你可以看该文件e) 当lockread!时,你就不能看该文件了OleObjectWord=Create OLEObjectli_Ret = OleObjectWord.ConnectToObject(,wor
21、d.application)IF li_Ret 0 THENli_Ret = OleObjectWord.ConnectToNewObject(word.application) /没有打开则新建if li_Ret 0 thenMessageBox(OLE错误,OLE无法连接,错误ID: + string(li_Ret)+可能是Word安装不正确!)end ifend ifOleObjectWord.Documents.Add()此时,上面值是连接了操作的对象。只有当OleObjectWord.Documents.Add()时才会打开一个新的文件。此时它就会成为当前活动对象。1. OleObj
22、ectWord.ConnectToObject(实例路径,指定的服务器应用程序)a) 也就是说:实例路径,就是你要操作的文件全路径b) 服务器应用程序,就是支持文件的应用程序。2. 当我们没有实例路径时,它会对当前活动对象进行操作3. 当有实例路径时,它就对指定路径的文件进行操作。4. OleObjectWord.ConnectTonewObject(指定的服务器应用程序)1. 创建新的对象并连接到该对象上。此时就要注意了,它创建的应用对象是空的,也就是说它里面连空白都没有。此时就要用OleObjectWord.Documents.Add()来增加操作空间。1. Saveas()既可用OLE对
23、象,也可用于数据窗口对象2者的用法不一样,具体情况具体分析。用于数据窗口对象时,可以保存数据也可以保存统计图。1. 我们可以直接给一个表的字段定义主键,但是给表定义外键时,同时也要指出是对应的哪个表的主键。2. 先找主键,在去联系它的外键。3. 我们在调用外部函数前对其声明时,记住:一个声明要写成一行。function int FileExpand (string InputFile, string OutputFile) library intedll.dll (一行)subroutine FillMany (int serial_no, ref string password) libra
24、ry intedll.dll (一行)1. 我们的事件一般都是定义好的,当触发该事件的时候,就执行该事件中的脚本,我们是在脚本中写代码,调用函数。2. 当是继承对象后,它里面的事件和函数都会继承过去,且不可修改,当继续加代码时,它会先执行原有的代码,再执行新写的代码。1. ifkeydown(keyenter!) thenif this.text=thenreturnelseuo_ok .setfocus()uo_ok.triggerevent(clicked!)end ifend if可见,触发的按键以!来区分要出发事件时,也是用 事件名+!1. 响应式窗口一般是提示且必须执行完才会继续执行
25、的窗口,所以,当它的事件执行完时,我们在代码结尾用close()来关掉它。2. 要知道各种值的保存时间:a) 实例变量:当实例对象关闭时,变量下次重置b) 全局变量:当程序结束下次再开时重置。3. 注意事件的触发条件,如果不满足就给它加代码加以限制。4. if isnull(ls_newcode) or trim(ls_newcode)= or trim(lower(ls_newcode)=null then ls_newcode=a) 注意判断为空的几种情况。b) Null要加引号用。1. 注意用户对象的使用:a) 例如标准可视用户对象,它其实就是一个控件,但是我们使用它的时候它会在窗口界面
26、创建属于该对象的控件,而不是对象本身。所以,千万注意对象名和你创建的对象控件名字。b) 要理解这样就可以重复使用了。2. 注意可视对象和不可视对象引用的方法:1. getitemstring()、getitemnumber()a) 它是得到数据窗口中(主缓冲区)某项的数据,注意类型2. Setitem()a) 它是给数据窗口中(主缓冲区)的某项赋值,针对的是缓冲区的。类型为Any类型。3. Settext()a) 它是给浮动数据窗口赋值,而不反应到缓冲区里。其值要与所在列类型相兼容。4. 当用setitem()赋值后,要反应到浮动数据窗口中,这要移动焦点或在代码中调用Accepttext()函
27、数。5. Accepttext()是将漂浮在数据窗口中的内容放到缓冲区里去。(必须通过有效验证。)a) 注意它的用法,当焦点从漂浮数据窗口中的一项移到另一项时,系统自动会将漂浮状态的数据反应到缓冲区。b) 但是,当焦点从当前漂浮数据窗口移到其他控件时,则漂浮数据是不会反应到缓冲区的,所以,我们一般在数据窗口的Losefocus()事件中用到此函数。c) 记住:设置焦点一般是以对象为单位的。d) 不要在Itemchanged或ItemError event中编写Acceptext()函数,因为Acceptext()函数有可能驱动ITPUB个人空间yI9FI3n6. ItemChanged或Ite
28、mError event,这将造成死循环的出现.2iWm2j6o,Rt#mm0GetText():读取编辑控件的文字.7. String(date,fomate)a) 将数据以指定格式转换成字符串。b) String(ll_id,00)i. If ll_id=1,return ll_id则ll_id=018. insertrow()a) dw_1.insertrow(0)它是在最后一行后再插入一行。b) dw_1.insertrow(row)是插入到第row行,就是在第row行前面再插入一行,也就变成了第row行了。c) 返回值是行号。9. 注意对象的继承层次:a) 当dw_2继承dw_1后,
29、就有了它的所有事件和属性,而且,我们可以对dw_2中的事件和属性继续修改。b) 当dw_3继承了dw_2后,dw_3就有了dw_2和dw_1所有的事件和属性,此时用到dw_3时就会出现层次性,看见不同层次时的对象代码。c) 我们创建了的用户对象,将它丢到窗口中用时,其实就是一种继承,继承过来的对象就有原对象的所有事件和属性。继承后的对象就是一个新的对象了。1. 数据窗口对象类型:Grid时,它的列排列顺序是不能改的。2. environment le_env 环境对象getentironment(le_env) 用这个函数,应用程序能够得到当前运行的操作系统、使用的CPU类型、操作系统的版本、
30、屏幕的大小和颜色数等信息。成功返回1.3. profilestring(文件名(包含路径),section,key,default)a) section:指定要得到值所在的节。b) key:指定要得到值的名称 (理解值的名称,其实就是包含某个值的变量名)c) default:指定的文件、节名、项目不存在时,函数返回该参数指定的值。d) 成功返回指定的key值,错误返回default的默认值。e) 就是:文件名,节名,值名,默认值4. grouser = create u_userif Not IsValid ( guo_user ) thenhalt closereturnend if可见,我
31、们在创建用户对象时,最好是判断它是否创建成功,很容易找到错误。1. getapplication()a) 得到当前应用对象的句柄,通过句柄来查询或修改应用对象的属性。b) Application app 先定义一个应用的变量App=getapplication()App.toolbartips=falsec) 也可以直接:getapplication.toolbartips=falsed) 可知,应用对象中修改工具栏属性和修改字体属性可以影响到全局窗口风格。1. this.hide()iuo_timer = create u_timerguo_ge.uf_get_toolbar_profile
32、(w_main_frame, this)PostEvent(ue_open)注意这段代码,这的窗口w_main_frame中open()事件的一段脚本。A. 其中,this就是代表了窗口w_main_frame,但是一定要注意参数传递的数据类型,同时也要注意引号的恰当使用:(“”)。B. W_main_frame本身代表了窗口,但是给它加上引号后,那么它传递的就不是一个窗口数据类型了,我们知道窗口本身就是一种数据类型,而不是一个字符串。只有this传递的才是一个窗口。C. 所以,一定要注意参数的类型和引号的使用。以及它本身代表了什么意思。a) 如:as_window_name=”w_main_
33、frame”b) 我们可以this.text=1c) 也可以 w_main_frame.text=1d) 但就是不能as_window_name.text=1e) 因为as_window_name它是一个字符串类型,而不是对象类型。f) 所以,在使用数据或类型时,一定要注意类型的匹配。D. Datawindowchild 是子数据窗口对象,也是一种数据类型。1. opensheetwithparm(对象1,string,对象2,位置,放置方式)a) 对象1:要打开工作表的窗口对象。Eg:w_main_child 没有引号b) String: 不定,会将这个值保存到消息对象的Message.st
34、ringparm中。c) 对象2:主窗口d) 位置:就是将打开工作表的标题放到倒数第二个菜单中,作为选项。e) 放置方式:打开工作表放置主窗口的位置。2. 传递的数据就只有3类型:a) 数值类型Message.DoubleParmb) PowerObject(比如结构) Message.PowerObjectParmc) 字符串类型Message.StringParm3. 传递的参数就保存在Message的这3个属性中,在子窗口中就可以将传递过来的数据保存下来。1. 当我们定义函数时,在选择传递参数的类型时,注意传递参数的返回值,当是值传递时,他们是互不影响的。2. 当是reference 时
35、,则表示是地址传递,他们的值是相互影响的。他们的变量名不一样,但是他们的值是一样的 。且相互影响。3. 注意:我们在代码中用到的字段名子,是数据窗口对象内容的标题名字,而不是标题的名字,更不是标题内容的名字。4. 动态SQL语句:ls_sqlsyn_id = select pv_objid from dm_psetvalue_ + string ( ll_psetid ) + & where pv_code like+trim(ls_cucode)+ AND + (pv_objid+string(ll_partid)+)PREPARE SQLSA FROM :ls_sqlsyn_id;DECL
36、ARE lcr_cur_idDYNAMIC CURSOR FOR SQLSA;OPEN DYNAMIC lcr_cur_idUSING DESCRIPTOR SQLSA ;do while truefetch lcr_cur_id INTO :ll_partid;if sqlca.sqlcode = 0 thenll_cnt_id +ll_idll_cnt_id = ll_partidelseif sqlca.sqlcode = 100 thenexitelseguo_ge.uf_warn_db_error()close lcr_cur_id ;returnend ifloopclose lc
37、r_cur_id ;一定要注意类型,当是string时则拿出来直接写,当不是string时,则强制转换后拿出来直接写。1. 我们定义的用户对象可以包含属性,事件,函数:用户对象的属性,其实就是它定义的实例变量。2. 我们不用返回数据closewithreturn()函数,它会出现不可知的问题,我们一般在它的某个事件中用Close()将它关闭,同时在的close()事件中用:a) Message.powerobjectparm=powerobject 来传出数据。b) 同时一般将数据类型定义成实例类型,这样就可以在不同对象中使用了。3. 我们用openwithparm()函数时,一定要注意打开窗
38、口的类型,当打开的是response!相应式窗口时,则它一定会执行完openwithparm()函数的所有事件和代码才会继续执行下去。4. 而打开的窗口是其他类型的窗口时,则会在打开窗口的同时喜剧执行下面的代码,所以要注意窗口的类型和代码执行的时间。5. 在我们脚本中定义数组的时候,不要将同类型的数组名和变量名写成相同的。6. 我们用distinct时,一般只对查询的第一字段使用,其他的都不需要。select distinct code,name,partid from tb_gygck+ & where code like + % + ls_code_name + % or name lik
39、e + % + ls_code_name +%1. 我们一定注意值为空(null)的情况,当一个null值的变量取判断条件是否成立时,它都会满足条件的。:a) Setnull(code) code0 或者 code= + string(ld_begindate,yyyy-mm-dd) + and ctsq_createtime = + string(ld_enddate,yyyy-mm-dd) + ) +”and user_id=” string(llong_id) + “and uer_name=” + ls_name2. 从上面就要看出,这个select的动态语句,本身就是string类型
40、的,所以不管是上面变量,都要现变为string类型才能写入,其次,表的字段名字是没有修饰的,而且类型任意,所以,而此时字段的类型就要和变量的类型一致,因为开始的string的操作值是为将其能够写入这个string类型的语句中,而在后台操作时,它就是一条实际的查询语句,类型就要匹配3. 所以,其实这是2个层次的类型匹配:a) 一个是语句的string类型的匹配b) 一个是字段属性的匹配。1. datawindowchildldw_child2. dw_data.getchild(cllx ,ldw_child) “cllx”是指定子数据窗口所在的列。ldw_child.settrans( sql
41、ca)ldw_child.retrieve( ) 事先就检索出来。注意,getchild()得到的是数据窗口对象的引用。此时,就要注意,当我们在主数据窗口中引用子数据窗口时,不管主的是不是有sql语句:1) 要注意,在子数据列上能否自动检索到数据有2中办法:a) 在数据窗口对象Edit画板中有Autoretrieve选项,够上后就能自动检索到数据,但是前提是它与事务对象连接了,因为这个选项只是起到检索的作用。b) 可以利用上述2. 中的getchild得到子的引用,再进行连接并检索。c) 此时如果主的与事务对象slqca 相连,则子数据窗口不用与事务对象相连也能显示出数据。d) 如果主的没有与
42、事务对象相连,但是子数据窗口与事务对象相连了,则也会显示出数据。3. 注意: 当我们建的数据窗口对象是没有sql语句时,则我们不用使其对应的数据窗口与事务对象相连,因为与事务对象相连就是能检索到数据,能检索到数据就是因为有select的sql语句,本身就没有sql语句,那么用事务对象也没用,此时,我们有几种办法给其赋值:i. 一般在脚本中用setitem()给其赋值。ii. 利用下啦数据框或下拉列表来赋值。iii. 有数据窗口对象时,则动态建sql 查询条件语句用:dw_result.setsqlselect(select)iv. 没有数据窗口对象时,则先建数据窗口对象(源),再建sql查询条
43、件。4. 我们知道,数据窗口对象本身是源,但是功能就象一条sql语句,当数据库连接好后,在数据窗口对象画板中就能看到这条slq语句查询出来的数据了,但是当其与数据窗口联合使用时,要想显示数据就必须使相应的数据窗口与事务相连,然后再retrieve()。5. 当我们使用动态的sql语句时,即dw_result.setsqlselect(select)时,就是为了数据窗口分配了查询条件,只要数据窗口对象相应的字段属性匹配,就可以检索出相应的值。6. 但是,我们设置的动态sql只能设置where的条件,即检索出相应条件的数据条件,而不能改变每个字段本身的属性,因为字段本身的属性是数据窗口对象创建时
44、源的 代码定义的,我们所建立的动态sql语句只是查询条件。7. 我们可以理解为,当没有给数据窗口分配数据窗口对象时,我们动态的分配查询语句给它,是不够的,因为没有显示数据的载体,此时首先给他动态的创建数据窗口对象的源(实质就是创建一个没有sql查询条件的数据窗口对象),其次再给它建sql查询条件,即dw_result.setsqlselect(select),这时就相当与给它动态的分配了数据窗口对象,此时数据窗口连接事务对象再用retrieve()就可以检索到相应的数据。8. 同时,我们要注意,再动态建立sql语句时,如果有了数据窗口对象,我们只会建立好where条件,但是如果没有数据窗口对象
45、时,我们建立的sql 查询语句就要根数据窗口对象的源代码相对应。也就是说:源中有name字段,sql语句中也要有name字段,如果没有,则都没有。9. 因此,我们得到一个结论,动态的创建数据窗口对象时一般没有创建sql查询条件,然后再创建sql查询条件才能完整的显示出数据。10. 我们也可以在创建源时同时创建sql查询条件,就象在new创建数据窗口对象时同时创建。11. 我们最好是将所有的主数据窗口与事务对象相连。避免子数据窗口没有显示出数据的情况。12. 为什么加载到列的子数据窗口对象能显示出数据,而不用检索,那是因为在属性页面上点击了Autoretrieve。 13. 我们一定要注意数据窗口对象的名字问题:i. 标题名
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海洋可再生能源利用装备考核试卷
- 染整行业品牌建设考核试卷
- 畜禽养殖环境监测与调控考核试卷
- 广东省六校联盟深圳实验广州二中珠海一中惠州一中东莞中学2025届学业水平考试数学试题模拟卷(十四)
- 健身器材制造业消费者行为研究与产品设计创新策略考核试卷
- 橡胶复合材料研发考核试卷
- 洗浴服务行业线上营销策略考核试卷
- 真空电子器件制造综合应用考核试卷
- 全球及中国机场照明市场发展格局与投资前景动态研究报告2025-2030年
- 行政文员培训课程
- 2024年农艺师考试实务考核试题及答案
- 纵隔恶性肿瘤护理查房
- 人教鄂教版科学五年级下册第一单元 昼夜与四季单元教学教案
- 山东省烟台市芝罘区(五四制)2022-2023学年七年级下学期期中考试英语试题及答案
- 2024年贵州省交通运输厅所属事业单位招聘考试真题
- 2024年福建泉州交发集团招聘考试真题
- 2024-2025学年人教版数学八年级下册期中检测卷(含答案)
- 江苏省南京市联合体2023-2024学年七年级下学期期中英语试卷
- (正式版)JBT 14449-2024 起重机械焊接工艺评定
- 突发性聋诊疗指南
- FURUNO电子海图完整题库(最新整理)
评论
0/150
提交评论