以下是VFP的,原理一樣吧
===========================================public lnWindowHandle
public lcODBCDriver
public lcODBCName
public lcODBCDesc
public lcODBCServer
public lcODBCDatabase
public lcUserName
public lcPassword
public lnHandlelnWindowHandle=0 
lcODBCDriver='SQL Server'       && DRIVER類型 
lcODBCName='MyDB'               && 數据源名字 
lcODBCDesc='Data Source'        && 數据源描述 
lcODBCServer='Shared'           && SQL SERVER名字 
lcODBCDatabase='MyDB'           && 要連接的數据庫名字 
lcUserName="sa"
lcPassword="76577865"===========================================================DECLARE INTEGER SQLConfigDataSource IN odbccp32 INTEGER, INTEGER, STRING, STRING 
*先修改已有的ODBC,如果不存在,返回0。 
lreturn=SQLConfigDataSource(lnWindowHandle, 2, lcODBCDriver, ; 
'DSN=' + lcODBCName + CHR(0) ; 
+ 'Description=' + lcODBCDesc + CHR(0) ; 
+ 'Server=' + lcODBCServer + CHR(0) ; 
+ 'Database=' + lcODBCDatabase + CHR(0)) 
if lreturn=0 &&不存在,添加新的ODBC 
   lreturn=SQLConfigDataSource(lnWindowHandle, 1, lcODBCDriver, ; 
           'DSN=' + lcODBCName + CHR(0) ; 
         + 'Description=' + lcODBCDesc + CHR(0) ; 
         + 'Server=' + lcODBCServer + CHR(0) ; 
         + 'Database=' + lcODBCDatabase + CHR(0)) 
   if lreturn==0 then
      MessageBox('服務器連接失敗,請檢查網路是否連通或SQL Server是否已啟動',16,'警告')
      return      
   endif 
endif
lnHandle=SQLConnect("&lcODBCName","&lcUserName","&lcPassword")
if lnHandle<=0 then
   MessageBox('服務器連接失敗,請檢查網路是否連通或SQL Server是否已啟動',16,'警告')
   return 
endif==================================================================*和服務器斷開連接
=SQLdisconnect(lnHandle)
*刪除ODBC數據源 
lreturn=SQLConfigDataSource(lnWindowHandle, ; 
2, lcODBCDriver, ; 
'DSN=' + lcODBCName + CHR(0) ; 
+ 'Description=' + lcODBCDesc + CHR(0) ; 
+ 'Server=' + lcODBCServer + CHR(0) ; 
+ 'Database=' + lcODBCDatabase + CHR(0)) 
if lreturn==1 
   *ODBC數據源存在,則刪除 
   lreturn=SQLConfigDataSource(lnWindowHandle,3, lcODBCDriver, ; 
           'DSN=' + lcODBCName + CHR(0) ; 
         + 'Description=' + lcODBCDesc + CHR(0) ; 
         + 'Server=' + lcODBCServer + CHR(0) ; 
         + 'Database=' + lcODBCDatabase + CHR(0)) 
endif

解决方案 »

  1.   

    Declare Integer SQLConfigDataSource In odbccp32 Integer, Integer, String, String
    **上面这句是调用WINDOWS 的API函数,VFP本身的函数创建不了数据源,应该调用WINDOWS的。
    lnWindowHandle=0  &&先给连接句柄定义一个值,为0。
    lcODBCDriver='SQL Server' &&DRIVER类型,当然选SQL Server
    lcODBCName='aaaaaa' &&要创建的数据源名字
    lcODBCDesc='aaaaaa' &&数据源描述,可有可无的东西。
    lcODBCServer='127.0.0.1' &&SQL SERVER名字----初始化中应该为变量,由用户从表单上输入,本模块的第一行即是接收这个参数的.
    lcODBCdatabase='' &&要连接的数据库名字。lreturn=SQLConfigDataSource(lnWindowHandle, 2, lcODBCDriver, ;
    'DSN=' + lcODBCName + CHR(0) ;
    + 'Description=' + lcODBCDesc + CHR(0) ;
    + 'Server=' + lcODBCServer + CHR(0);
    + 'Database=' + lcODBCdatabase + CHR(0)) &&检测是不是已经有ODBC数据源
    If lreturn=0 &&如果没有检测到ODBC数据源
    lreturn1=SQLConfigDataSource(lnWindowHandle, 1, lcODBCDriver, ;
    'DSN=' + lcODBCName + CHR(0) ;
    + 'Description=' + lcODBCDesc + CHR(0) ;
    + 'Server=' + lcODBCServer + CHR(0);
    + 'Database=' + lcODBCdatabase + CHR(0)) &&如果创建失败
        if lreturn1=0
            =Messagebox('添加ODBC数据源失败!',16,'提示') &&错误处理
        else
         =Messagebox('添加ODBC数据源成功!',72,'提示')
    endif
    Else
        =Messagebox('修改ODBC数据源成功!',72,'提示')
    Endif