strani caratteri sql server

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:

  1. In entrambi i casi (mySql e MSSql) come ti connetti al db (fammi vedere il codice relativo alla connessione)

  2. 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