Database SQL Server

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

  ConDB.Properties("Prompt") = adPromptCompleteRequired   ' 3
  ConDB.Open ConnectionString

dove ConDB e l’oggetto ADODB.Connection

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.

Qualcuno mi pu aiutare?

Grazie tante a tutti!

Nedi

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?

Ciao Pietro, buona giornata.

Enter the database name field with your database name (example: to create database with the name ‘Testdb’) and click OK.

Nazim Ali, are we talking about the same thing?

Showbox is a movie streaming app, Vidmate is an app for downloading videos and music, Mobdro is a free video streaming app…

We are talking about Xojo, a programming language, and the way of connecting to Microsoft SQL Server.

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:

  1. adPromptAlways, Richiede sempre.
  2. adPromptComplete, Viene richiesto se sono necessarie ulteriori informazioni. Dovrebbe essere il DEFAULT
  3. adPromptCompleteRequired, Viene richiesto se sono necessarie ulteriori informazioni, ma non sono consentiti parametri facoltativi.
  4. 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

ex:
SqlStr = SqlStr + “;Database=” + DB_Name + “;UID=” + DB_User + “;Pwd=” + DB_Password + “;MARS_Connection=yes;” + “Prompt=4”

Non ho windows sottomano ne un ODBC ne un SQL Server ma col vecchio ADO si faceva cos.

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.

Allora io ho trovato questo:
https://docs.microsoft.com/it-it/sql/relational-databases/native-client/applications/using-connection-string-keywords-with-sql-server-native-client
Sono le propriet della stringa di connessione.
Io preferisco farla la finestra di dialogo, nel caso comunque averne due capisco che sia assai fastidioso.
Hai provato ad aggiungere: DriverCompletion=SQL_DRIVER_NOPROMPT? (Per non avere quella del driver ma gestirla lato app?)
Fammi sapere. Ciao

Grazie Michelangelo: oggi provo e ti dico qualcosa.

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!)

Grazie ancora, e buona giornata.

Se l’api non esposta un bel problema.
Potresti fare sempre una connessione con user e password errati in modo da aprire la finestra di SQL Server…

Potrebbe essere un’idea: adesso ci provo.

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…

Cavolo… non so che pesci prendere allora.

Dillo a me!!!
Grazie comunque della tua disponibilit!