ciao, mi succede una cosa strana, nel fare import da file csv se il campo vuoto, in sql server viene sostituito con strani caratteri tipo
|,@,#,’, ecc creandomi non pochi problemi
in un caso, al posto del telefono (nel file csv spazio) ho trovato una intera frase tipo x:15overflow…
ma che succede???
ps in mysql non lo fa.
sql2008r2express
Ti consiglio di verificare come carichi dati su sqlserver (query, parametri se usi i prepared statement, definizione dei campi per vedere se i tipi corrispondono e cos via)
uso dei prepared statement leggendo i valori da un csv i cui campi sono divisi da punto e virgola,
il fatto strano che su mysql si comporta bene (ma ho problemi ad installarlo sul cliente perch mi d errore su utente odbc, problematica nota in windows) mentre in sql che mette proprio frasi “inventate” in caso di valore vuoto
a questo punto metter delle if in caso di campo vuoto inserir " "
ps esiste in xojo una istruzione tipo NVL o una if a riga singola…???
si esiste una funzione con tre argomenti, il primo un booleano e in base a questo restituisce il secondo (se vero) o il terzo argomento:
dim s as string=if(totale>0, “Maggiore”, “Non maggiore”)
dim i as integer=if (codice.left(1)=“M”, 1, 2)
e cos via
Per mySql hai impostato gli utenti ?
ho l’utente root con cui accedo ad es. in mysql workbench, provato a creare anche utente odbc con password vuota ma niente…
il messaggio mi apparre non appena da browser apro la mia app:
Connection error:Access denied for user ‘ODBC’@‘localhost’ (using password: NO)
e la tua app si collega a mysql con l’utente?
… o una qualsiasi app … prova con una desktop e verifica l’errore che ti viene segnalato
In genere non buona cosa usare l’utente root. Crea un utente specifico e assegnali i permessi per il db
invece, se utilizzo sql server installato sulla stessa macchina dove gira l’app
cosa metto nel parametro host della connessione: l’indirizzo ip, il nome della istanza? seguito dalla porta?
perch se ho sql su altro pc in rete si collega, sullo stesso pc no
Per creare gli utenti
http://dev.mysql.com/doc/refman/5.7/en/adding-users.html
La porta la indichi nei parametri di collegamento del plugin mySql
Devi indicare un utente esistente e con i privilegi corretti per il db
ciao Antonio,
ho provato a portare su sql server 2008r2 la mia app, tralasciando per il momento mysql.
come al solito, da me funziona tutto bene, dal cliente (sullo stesso pc dove mysql d problemi) si collega al database (sql server) ma non riesce ad eseguire le query (non torna alcun recordset, da me si)
ho un prepared statement, questo ad esempio quello del login che fallisce sempre, ovviamente con user e password giusti:
Dim ps As MSSQLServerPreparedStatement
Dim rs As RecordSet
ok_login="N"
// DOBBIAMO VERIFICARE LE CREDENZIALI DEGLI UTENTI WEB EMAIL + CODICE CLIENTE
// VERIFICHIAMO I DATI INSERITI
ps = db.Prepare("Select IdCli from clienti where Email= ?")
ps.BindType(0, MSSQLServerPreparedStatement.MSSQLSERVER_TYPE_STRING)
ps.Bind(0, TxtUser.Text.Trim)
// VERIFICHIAMO I DATI INSERITI
rs = ps.SQLSelect
if rs <> Nil Then
While Not rs.EOF
IF rs.IdxField(1).StringValue.Trim = TxtPwd.Text.Trim then
TxtIdCli.Text=rs.IdxField(1).StringValue.Trim
ok_login="S"
end if
rs.MoveNext
Wend
rs.Close
end if
se provo a forzare i valori, mettendo ad es:
ps = db.Prepare(“Select IdCli from clienti where Email= ‘elettrosound@libero.it’”)
e la password forzata, funziona. ripeto qui da me in ufficio funziona sempre.
possibile problema del pc cliente???
grazie, ciao
ciro
Ciao Ciro,
ci sono un paio di cose che non mi convincono:
-
In entrambi i casi (mySql e MSSql) come ti connetti al db (fammi vedere il codice relativo alla connessione)
-
la password idCli?
Poi un paio di suggerimenti:
dim ok_login as boolean (cos eviti di mettere “S” o “N” ed inizializzato a false)
ps.Bind(0, TxtUser.Text.Trim) lo puoi evitare scrivendo: rs = ps.SQLSelect(TxtUser.Text.Trim)
… della serie il bindtype obbligatorio mentre ad SqlSelect o sqlExecute del preparedStatement accetta i parametri, ovviamente nell’ordine in cui li hai definiti
ecco la mia procedura login (viene lanciata dopo la pressione del pulsante “entra” alla action)
la mia ipotesi che sia un problema nella macchina virtuale del cliente, forse di codepage o altro, da me (sempre vm) funziona
ripab2bhost, dbnm, user e pass sono global properties e sono valorizzate correttamente
ps in questo caso user la mail del cliente, la password idcli cio il codice che ha il cliente nell’ERP
'Dim db As New MySQLCommunityServer
'db.port = 3306
Dim db As New MSSQLServerDatabase
db.Host =RipaB2B.host // or just the IP if using the default instance
db.DatabaseName = RipaB2B.dbnm
db.UserName = RipaB2B.user // or "Domain\\UserID for trusted domain accounts
db.Password = RipaB2B.pass
dim ok_login as string
dim coduweb as string
If db.Connect Then
'Dim ps As MYSQLPreparedStatement
Dim ps As MSSQLServerPreparedStatement
Dim rs As RecordSet
ok_login="N"
// DOBBIAMO VERIFICARE LE CREDENZIALI DEGLI UTENTI WEB EMAIL + CODICE CLIENTE
// VERIFICHIAMO I DATI INSERITI
ps = db.Prepare("Select IdCli from clienti where Email= ?")
'ps.BindType(0, MYSQLPreparedStatement.MYSQL_TYPE_STRING)
ps.BindType(0, MSSQLServerPreparedStatement.MSSQLSERVER_TYPE_STRING)
ps.Bind(0, TxtUser.Text.Trim)
// VERIFICHIAMO I DATI INSERITI
rs = ps.SQLSelect
if rs <> Nil Then
While Not rs.EOF
IF rs.IdxField(1).StringValue.Trim = TxtPwd.Text.Trim then
TxtIdCli.Text=rs.IdxField(1).StringValue.Trim
ok_login="S"
end if
rs.MoveNext
Wend
rs.Close
end if
'msgbox(TxtUser.text.trim+"-"+TxtPwd.Text.trim)
// verifichiamo se un amministratore
if ok_login="N" then
if TxtUser.Text.Trim=ripab2b.admn and TxtPwd.Text.Trim=ripab2b.apwd then
TxtIdCli.Text=""
ok_login="S"
end if
end if
if ok_login="S" then
// verifichiamo se esiste un ordine in corso
idrecupero="new"
qtarecupero="0"
dim totqta as integer
totqta=0
ps = db.Prepare("Select IdOrd, QtaOrd from ordini where IdCli= ? and DataExp='DataExp' order by IdOrd")
'ps.BindType(0, MYSQLPreparedStatement.MYSQL_TYPE_STRING)
ps.BindType(0, MSSQLServerPreparedStatement.MSSQLSERVER_TYPE_STRING)
ps.Bind(0, TxtPwd.Text)
// recuperiamo il seriale
rs = ps.SQLSelect
if rs <> Nil Then
While Not rs.EOF
idrecupero=rs.IdxField(1).StringValue.Trim
totqta=totqta+rs.IdxField(2).IntegerValue
rs.MoveNext
Wend
rs.Close
end if
qtarecupero=totqta.ToText
ordine.Show
'ordine.OrdineSel="new"
else
msgbox("Verificare Username e/o Password!!")
end if
db.Close
Else
MsgBox("Connection error:" + db.ErrorMessage)
End If
ho risolto antonio, la stringa di connessione non veniva creata correttamente…
grazie