| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1915 人关注过本帖
标题:用vfp的数据库自动生成CursorAdapter类代码
取消只看楼主 加入收藏
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
用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
月沐庭轩
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
月沐庭轩
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: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
引起的共鸣少呀,看来通用性不强。

坚持学习vfp,QQ:306805680
2012-11-15 19:41
快速回复:用vfp的数据库自动生成CursorAdapter类代码
数据加载中...
 
   



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

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