| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1915 人关注过本帖
标题:用vfp的数据库自动生成CursorAdapter类代码
只看楼主 加入收藏
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
用vfp的数据库自动生成CursorAdapter类代码
第一次发贴,将我以前做的一个程序贴上来,不知道对大家是否有用,反正对我有用处,我经常在用。
CursorAdapter类无论是用vfp自带的生成器,还是自己写代码,都非常麻烦,并且,如果修改了数据库中的表,又得改写代码。所以,我就写了个根据数据库自动生成CursorAdapter类的代码。现奖代码贴在下面。
使用说明:参数为vfp数据库名称如:。
程序代码:
****使用方法:dbctoca("chaoshi"),chaoshi是vfp数据库的名字,即这个数据库为chaoshi.dbc
FUNCTION dbctoca(dbcname)
CLOSE DATABASES
OPEN DATABASE &dbcname EXCLUSIVE
DIMENSION gatables(1)
createc=""
gatables=''
m=ADBOBJECTS(gatables, "TABLE")
IF NOT EMPTY(m)
    FOR i=1 TO m
        USE gatables(i) EXCLUSIVE
        SELECT gatables(i)
        ziduan=AFIELDS(arrayname)
        createc=createc+[PUBLIC CursorOb]+gatables(i)+CHR(13)
        createc=createc+[CursorOb]+gatables(i)+[=createobject("CursorAdapter") ]+CHR(13)
        createc=createc+[with CursorOb]+gatables(i)+CHR(13)
        createc=createc+[.Alias ="]+[Cursor]+gatables(i)+["]+CHR(13)
        createc=createc+[.DataSourceType ="Native"]+CHR(13)
        createc=createc+[.DataSource ="]+dbcname+["]+CHR(13)
        createc=createc+[.SelectCmd = "select * from ]+gatables(i)+["]+CHR(13)
        createc=createc+[.KeyFieldList = "]+arrayname(1,1)+["]+CHR(13)
        createc=createc+[.cursorschema="]
        upfieldlist=[TmpList1=""]+CHR(13)
        upnamelist=[TmpList2=""]+CHR(13)
        FOR i2=1 TO ziduan
            createc=createc+arrayname(i2,1)+SPACE(1)+arrayname(i2,2)+SPACE(1)
            upfieldlist=upfieldlist+[TmpList1=TmpList1+"]+arrayname(i2,1)+[,"]+CHR(13)
            upnamelist=upnamelist+[TmpList2=TmpList2+"]+arrayname(i2,1)+SPACE(1)+gatables(i)+[.]+arrayname(i2,1)+[,"]+CHR(13)
            IF AT(arrayname(i2,2),[CNFQV])>0
                createc=createc+[(]+ALLTRIM(STR(arrayname(i2,3)))+SPACE(1)
                IF EMPTY(arrayname(i2,4))=.F.
                    createc=createc+ALLTRIM(STR(arrayname(i2,3)))
                ENDIF
                createc=createc+[)]
            ENDIF
            createc=createc+[,]
        ENDFOR
        createc=LEFT(createc,LEN(createc)-1)+["]++CHR(13)
        upfieldlist=LEFT(upfieldlist,LEN(upfieldlist)-3)+["]+CHR(13)
        upnamelist=LEFT(upnamelist,LEN(upnamelist)-3)+["]+CHR(13)
        createc=createc+[.Tables ="]+gatables(i)+["]+CHR(13)
        createc=createc+upfieldlist
        createc=createc+[.UpdatableFieldList = TmpList1]+CHR(13)
        createc=createc+upnamelist
        createc=createc+[.UpdateNameList=TmpList2]+CHR(13)
        createc=createc+[.CursorFill()]+CHR(13)
        createc=createc+[.cursorrefresh]+CHR(13)
        createc=createc+[ENDWITH]+CHR(13)
        USE
    ENDFOR
ENDIF
=STRTOFILE(createc,"cca.prg")&&输出到程序文件中。
CLOSE DATABASES
ENDFUNC
收到的鲜花
  • tlliqi2012-11-14 17:51 送鲜花  10朵   附言:原创内容
搜索更多相关主题的帖子: 生成器 数据库 
2012-11-14 17:17
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:7 
不晓得怎么用
举个例说说
2012-11-14 17:51
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
可以自动根据dbc数据库生成CursorAdapter类的关键的几个属性,其中SelectCmd属性自动生成为“select * from 某表”,然后将此类定义成Public变量后,就可以在程序到处引用Alias属性所指出的临时表“cursor某表”了。语言表达能力不强,还是没说清楚。虽然我没说清楚,你没有弄懂,你还是评分了,谢谢你的评分。

坚持学习vfp,QQ:306805680
2012-11-14 19:49
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
以下是引用月沐庭轩在2012-11-14 19:49:35的发言:

可以自动根据dbc数据库生成CursorAdapter类的关键的几个属性,其中SelectCmd属性自动生成为“select * from 某表”,然后将此类定义成Public变量后,就可以在程序到处引用Alias属性所指出的临时表“cursor某表”了。语言表达能力不强,还是没说清楚。虽然我没说清楚,你没有弄懂,你还是评分了,谢谢你的评分。
不晓得才向你学习
2012-11-14 20:06
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
具体实例:
dbctoca.rar (5.56 KB)

上传个例子吧,生成的cca.prg,在命令窗口执行后,可以在调试器的局部窗口里看到各个定义的类和类的属性,
图片附件: 游客没有浏览图片的权限,请 登录注册

然后可以在命令窗口或程序中引用ca临时表的值,比方:curxitong.isguanji等来引用数据库chaoshi里的表xitong所生成的ca临时表curxitong的字段isguanji的值

坚持学习vfp,QQ:306805680
2012-11-14 20:38
晴非得雨
Rank: 2
等 级:论坛游民
帖 子:14
专家分:45
注 册:2012-10-9
收藏
得分:7 
学习类的好例子,很好
2012-11-14 21:00
Kerberos
Rank: 5Rank: 5
来 自:江苏扬州
等 级:职业侠客
帖 子:227
专家分:355
注 册:2012-9-11
收藏
得分:7 
这个很好!

想学好VFP,想做VFP高手,想帮助更多的人解决VFP问题!
2012-11-15 10:35
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
引起的共鸣少呀,看来通用性不强。

坚持学习vfp,QQ:306805680
2012-11-15 19:41
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
今天有空,把你的代码细细品了一道,感觉很有启发,特来致谢!

前面有朋友说不知道咋用,我来说一下我的理解。不对的地方请指教。
这个程序的用法,简单的说,就是如果我们需要用CursorAdapter方式 来操纵DBC库(比如这个库叫做Chaoshi.dbc)的话,
(当然,如果你还用不上CursorAdapter方式 来操纵数据,这个方式你可以无视,),传统的方法,我们得自己定义这个CursorAdapter,
自己写CursorAdapter的各种属性很繁琐,很累人,还容易出错。而楼主的程序运行完毕后,会生成一个cca.prg ,
这个生成的PRG中,已经把CursorAdapter的属性定义好了,就像给Chaoshi.dbc“量身定制”的一样,然后,我们运行这个cca.prg
,内存中就有现成的对象型公共变量Cursorob表名 可用了,他的CursorRefresh、fill等方法都是现成的,可以直接调用。
这个想法确实不错!

如果能开发针对SQL数据库的就更好了,因为我们现在都迁移到SQL为后台的数据库中了,这个是大势所趋,
当然,我自己也在琢磨中,但是没有楼主研究得那么透彻。
2017-02-16 17:17
abc238361
Rank: 1
等 级:新手上路
威 望:1
帖 子:19
专家分:0
注 册:2021-3-14
收藏
得分:0 
2021-03-27 10:42
快速回复:用vfp的数据库自动生成CursorAdapter类代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023984 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved