conexion a base de datos SQL server

buenas todos (estoy interesado en migrar de vfp9 a xojo, tengo mi basedatos en SQL server)
estoy intentando entender la manera de xojo trabaja la base de datos, en VFP puedo conectar mi base de datos al inicio de mi aplicacion y utilizo esta conexion en todo mi sistema sin necesidad de reconectarme.

en xojo como opera esto.
1.- necesito conectar en cada ventana la base de datos o conecto al inicio y heredo la conexion a las demas ventanas.
2.- creo una clase conexion como en C# y la activo en cada ventana

por favor un buen link de lectura se lo agradeceria, en epanol o ingles
si algun ejemplo sensillo a mi correo jdcamilor@hotmail.com (una ventana principal con dos ventanitas )

1 Like

Puede conectarse al inicio, y colocar el objeto db como una propiedad pública de la App, así cualquier ventana tiene acceso a la db en cualquier momento, recuerde que c puede perder la conexión y debe implementar una forma de re-conectarse, con .Connect.

Esa es otra estrategia, puede probar las dos, si su conexión es local y es MUY estable, lo mejor es conectarse al principio y manejar el error durante la App.

pues está la documentación y los ejemplos, yo alguna vez di soporte pero instale la localdb y funciona bien, el único inconveniente es establecer el codificación para los campos string, xojo por defecto usa utf8 y MSSQL utiliza Unicode por defecto y localizado.

Hola Jose Camilo
Te conectas al inicio y heredas la conexion en las ventanas
Bueno complementando a lo expuesto por Bernardo
Te comento, yo trabajo normalmente con Mysql Server, pero pude realizar unas consultas de tablas en SQL Server 2005 cuando lo necesitaba.

Para acceder a Ms SQL Server desde Xojo, es requisito que tenga el SQL Server Native Client por lo menos en su versin 11.0, porque versiones anteriores es como que no lo reconoce,me llevo un poco de tiempo en determinar el problema que se me presentaba y no lo reconoca a pesar que tenia instalado el SQL Server Native client pero en verision anterior al 11.0

Si deseas llevando la estructura de la aplicacion EEDesktop le echas un vistazo si lo requieres (C:\Program Files (x86)\Xojo\Xojo 2016r2.1\Example Projects\Sample Applications\EddiesElectronics)

Realizas lo siguiente:
Seleccionas App y desde el Menu- Insert- Folder, una vez insertado le cambias el nombre a DATABASE o el nombre mas apropiado para ti
Seleccionas la carpeta insertada y desde el Menu-Insert-Class, una vez insertado le cambias el nombre como puede ser classDBSqlServer u otro nombre mas apropiado
en SUPER seleccionas MSSQLServerDatabase

En App creas una propiedad con nombre digamos pDB y de tipo classDBSqlserver

a classDBSqlServer le adiconas un Shared Method (Metodo compartido) que le das un nombre como este: SetupNuevaBD con return de tipo boolean

y dentro del metodo SetupNuevaBD
defines tu codigo que puede ser:

Dim conectado As Boolean
App.pDb = New classDBSqlServer
App.pDb.Host=“MiHost”
App.pDb.UserName = “sa”
App.pDb.Password = “tupassword”
App.pDb.DatabaseName = “basededatos”
If App.pDb.Connect Then
conectado= True
MsgBox(“Conexion Satisfactoria a SQL Server”)
Else
conectado = False
MsgBox("Error al conectar a Motor Sql Server "+ App.pDb.ErrorMessage)
End If
Return conectado

a ClassDBSqlServer le adicionas los metodos que quieras y uno de ellos pueden ser ProcesaCons con parameters de entrada: sql As string y return type RecordSet, y el cdigo puede ser el siguiente:

'ProcesaCons realiza Select de cualquier tipo
Dim stmt As PreparedSQLStatement
stmt=Self.Prepare(sql)
Dim rs As RecordSet =stmt.SQLSelect
If Self.Error Then
MsgBox “Error: No se pudo relizar la consulta”
End If
return rs

En App agregas el evento (Event Handlers) open si no lo tienes agregado
y el codigo puede ser el siguiente:

If app.pdb.SetupNuevaBD then
contrasea.ShowModal
Else
Quit
End If

y un Pushbutton en el evento action en una ventana puedes poner el siguiente cdigo para probar una consulta

Dim sql as string=“SELECT codigo,nombre FROM nombres”
Dim rs As RecordSet=app.pDb.ProcesaCons(sql)
if rs.RecordCount > 0 Then
MsgBox "nombre "+rs.Field(“nombre”).StringValue
End If

Ojala esto te sirva de algo

Cordialmente,

Raul