Ciao a tutti, sto scrivendo un’applicazione, in ambiente Windows, che utilizza un database SQL Server.
Quando usavo ADO, per richiedere le credenziali di accesso al DB bastava impostare la propriet “Prompt” della connessione in questo modo
Non sono riuscito a fare la stessa cosa con Xojo (uso ODBCDatabase), per cui ho creato una piccola window con cui richiedere le credenziali: con tali credenziali tento di connettermi al Database, intercettando l’eventuale situazione di errore e comportandomi di conseguenza.
Ora mi succede che, se non indico la password, o ne indico una errata, mi viene visualizzato un messaggio di errore (e fin qui tutto regolare), dopo di che mi appare, come per incanto, il box di connessione a SQL Server, esattamente come mi succedeva con ADO.
Questo il codice che ho scritto
DB_User = txtUser.Text
DB_Password = txtPwd.Text
' ODBC (Native Client 10.0)
DB = New ODBCDatabase
Dim SqlStr As String ="Driver={SQL Server Native Client 10.0};Server=" + DB_Host
SqlStr = SqlStr + ";Database=" + DB_Name + ";UID=" + DB_User + ";Pwd=" + DB_Password + ";MARS_Connection=yes;"
SqlStr = SqlStr + "InitializationString=SET TRANSACTION ISOLATION LEVEL SERIALIZABLE"
DB.DataSource = SqlStr
DB.Host = DB_Host
DB.DatabaseName = DB_Name
DB.UserName = DB_User
DB.Password = DB_Password
If DB.Connect Then
Main.Show ' visualizzo window principale
LoginWindow.Close ' chiudo la window di login
LoginWindow.Hide
Else
MsgBox("Errore connessione al Database:" + db.ErrorMessage)
End If
A questo punto o riesco a usare il box nativo di connessione a SQL server, oppure utilizzo la mia window, per questo box non deve pi apparire.
Visto che stai iniziando lo sviluppo dell’applicazione, se l’obbiettivo lo sviluppo in ambiente Windows di un’applicazione connessa a MSSql Server, varrebbe la pena di dare un’occhiata al progetto tra gli esempi di Xojo, ovvero “…/Example Projects/Database/MSSQLServer/MSSQLServerExample.xojo_binary_project”.
Mostra come utilizzare il plugin nativo di Xojo per collegarti a MSSqlServer; un’interessante alternativa alla connessione ODBC.
Trovi la documentazione qui: microsoft-sql-server
Grazie Pietro, ma nella mia applicazione (che sto per finire) ero partito utilizzando il plugin MSSQLServer, ma poi sono stato costretto a passare ad ODBC perch il plugin mi procurava qualche problema (a suo tempo aprii un thread sull’argomento https://forum.xojo.com/45397-compilazione-64-bit). L’esempio da te riportato lo avevo gi studiato tempo fa: il collegamento al DB avviene impostando i parametri all’interno del codice, e non richiedendoli all’utente.
In ogni caso la mia domanda era: possibile ottenere il dialog box di connessione a SQL Server, cos come facevo con ADO? E come mai, se indico una password errata, mi appare questo maledetto box?
Quella del prompt una funzionalita del driver ODBC di Microsoft SQL Server.
Per toglierla dovresti accedere all’oggetto della propriet della connessione che per in xojo non mi pare mappato su nessuna api.
Dovresi fare una cosa tipo:
DB.Properties(“Prompt”) = 4
Le propriet sono:
adPromptAlways, Richiede sempre.
adPromptComplete, Viene richiesto se sono necessarie ulteriori informazioni. Dovrebbe essere il DEFAULT
adPromptCompleteRequired, Viene richiesto se sono necessarie ulteriori informazioni, ma non sono consentiti parametri facoltativi.
adPromptNever, Non richiede mai.
Ora non essendo esportata l’api prova ad aggiungere alla stringa di connessione una cosa del genere:
(una fra queste)
Prompt=DBPROMPT_NOPROMPT
oppure:
Prompt=NoPrompt
oppure:
Prompt=4
oppure:
Prompt=adPromptNever
O anche una cosa del genere:
SqlStr = SqlStr + “;Database=” + DB_Name + “;UID=” + DB_User + “;Pwd=” + DB_Password + “;MARS_Connection=yes;DriverCompletion=SQL_DRIVER_NOPROMPT;”
Grazie Michelangelo, ho gi provato ad aggiungere la stringa “Prompt=3” nella stringa di connessione, ma non funziona. Anch’io usavo ADO con VB6 ed era una propriet dell’oggetto Connection.
In Xojo non ho visto nulla del genere, ed anche le mie ricerche in Internet non hanno portato a nulla. Peccato, perch era molto comodo: avevo una finestra di login senza praticamente fare nulla.
Ciao Michelangelo, ho provato ad aggiungere “DriverCompletion=SQL_DRIVER_NOPROMPT” nella stringa di connessione, ma mi dice “Invalid connection string attribute”.
Ho fatto anch’io una finestra di login, ma il mio problema che se sbaglio la password mi appare quella di login di SQL Server.
Per quanto riguarda il documento di cui mi hai fornito il link, lo avevo gi visto, stampato e letto: non mi pare di aver visto qualcosa che abbia a che fare con il prompt di login.
Per il momento ho aggirato l’ostacolo usando il plugin MSSQLServer, che avevo abbandonato in precedenza per problemi con l’esecuzione del compilato (a 64 bit mi dava un errore dietro l’altro, senza nessuna logica). La versione compilata a 32 bit sembra pi stabile, ma non l’ho ancora testata a fondo.
Con ODBC invece non ho avuto nessun problema (ed in pi una soluzione cross-platform, il che non mi fa schifo!)
Non funziona, Michelangelo. Se imposto user e/o password errata mi d errore, ma non appare il famigerato login box di SQL Server. Il perch mi appare se uso una mia finestra di login (e sbaglio le credenziali) rimane un mistero…