回 帖 发 新 帖 刷新版面

主题:[讨论]看看是否还有人对vfp+sql2000的c/s系统有兴趣

[color=0000FF]根据yangjie008
手把手教你学vfp+sql2000的c/s系统吧!改编[/color][size=3]
一、基本准备
1、安装MSDE(免费普及版)或SQL-Server2000等授权版;
简介MSDE 
    所谓MSDE,是英文Microsoft SQL Server Desktop  Engine(微软SQL-Server数据引擎)的缩写,是微软发布的大型数据库SQL-Server的免费普及版

系统要求
支持的操作系统: Windows 2000; Windows 98; Windows ME; Windows NT; Windows Server 2003; Windows XP
166 MHz 或更快的 Intel Pentium 或兼容处理器
建议:一般在这里学vfp+sql2000的c/s系统用户,对vfp相对sql2000较熟练,所以一般采用vfp编程,所以用sql2000较少,建议安装MSDE(免费普及版)下载方便,无版权问题。
数据库MSDE下载(先到微软网站下载数据库MSDE)
http://www.microsoft.com/downloads/details.aspx?FamilyID=413744d1-a0bc-479f-bafa-e4b278eb9147&DisplayLang=zh-cn

2、安装VFP9。
3、会做一点vfp单机版的项目。

二、准备实施
今天就到这里,看看是否还有人对vfp+sql2000的c/s系统有兴趣?如有就继续写。[/size]

回复列表 (共45个回复)

11 楼

以前也尝试过
但写客户端太麻烦,如果要改客户端更麻烦了
后改用sqlserver+access的adp来做c/s系统(当然是一般简单应用)
这样客户端不用写了,只管服务器端就行了

12 楼

[quote]vfp在WIN7下已很难站的直了,看看有没有高手在做这方面的技术处理,否则不是万万岁,而是没岁了![/quote]
车到山前必有路,有路就有VFP。

13 楼

对于 VFP9SP2 是否兼容 WIN7,可以在微软的官方网站下载 WIN7升级顾问,在安装有 VFP9SP2 的机器上运行运行后看看结果:)

SPT 方式下最讨厌的就是六楼所说的“表单在输入数据的同时,即时更新前台数据是SPT最难处理的!”。在不使用缓冲的情况下,使用第三方的 DLL 可以解决一部分问题。如果要彻底解决,还是使用 CA 吧。

14 楼

补充:如果使用缓冲,也可以解决,但是,需要自行构建一套运行机制来适应这种解决方案。

15 楼


