PDA

View Full Version : [VB2010] - Errore su .exe


lucausa75
18-10-2010, 15:31
Salve ragazzi,
ho sviluppato un' applicazione che al form load si collega ad un database Access ed effettua una Select per ricavare alcuni dati:

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

Per fare girare il programmino ho creato una cartella sul Desktop e al suo interno ho inserito il file database e l'exe che ho preso direttamente dalla cartella Debug del mio progetto in VB2010

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:

http://img88.imageshack.us/img88/8302/erroreq.th.png (http://img88.imageshack.us/i/erroreq.png/)

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

!fazz
18-10-2010, 16:29
Salve ragazzi,
ho sviluppato un' applicazione che al form load si collega ad un database Access ed effettua una Select per ricavare alcuni dati:

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

Per fare girare il programmino ho creato una cartella sul Desktop e al suo interno ho inserito il file database e l'exe che ho preso direttamente dalla cartella Debug del mio progetto in VB2010

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:

http://img88.imageshack.us/img88/8302/erroreq.th.png (http://img88.imageshack.us/i/erroreq.png/)

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
se non mi ricordo male
se usi un db access devi avere access

per risolvere dovresti usare un database embedded tipo firebird

jackk87
19-10-2010, 07:03
se non mi ricordo male
se usi un db access devi avere access

per risolvere dovresti usare un database embedded tipo firebird

Ciao il problema non è il DB access e non serve averlo installato sulla macchina basta avere il MDAC almeno 2.7 installato e da windows xp in poi è già integrato con windows quindi non è quello il problema.
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

lucausa75
19-10-2010, 07:54
Ciao il problema non è il DB access e non serve averlo installato sulla macchina basta avere il MDAC almeno 2.7 installato e da windows xp in poi è già integrato con windows quindi non è quello il problema.
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

Ciao,
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:

StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'";

infatti se scrivo solo StrSql = "SELECT * FROM " & TB quindi la SELECT senza il WHERE funziona e non da errore...

Cosa potrebbe essere?
A questo punto se non è Access cos'è?

:confused: :confused: :confused:

jackk87
19-10-2010, 12:29
Ciao,
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:

StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'";

infatti se scrivo solo StrSql = "SELECT * FROM " & TB quindi la SELECT senza il WHERE funziona e non da errore...

Cosa potrebbe essere?
A questo punto se non è Access cos'è?

:confused: :confused: :confused:

Ok perfetto allora il problema potrebbe essere la query quindi analizziamola:
il campo NumeroSeriale esiste in quella tabella?che tipo è?
se scrivi:
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ì:
StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'";

P.S. cerca di utilizzare il try..catch in modo da catturare l'errore

lucausa75
19-10-2010, 13:02
Ok perfetto allora il problema potrebbe essere la query quindi analizziamola:
il campo NumeroSeriale esiste in quella tabella?che tipo è?
se scrivi:
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ì:
StrSql = "SELECT * FROM " & TB & " WHERE NumeroSeriale = '" & MySeriale & "'";

P.S. cerca di utilizzare il try..catch in modo da catturare l'errore


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:

http://img835.imageshack.us/img835/8733/42525092.th.png (http://img835.imageshack.us/i/42525092.png/)

;)

jackk87
19-10-2010, 13:13
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:

http://img835.imageshack.us/img835/8733/42525092.th.png (http://img835.imageshack.us/i/42525092.png/)

;)

Ok quindi solo su un pc non funziona. Mi puoi fare una lista dei pc su cui funziona che sistema operativo anno e che tipo di CPU?
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

lucausa75
19-10-2010, 17:52
Ok quindi solo su un pc non funziona. Mi puoi fare una lista dei pc su cui funziona che sistema operativo anno e che tipo di CPU?
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

...davvero grazie per i tuoi consigli.

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...:confused: :confused:

jackk87
20-10-2010, 07:00
...davvero grazie per i tuoi consigli.

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...:confused: :confused:

Di niente sono qui per questo :D

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

lucausa75
20-10-2010, 07:50
Di niente sono qui per questo :D

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

Non mi spiego il perchè se utilizzo Visual Studio tutto va a meraviglia mentre il problema è su VB Express 2010 :confused:
.
Il progetto al quale sto lavorando è quasi pronto e avevo pensato a questa soluzione (OLEDB - ADO.NET)...:confused:
Tu tra i due quale consigli?

jackk87
20-10-2010, 11:54
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

lucausa75
20-10-2010, 13:47
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

Ok Grazie 1000!

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:

