Crear odbc con código vfp

Recuro a usted ya que necesito crear un ODBC desde Visual Fox Pro, hasta el Momento lo Pude realizar sin problemas. Lo que necesito y realmente no se como hacerlo es que cuando crea el ODBC lo haga con la Opción de Autentificación de Windows NT y no con la de SQL SEVER. Le Mando todo el Código así lo Puedes Probar.:
Local lcDriver,lcServer,lcDescription,;
lcDSN,lcDatabase,lcUID,lcPWD,;
SQLAuthentication
#Define ODBC_ADD_DSN 1
#Define ODBC_REMOVE_DSN 3
lcDriver = 'SQL Server'
lcServer = 'ST3\SQLEXPRESS'
lcDescription = "DNS para Sql"
lcDSN = "DSN_sql"
lcDatabase = ''
lcUID = ''
lcPWD = ''
SQLAuthentication = .f.
cAttribs = "SERVER="+ lcServer+ Chr(0)
cAttribs = cAttribs + "DESCRIPTION="+lcDescription+ Chr(0)
cAttribs = cAttribs + "DSN="+lcDSN + Chr(0)
cAttribs = cAttribs + "DATABASE="+lcDatabase+ Chr(0)
Declare Integer SQLConfigDataSource In odbccp32;
INTEGER hwndParent,;
INTEGER fRequest,;
STRING lpszDriver,;
STRING lpszAttributes
If SQLAuthentication
cAttribs = cAttribs + "UID="+lcUID+ Chr(0)
cAttribs = cAttribs + "PWD="+lcPWD+ Chr(0)
Endif
nReturnValue = SQLConfigDataSource(0, ODBC_ADD_DSN, LcDriver, cAttribs)
If nReturnValue = 1
Messagebox("DSN fue creado...",64,"DSN")
Else
Messagebox("Error creando DSN...", 64,"DSN")
Endif
Endfunc
Esto lo tengo creado en un .PRG y me funciona de Maravilla, lo único que no he podido configurar es lo que le Dije anteriormente del inicio como WIndows NT.

1 respuesta

Respuesta
1
Antes que nada te cuento que no estoy muy familiarizado con SQL Server, pero estuve revisando documentación y encontré algo. Hay un parámetro para enviar en la cadena de conexión que indica lo que estás necesitando (Trusted_connection).
En tu código, probá poner así:
If SQLAuthentication
    cAttribs = cAttribs + "UID="+lcUID+ Chr(0)
    cAttribs = cAttribs + "PWD="+lcPWD+ Chr(0)
else
    cAttribs = cAttribs + "Trusted_Connection=yes"+ Chr(0)
Endif
Acá hay una lista de palabras clave para conexiones ODBC de SQL Server.
Espero te haya podido ayudar. Suerte !
Muchas Gracias Maxisis! Me funcionó de maravilla! Te lo Agradezco...
Quisiera aprovechar y hacerte otra consulta.el pequeño Sistema que estoy haciendo consiste en un GRID que muestra las bases de datos creadas, de esas, tengo que elegir 3 o 4 bases para después generar consultas y comparativas. La primer pregunta es ¿Cómo harías tu para Realizar esas conexiones a las Bases? Yo tengo pensado y estoy intentándolo hacer de esta manera:
En el Grid donde me aparecen los Nombres de las Bases, le agregué otra columna y a esta misma columna le agregué un checkbox para que el usuario vaya marcando la base que quiere elegir. Acá me surge el primer Inconveniente... Te Muestro el Código:
PUBLIC db as String
X=SQLCONNECT("SQLSERVER")
thisform.grid1.RecordSource=""
SQLEXEC(X,"SELECT [name] FROM master.dbo.sysdatabases WHERE dbid >4","aa")
SELECT * FROM aa INTO CURSOR temp READWRITE
thisform.grid1.RecordSource="temp"
Con la Consulta consigo los nombres de las bases de datos, el problema es que cuando quiero tildar los checkbox de la columna 2 me dice que es solo escritura.por más que allá agregado el READWRITE como hice.
Espero que me Puedas aclarar
Antes que nada te pido que cualquier nueva consulta que necesites hacer la hagas por separado. O sea, cerrá y valorá una y abrí otra.
Por lo que veo en este caso, estás haciendo una consulta de VFP y armando un cursor del cursor que trajiste con SQLEXEC() y eso no tiene sentido. Está de más. El cursor que traés con SQLEXEC() ya es READWRITE.
Por lo que veo, en ese cursor, solo estás trayendo un campo (nombre), pero en tu grid decís que tenés 2 columnas, por lo que la 2º columna no está vinculada a ningún campo. Posiblemente te diga que es de solo lectura.
Probá hacer así:
X=SQLCONNECT("SQLSERVER")
thisform.grid1.RecordSource=""
SQLEXEC(X,"SELECT name, 0. as check FROM master.dbo.sysdatabases WHERE dbid >4","aa")
thisform.grid1.RecordSource="aa"

Fíjate que en la consulta agregué que te traiga un 0 como segundo campo y eso te va a asignar ese campo a la 2º columna. El check inicialmente estará desmarcado; si lo querés marcado por defecto, ponele 1 en lugar de 0.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas