|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
[VB2010] - Errore su .exe
Salve ragazzi,
ho sviluppato un' applicazione che al form load si collega ad un database Access ed effettua una Select per ricavare alcuni dati: Codice:
Private Sub VerificaRegistrazione(ByVal DB As String, ByVal TB As String, ByVal MySeriale As String, ByVal MyForm As Form) Dim StrCnn As String Dim StrSql As String CnnReg = New ADODB.Connection RstReg = New ADODB.Recordset Tabella = TB StrCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Application.StartupPath & "\" & DB & ";Jet OLEDB:Database Password=pwd" CnnReg.Open(StrCnn) StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'" RstReg.CursorType = ADODB.CursorTypeEnum.adOpenStatic RstReg.CursorLocation = ADODB.CursorLocationEnum.adUseClient RstReg.Open(StrSql, CnnReg) If RstReg.RecordCount > 0 Then Me.Hide() MyForm.ShowDialog() End If RstReg.Close() CnnReg.Close() RstReg = Nothing CnnReg = Nothing End Sub Il problema che se faccio girare questa applicazione su Win7 o WinXP funziona; ma in un altro XP al suo avvio mi visualizza questo errore: ![]() All'interno del file .txt c'è la descrizione dell'errore che appare all'interno dell'immagine sopra visualizzata L'unica differenza tra i sistemi operativi è che tutti hanno Office installato (quindi Access) tranne l'altro PC con XP: potrebbe essere questo il problema e cioè la mancanza della presenza di Access? C'è possibilità di risolvere? Grazie a quanti mi aiuteranno
__________________
Unisciti a noi: ![]() ![]() Ultima modifica di lucausa75 : 18-10-2010 alle 15:33. |
![]() |
![]() |
![]() |
#2 |
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21768
|
Quote:
se usi un db access devi avere access per risolvere dovresti usare un database embedded tipo firebird
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
Il problema è che sulla macchina dove va in errore non c'è installato il framework quindi ti bastera solo installare il framework e l'applicazione funziona. P.S. su windows 7 funziona perchè c'è integrata già la versione 3.5 del framework |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
Quote:
confermo che sulla macchina con XP è installato il framework e la versione 2.8 SP1 di MDAC, infatti VB2010 che necessita del framework per funzionare va a meraviglia. Il problema, invece, sembrerebbe di altra natura e pare risieda in questa riga di codice: Codice:
StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'" infatti se scrivo solo Codice:
StrSql = "SELECT * FROM " & TB Cosa potrebbe essere? A questo punto se non è Access cos'è? ![]() ![]() ![]()
__________________
Unisciti a noi: ![]() ![]() |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
il campo NumeroSeriale esiste in quella tabella?che tipo è? se scrivi: Codice:
StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'" io vedo che il campo NumeroSeriale è un campo testo e non numero quindi se è un campo numerico prova così: Codice:
StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'" P.S. cerca di utilizzare il try..catch in modo da catturare l'errore |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
Quote:
Ciao e grazie per la tua risposta. Il campo NumeroSeriale è un campo testo. Il problema non è la struttura della query in se o la sintassi in quanto quella stessa query in tutti i pc tranne in uno dove presenta questo errore: ![]() ![]()
__________________
Unisciti a noi: ![]() ![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
Prova a compilarlo per CPU x86 e non per AnyCPU vedi se è questo il problema. Se non sai come fare vai nelle proprietà della soluzione poi sulla sinista hai compila clicca sull'ultimo pulsante in basso a sinistra e cambia il valore e ricompila il progetto Ultima modifica di jackk87 : 19-10-2010 alle 13:35. |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
Quote:
Già l'applicazione è compilata per CPU x86 e penso che il problema possa essere che su quel pc dove non funziona c'è VB2010 Express mentre negli altri Visual Studio 2010... ![]() ![]()
__________________
Unisciti a noi: ![]() ![]() |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
![]() Ho visto che utilizzi ADODB io di solito utilizzo OLEDB e non ho mai avuto problemi di questo genere dagli errori che vedo hai probemi di invoke e bisognerebbe avere tutto il codice avanti per capire qualche cosa perchè non provi ad utilizzare OLEDB oppure ADO.NET (ancora meglio per non avere problemi di invoke)? |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
Quote:
![]() . Il progetto al quale sto lavorando è quasi pronto e avevo pensato a questa soluzione (OLEDB - ADO.NET)... ![]() Tu tra i due quale consigli?
__________________
Unisciti a noi: ![]() ![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Io ho sempre utilizzato OLEDB con DB Access e non ho avuto mai problemi mi sono trovato sempre bene.
Su ADO.NET non so darti informazioni |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
Quote:
Cmq ho provato con OLEDB ma su VB2010 Express presenta sempre il messaggio di errore nel codice sotto e che vedi nell'immagine a seguire: ![]() Codice:
Private Sub VerificaRegistrazione(ByVal DB As String, ByVal TB As String, ByVal MySeriale As String, ByVal MyForm As Form) Dim StrCnn As String Dim StrSql As String Dim CnnReg As New ADODB.Connection Dim RstReg As New ADODB.Recordset Tabella = TB StrCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & AppPath() & DB & ";Jet OLEDB:Database Password=databaseconpassword" CnnReg.Open(StrCnn, "", "", -1) StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'" RstReg.Open(StrSql, StrCnn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockBatchOptimistic, 1) If RstReg.RecordCount > 0 Then Me.Hide() MyForm.ShowDialog() End If RstReg.Close() CnnReg.Close() RstReg = Nothing CnnReg = Nothing End Sub ![]()
__________________
Unisciti a noi: ![]() ![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Prova in questo modo:
Codice:
Imports System.Data.OleDb 'Importa la libreria per la connessione al DB Codice:
Private Sub VerificaRegistrazione(ByVal DB As String, ByVal TB As String, ByVal MySeriale As String, ByVal MyForm As Form) Dim StrSql As String 'Percorso del DataBase dim PercorsoDB As String = "database.mdb" 'Password DataBase dim PassDB As String = "passworddb" 'Stringa di Connessione dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & PercorsoDB & ";Jet OLEDB:Database Password=" & PassDB 'Connessione alla stringa dim Cn As New OleDbConnection(ConnString) Tabella = TB StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'" Cn.Open() Dim cmd As New OleDbCommand(sql, Cn) 'inserisce il risultato nel datareader Dim dr As OleDbDataReader = cmd.ExecuteReader 'legge il datareader dr.Read() 'controllo se l'utente è registrato If dr.HasRows = true Then Me.Hide() MyForm.ShowDialog() End If dr.Close() Cn.Close() End Sub ![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Prova in questo modo:
Codice:
Imports System.Data.OleDb 'Importa la libreria per la connessione al DB Codice:
Private Sub VerificaRegistrazione(ByVal DB As String, ByVal TB As String, ByVal MySeriale As String, ByVal MyForm As Form) Dim StrSql As String 'Percorso del DataBase dim PercorsoDB As String = "database.mdb" 'Password DataBase dim PassDB As String = "passworddb" 'Stringa di Connessione dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & PercorsoDB & ";Jet OLEDB:Database Password=" & PassDB 'Connessione alla stringa dim Cn As New OleDbConnection(ConnString) Tabella = TB StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'" Cn.Open() Dim cmd As New OleDbCommand(StrSql , Cn) 'inserisce il risultato nel datareader Dim dr As OleDbDataReader = cmd.ExecuteReader 'legge il datareader dr.Read() 'controllo se l'utente è registrato If dr.HasRows = true Then Me.Hide() MyForm.ShowDialog() End If dr.Close() Cn.Close() End Sub |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
Quote:
![]() ![]()
__________________
Unisciti a noi: ![]() ![]() |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Se compili lo stesso codice in Visual Studio e lo esegui tramite l'exe su quel pc funziona?se compili con Visual Studio Express ed esegui l'exe funziona?Sicuro che quella tabella in quel DB e quel campo c'è?
![]() |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
Quote:
L'unica differenza a parte il VB2010 Express è che dove ho VS2010 ho anche Access installato ma questo non penso sia il problema... Tu hai VB2010 Express o VS2010 così ti passo il sorgente? ![]() ![]() ![]()
__________________
Unisciti a noi: ![]() ![]() |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Ho VS 2008 Enterprase però se mi passi il sorgente con il db, lo provo su vb2010 express
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Jun 2001
Città: Catania
Messaggi: 2690
|
Quote:
Grazie ancora per la tua disponibilità; il sorgente lo puoi scaricare da quì: http://musicbylucausa75.altervista.o...on_ADO_Net.zip
__________________
Unisciti a noi: ![]() ![]() |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
Codice:
Private Sub frmRegProdotto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load VerificaRegistrazione("Reg.mdb", "Seriale", txtSeriale.Text, frmTest) NomeApplicazione = "Il Satiro Stereoscopic 3D Edutainment" End Sub |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:23.