主题:[讨论]看看是否还有人对vfp+sql2000的c/s系统有兴趣
agt澳
[专家分:840] 发布于 2009-12-20 08:58:00
[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]
最后更新于:2009-12-20 09:00:00
回复列表 (共45个回复)
11 楼
菜鸭 [专家分:5120] 发布于 2009-12-23 09:04:00
以前也尝试过
但写客户端太麻烦,如果要改客户端更麻烦了
后改用sqlserver+access的adp来做c/s系统(当然是一般简单应用)
这样客户端不用写了,只管服务器端就行了
12 楼
北京惬意 [专家分:1330] 发布于 2009-12-23 09:11:00
[quote]vfp在WIN7下已很难站的直了,看看有没有高手在做这方面的技术处理,否则不是万万岁,而是没岁了![/quote]
车到山前必有路,有路就有VFP。
13 楼
xinjie [专家分:630] 发布于 2009-12-23 16:22:00
对于 VFP9SP2 是否兼容 WIN7,可以在微软的官方网站下载 WIN7升级顾问,在安装有 VFP9SP2 的机器上运行运行后看看结果:)
SPT 方式下最讨厌的就是六楼所说的“表单在输入数据的同时,即时更新前台数据是SPT最难处理的!”。在不使用缓冲的情况下,使用第三方的 DLL 可以解决一部分问题。如果要彻底解决,还是使用 CA 吧。
14 楼
xinjie [专家分:630] 发布于 2009-12-23 16:24:00
补充:如果使用缓冲,也可以解决,但是,需要自行构建一套运行机制来适应这种解决方案。
15 楼
agt澳 [专家分:840] 发布于 2009-12-23 19:37:00
[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 楼
agt澳 [专家分:840] 发布于 2009-12-23 19:38:00
*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 楼
MW_BO [专家分:1160] 发布于 2009-12-25 12:20:00
期待中。。。
再跟!!!!!!!!
18 楼
hzc2 [专家分:390] 发布于 2009-12-25 20:25:00
谢谢楼主无私的奉献,是一个大大的好人。
19 楼
kosung [专家分:910] 发布于 2009-12-26 11:40:00
期待,先拿张板凳来坐着等,呵呵。
20 楼
agt澳 [专家分:840] 发布于 2009-12-28 17:08:00
[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]
我来回复