http://img97.imageshack.us/img97/7921/65606224.th.png (http://img97.imageshack.us/i/65606224.png/)


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


:confused:

jackk87
20-10-2010, 14:50
Prova in questo modo:
Imports System.Data.OleDb 'Importa la libreria per la connessione al DB

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


:confused:[/QUOTE]

jackk87
20-10-2010, 14:56
Prova in questo modo:
Imports System.Data.OleDb 'Importa la libreria per la connessione al DB

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

lucausa75
20-10-2010, 14:59
Prova in questo modo:
Imports System.Data.OleDb 'Importa la libreria per la connessione al DB

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

...ancora il problema persiste...penso sia VB 2010 Express:

http://img530.imageshack.us/img530/6506/58042506.th.png (http://img530.imageshack.us/i/58042506.png/)

:confused:

jackk87
20-10-2010, 15:05
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'è?:confused:

lucausa75
20-10-2010, 15:23
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'è?:confused:

...ripeto stesso codice su VS2010 va a meraviglia!
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?

:confused: :confused: :confused:

jackk87
20-10-2010, 15:36
...ripeto stesso codice su VS2010 va a meraviglia!
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?

:confused: :confused: :confused:

Ho VS 2008 Enterprase però se mi passi il sorgente con il db, lo provo su vb2010 express

lucausa75
20-10-2010, 15:44
Ho VS 2008 Enterprase però se mi passi il sorgente con il db, lo provo su vb2010 express


Grazie ancora per la tua disponibilità; il sorgente lo puoi scaricare da quì: http://musicbylucausa75.altervista.org/Registrazione_Prodotto_con_ADO_Net.zip

jackk87
20-10-2010, 16:52
Grazie ancora per la tua disponibilità; il sorgente lo puoi scaricare da quì: http://musicbylucausa75.altervista.org/Registrazione_Prodotto_con_ADO_Net.zip

Ciao ho provato con VB2010 e funziona tutto perfettamente posso dirti prova a mettere l'estensione mdb al DB quindi Reg.mdb e nella funzione:
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

se hai ancora problemi non so che dirti avrai qualche problema sulle librerie su quel pc

lucausa75
21-10-2010, 07:47
Ciao ho provato con VB2010 e funziona tutto perfettamente posso dirti prova a mettere l'estensione mdb al DB quindi Reg.mdb e nella funzione:
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

se hai ancora problemi non so che dirti avrai qualche problema sulle librerie su quel pc

...avevo già provato mettendo l'estensione .mdb ma il problema persiste.
Cmq penso proprio che tu abbia proprio ragione circa il problema di qualche libreria su quel pc!

lucausa75
27-10-2010, 15:16
...mi rifaccio nuovamente vivo per chiedervi lumi sulla proprietà RecordCount che pare non esista sul DatReader di OLEDB.

Ho provato questa funzione:

Public Function RecordCount(ByVal MyDR As OleDbDataReader) As Long
Dim Conta As Long
Do While MyDR.Read
Conta = Conta + 1
Loop
Return Conta
End Function

ma ritorna sempre un numero di record inferiore di una unità.

Esempio verifico la tabella con Access e mi rileva 301 recorda mentre la funzione succitata me ne rileva 300; avete qualche consiglio/suggerimento?

Grazie

jackk87
27-10-2010, 16:50
...mi rifaccio nuovamente vivo per chiedervi lumi sulla proprietà RecordCount che pare non esista sul DatReader di OLEDB.

Ho provato questa funzione:

Public Function RecordCount(ByVal MyDR As OleDbDataReader) As Long
Dim Conta As Long
Do While MyDR.Read
Conta = Conta + 1
Loop
Return Conta
End Function

ma ritorna sempre un numero di record inferiore di una unità.

Esempio verifico la tabella con Access e mi rileva 301 recorda mentre la funzione succitata me ne rileva 300; avete qualche consiglio/suggerimento?

Grazie

Ciao se mi spieghi meglio e in dettaglio cosa cerchi posso darti una mano :cool:

lucausa75
27-10-2010, 19:15
Ciao se mi spieghi meglio e in dettaglio cosa cerchi posso darti una mano :cool:


cmq grazie per l'interessamento ho risolto grazie alle dritte di questo sito: http://www.dreamincode.net/forums/topic/148532-using-datagridview-with-access/

Il mio problema riguardava la proprietà RecordCount nel caso di OLEDB che non è presente per gli oggetti DataReader ma grazie a quel sito sono riuscito utilizzando l'oggetto adapter As New OleDbDataAdapter(sql, con1) e dt As New DataTable

:D