ODBC con SQLConfigDataSource

Flavio
22 de Abril del 2010
Estoy necesitando crear una Origen de datos ODBC con SQLConfigDataSource desde FoxPro.


El problema es que le quiero indicar cuando debe utilizar el protocolo TCP/IP o cuando Canalización por nombre (named Pipes)

Hago lo siguiente


DECLARE INTEGER SQLConfigDataSource IN odbccp32;
INTEGER hwndParent,;
INTEGER fRequest,;
STRING lpszDriver,;
STRING lpszAttributes


ldsn=ALLTRIM(thisform.Pageframe1.Page1.descripcion.Value)

lUser=ALLTRIM(thisform.Pageframe1.Page2.txtuser.Value)

lPassword=ALLTRIM(thisform.Pageframe1.Page2.txtpass.Value)

lBase=ALLTRIM(thisform.Pageframe1.Page3.CmbBaseSel.Value)

lserver=ALLTRIM(thisform.Pageframe1.Page1.cmbServer.Value)

llenguaje='spanish'

lAutenWinNt=thisform.Pageframe1.Page2.chkSegWinNT.Value

lProtocolo="Network="+IIF(thisform.Pageframe1.Page3._optiongroup1.Value=1,'dbnmpntw','dbmssocn')+ Chr(0)



#DEFINE ODBC_ADD_DSN 1

#DEFINE ODBC_REMOVE_DSN 3

LOCAL lcDriver ,lcAttribs



*** Remueve el DSN anterior

lcDriver = "SQL Server"

lcAttribs = "DSN="+ALLTRIM(ldsn) + Chr(0)

nReturnValue = SQLConfigDataSource(0, ODBC_REMOVE_DSN, lcDriver, lcAttribs)



*** Crea el DSN

lcDriver = "SQL Server"

lcAttribs = "SERVER="+ALLTRIM(lserver)+ Chr(0)

lcAttribs = lcAttribs + "DESCRIPTION=Sistema de Gestion" + Chr(0)

lcAttribs = lcAttribs + "DSN="+ALLTRIM(ldsn) + Chr(0)

IF !Empty(llenguaje)

lcAttribs = lcAttribs +"Language="+ALLTRIM(llenguaje)+Chr(0)

ENDIF

lcAttribs = lcAttribs +lProtocolo



lcAttribs = lcAttribs +"DATABASE="+ALLTRIM(lBase) + Chr(0)



IF lAutenWinNt

lcAttribs = lcAttribs +"Trusted_Connection=Yes" + Chr(0)

ENDIF

nReturnValue = SQLConfigDataSource(0, ODBC_ADD_DSN, lcDriver, lcAttribs)

If nReturnValue = 1

Messagebox("System created",64,"SUCCESS")

Else

Messagebox("System creation failed",64,"ERROR")

ENDIF



El problema es que NO me da error, crea el origen de datos, pero queda como TCP/IP y no por Named Pipes cuando se lo indico..