[url=http://e.ys168.com/?agt]通过vfp命令做与SQL数据源的连接的表单原程序下载[/url]


安装SQL-SERVER,或者MSDE后
就可以通过vfp命令做与SQL数据源的连接了。

我根据张洪举的书的例子稍加改动,三个命令控件,做与SQL数据源的连接了。

*1、验证连接(\<V)控件,Click属性:
*SQLSTRINGCONNECT([lShared] | [cConnectString [, lSharable]])
*用连接串建立和数据源的连接。

LOCAL nConnHandle

IF Thisform.Combo1.Value#"无可用服务器" AND !EMPTY(Thisform.Text1.Value)
    **连接到服务器
    nConnHandle=SQLSTRINGCONNECT(;  
        "Driver=SQL Server;"+;
        "Server="+Thisform.Combo1.Value+";"+;
        "UID="+ALLTRIM(Thisform.Text2.Value)+";"+;
        "PWD="+ALLTRIM(Thisform.Text3.Value)+";"+;
        "Database="+ALLTRIM(Thisform.Text1.Value))
        
    IF nConnHandle>0
        =MESSAGEBOX("连接成功!")
        =SQLDISCONNECT(nConnHandle)
    ELSE 
        =MESSAGEBOX("连接失败")
    ENDIF 
ENDIF             



*2、建立ODBC数据源(\<D) 控件,Click属性:
*!*    PARAMETERS pszDSN,cDatabase,cServer,cSaCode


#DEFINE   ODBC_Add_DSN      1
#DEFINE   ODBC_Config_DSN   2
#DEFINE   ODBC_Remove_DSN   3
*!*    使用API建立ODBC数据源DSN:'MySQLmaster',SQL Server本地服务器:'(local)'、数据库:MASTER、用户:SA、口令:AGT
*!*    DO program1.prg with 'MySQLMaster','Master','(local)','agt'
*!*     pszDSN,cDatabase,cServer,cSaCode
pszDSN=ThisForm.Text4.value
cDatabase=ThisForm.Text1.value
cServer=ThisForm.Combo1.value
cSaCode=ThisForm.Text3.value

DECLARE Integer SQLConfigDataSource IN odbccp32 ;
    Integer hwndParent,;
    Integer fRequest,;
    String lpszDriver,;
    String lpszAttributes
*!*    set step on
clos all
hwndParent=NULL
lpszDriver="SQL Server"
if varTYPE(pszDSN)='C' and varTYPE(cDatabase)='C' and varTYPE(cServer)='C' and varTYPE(cSaCode)='C'
    lpszDSN=pszDSN
    LcDatabase=cDatabase
    LcServer=cServer
    LcSaCode=cSaCode
else
    messagebox('    要求四个字符型参数,'+chr(13)+chr(13)+;
    '现参数名称、类型如下: '+chr(13)+chr(13)+;
    '1.DSN:         '+varTYPE(pszDSN)+chr(13)+chr(13)+;
    '2.Database:    '+varTYPE(cDatabase)+chr(13)+chr(13)+;
    '3.Server:      '+varTYPE(cServer)+chr(13)+chr(13)+;
    '4.SaCode:      '+varTYPE(cSaCode)+chr(13)+chr(13)+;
    '请重新执行,并附准确的四个字符型参数。',0+64,"提示")

    retu 
endif
ThisForm.Caption='SQL本地服务器:'+LcServer+'、数据库:'+;
LcDatabase+'、用户:'+ThisForm.Text2.value+'、口令:'+LcSaCode
LcDSN=lpszDSN

*!*    lpszAttributes="Server=alpen2"+CHR(0)+
lpszAttributes="Server="+LcServer+CHR(0)+;
               "Description=连接到SQL Server数据库"+LcDatabase+CHR(0)+;
               "DSN="+LcDSN+CHR(0)+;
               "Database="+LcDatabase
nReturn=SQLConfigDataSource(0,ODBC_Config_DSN,lpszDriver,lpszAttributes) 

IF nReturn=0        &&配置失败表示该数据源不存在,所以建立数据源
    nReturn=SQLConfigDataSource(0,ODBC_Add_DSN,lpszDriver,lpszAttributes)
    IF nReturn=0
        =MESSAGEBOX("该数据源"+lpszDSN+"已存在,请移除此数据源!",0+64,"提示")
    ELSE 
        lnHandle=SQLConnect(LcDSN,"sa",LcSaCode)  &&连接到数据库

        if lnHandle>0
            =MESSAGEBOX("连接到数据库成功!",0+64,"提示")
        else
            =MESSAGEBOX("连接到数据库失败!",0+64,"提示")
            retu
        endif
        lnHandleA=SQLEXEC(lnHandle,"exec sp_addlogin 'agt', 'Login_agt'")   &&创建新登录Login_agt
        if lnHandleA>0
            =MESSAGEBOX("创建新登录Login_agt成功!",0+64,"提示")
        else
            =MESSAGEBOX("创建新登录Login_agt失败!",0+64,"提示")
            endif
        lnHandleA=SQLEXEC(lnHandle,"exec sp_helpuser")  &&读取登录用户数据
        if lnHandleA>0
            =MESSAGEBOX("读取登录用户数据成功!",0+64,"提示")
            BROWSE
        else
            =MESSAGEBOX("读取登录用户数据失败!",0+64,"提示")
        endif
        lnHandleA=SQLEXEC(lnHandle,"exec sp_adduser @loginame = 'agt',@name_in_db = 'agt',@grpname = 'db_owner' ")  &&创建新agt用户登录
        if lnHandleA>0
            =MESSAGEBOX("创建新agt用户登录成功!",0+64,"提示")
            BROWSE
        else
            =MESSAGEBOX("创建新agt用户登录失败!",0+64,"提示")
        endif
    ENDIF 
else
        &&配置成功表示该数据源已存在,所以不能重复建立数据源
        =MESSAGEBOX("该数据源"+lpszDSN+"已存在,不能重复建立数据源!",0+64,"提示")

ENDIF 
CLEAR DLLS 

Retu

16 楼



*3、删除ODBC数据源(\<N)


#DEFINE   ODBC_Add_DSN      1
#DEFINE   ODBC_Config_DSN   2
#DEFINE   ODBC_Remove_DSN   3
*!*    使用API建立ODBC数据源DSN:'MySQLmaster',SQL Server本地服务器:'(local)'、数据库:MASTER、用户:SA、口令:AGT
*!*    DO "f:\vfp-示例代码\示例代码\示例代码\97\program1.prg" with 'MySQLMaster','Master','(local)','agt'
*!*     pszDSN,cDatabase,cServer,cSaCode
pszDSN=ThisForm.Text4.value
cDatabase=ThisForm.Text1.value
cServer=ThisForm.Combo1.value
cSaCode=ThisForm.Text3.value

DECLARE Integer SQLConfigDataSource IN odbccp32 ;
    Integer hwndParent,;
    Integer fRequest,;
    String lpszDriver,;
    String lpszAttributes
clos all
hwndParent=NULL
lpszDriver="SQL Server"
if varTYPE(pszDSN)='C' and varTYPE(cDatabase)='C' and varTYPE(cServer)='C' and varTYPE(cSaCode)='C'
    lpszDSN=pszDSN
    LcDatabase=cDatabase
    LcServer=cServer
    LcSaCode=cSaCode
else
    messagebox('    要求四个字符型参数,'+chr(13)+chr(13)+;
    '现参数名称、类型如下: '+chr(13)+chr(13)+;
    '1.DSN:         '+varTYPE(pszDSN)+chr(13)+chr(13)+;
    '2.Database:    '+varTYPE(cDatabase)+chr(13)+chr(13)+;
    '3.Server:      '+varTYPE(cServer)+chr(13)+chr(13)+;
    '4.SaCode:      '+varTYPE(cSaCode)+chr(13)+chr(13)+;
    '请重新执行,并附准确的四个字符型参数。',0+64,"提示")

    retu 
endif
ThisForm.Caption='SQL本地服务器:'+LcServer+'、数据库:'+;
LcDatabase+'、用户:'+ThisForm.Text2.value+'、口令:'+LcSaCode

LcDSN=lpszDSN

*!*    lpszAttributes="Server=alpen2"+CHR(0)+
lpszAttributes="Server="+LcServer+CHR(0)+;
               "Description=连接到SQL Server数据库"+LcDatabase+CHR(0)+;
               "DSN="+LcDSN+CHR(0)+;
               "Database="+LcDatabase
nReturn=SQLConfigDataSource(0,ODBC_Config_DSN,lpszDriver,lpszAttributes) 

IF nReturn=0        &&配置失败表示该数据源不存在,所以建立数据源
     =MESSAGEBOX("该数据源"+lpszDSN+"不存在,不需要移除数据源!",0+64,"提示")
else
    &&配置成功表示该数据源已存在,可以移除数据源
    DECLARE Integer SQLRemoveDSNFromIni IN odbccp32 String lpszDSN
*!*        lpszDSN="MySQLServerPubs2"
    nReturn=SQLRemoveDSNFromIni(lpszDSN)
    IF nReturn=1
        =MESSAGEBOX("成功移除了"+lpszDSN+"数据源!",0+64,"提示")
        retu
    ELSE 
        =MESSAGEBOX("移除数据源失败!",0+64,"提示")    
        retu
    ENDIF     


ENDIF 
CLEAR DLLS 

ret

如有关注,则继续.

17 楼

期待中。。。
再跟!!!!!!!!

18 楼

谢谢楼主无私的奉献,是一个大大的好人。

19 楼

期待,先拿张板凳来坐着等,呵呵。

20 楼

[size=3][color=0000FF]通过vfp命令创建SQL库存数据库及相关数据表1[/color]
*!*    eg:  DO "S-servers" with 'MySQLMaster','Master','(local)','agt'
PARAMETERS pszDSN,cDatabase,cServer,cSaCode
clos all
LOCAL nConnHandle
*!*    set step on
*!*     pszDSN,cDatabase,cServer,cSaCode


hwndParent=NULL
lpszDriver="SQL Server"
IF varTYPE(pszDSN)='C' and varTYPE(cDatabase)='C' and varTYPE(cServer)='C' and varTYPE(cSaCode)='C'
    lpszDSN=pszDSN
    LcDatabase=cDatabase
    LcServer=cServer
    LcSaCode=cSaCode

    **连接到服务器
    nConnHandle=SQLSTRINGCONNECT("Driver="+lpszDriver+";"+;
        "Server="+LcServer+";"+;
        "UID="+'sa'+";"+;
        "PWD="+LcSaCode+";"+;
        "Database="+LcDatabase)

    IF nConnHandle>0
        =MESSAGEBOX("连接成功!"+chr(13)+chr(13)+;
        '现参数代码、名称如下: '+chr(13)+chr(13)+;
        '1.DSN:         '+allt(pszDSN)+chr(13)+chr(13)+;
        '2.Database:    '+allt(cDatabase)+chr(13)+chr(13)+;
        '3.Server:      '+allt(cServer)+chr(13)+chr(13)+;
        '4.SaCode:      '+allt(cSaCode)+chr(13)+chr(13);
        ,0+64,"提示")
        
        if SQLEXEC(nConnHandle, 'sp_helplogins')>0 &&提供有关每个数据库中的登录及相关用户的信息。
            disp all
        endif
        
        if SQLEXEC(nConnHandle, 'sp_helpserver')>0 &&服务器的信息
            disp all
        endif
        
        if SQLEXEC(nConnHandle, 'sp_helpuser')>0 &&报告当前数据库中用户、Microsoft Windows NT? 用户和数据库角色的信息。
            disp all
        endif
        
        if SQLEXEC(nConnHandle, 'sp_databases')>0  &&列出驻留在实例中的数据库或可以通过数据库网关访问的数据库。
            disp all
        endif

        *!*    创建库存数据库名称:stock
        *!*    数据库初始大小;文件大小自动增长,增长限制为为默认
        *!*    数据库日志文件大小;文件大小自动增长,增长限制为默认
        SQLEXEC(nConnHandle,"CREATE DATABASE stock;
        ON PRIMARY ;
            ( NAME = stock _db_file,;
                  FILENAME = ' D:\database \ stock _db.mdf');
        LOG ON ;
            ( NAME = stock _db_log_file,;
              FILENAME = ' D:\database \ stock _db_log.ldf')")

        ?SQLEXEC(nConnHandle,"USE STOCK")
        [/size]

我来回复

您尚未登录,请登录后再回复。点此登录或注册