Applicazioni vb6 su Windows Vista

venerdì 06 aprile 2007 - 19.23

Mimmozzo87 Profilo | Junior Member

ciao ragazzi.....avrei un problemino...

io programmi che faccio con vb6 non funzionano con Windows Vista
con xp va tutto perfetto

mi esce questo errore...

runtime error '91'
Object variable or with block variable not set

qualcuno sa aiutarmi???

grazie anticipante e...buona paqua a tutti

erongis Profilo | Junior Member

Hai provato ad installare il vb6 su Vista e vedere cosa fa in debug. È una prova che dovresti fare, altrimenti sei costretto ad andare ad intuito...

Sicuramente è un problema di permessi utente. Adesso Vista chiude tutte le porte al contrario di XP.

Facci sapere novità.

Mimmozzo87 Profilo | Junior Member

no...ora provo ad installare vb6 su vista....
- ma se poi il debug funziona e poi nn posso installare il programma su altri pc che hanno vista?
- se ancora con vb installato il debug mi da errore?


ho provato ad installare altri programmi che ho creato...ma quando deve gare riferimento a database mi da l'errore sopra descritto...

- nn so...ho pensato che forse devo includere qualke file .dll o registri..ma nn so quali...

grazie dell'aiuto che potete fornirmi...CIAO

StefanoLep Profilo | Senior Member

Ciao, questo è un documento relativo a problemi tra vb6 e vista. Lo ha scritto la software house che ha sviluppato un gestionale tutto in vb6, spero possa esserti d'aiuto:

Windows Vista e SQL Server 2005

Le procedure Gamma Enterprise e Gamma Sprint sono state entrambe sottoposte a delle verifiche tecniche allo scopo di validare il loro funzionamento sui sistemi operativi Vista e SQL SERVER 2005. Il procedimento di verifica è avvenuto attraverso l’accesso ad opportuni laboratori preparati da Microsoft utilizzando appropriati strumenti e tool di verifica di compatibilità.
Pur superando totalmente entrambi i laboratori, su Windows Vista e su SQL SERVER 2005, si sono comunque evidenziati alcuni problemi dovuti a dei BUG dei sistemi stessi. I Bug evidenziati sono in stato di risoluzione da parte di Microsoft.
Allo scopo di mantenere corrette le funzionalità delle procedure GE/GS sui sistemi Vista e SQL 2005, sono state apportate le necessarie modifiche all’applicativo che risolvono i problemi evidenziati. I correttivi apportati alle nostre procedure verranno descritte in questo documento allo scopo di metterVi nelle condizioni di poterle verificare ed implementare nelle vostre verticalizzazioni e/o personalizzazioni.

Windows Vista

In seguito al rilascio di Windows Vista da parte di Microsoft sono state rilevate dal nostro reparto di sviluppo, alcune incompatibilità in merito all’utilizzo di costrutti di programmazione in VB6.
La politica di Microsoft è, da tempo, quella di utilizzare come valori di sicurezza predefiniti le impostazioni più stringenti.

In particolare si è verificato che l’apertura di una nuova connessione ADO utilizzando la stringa di connessione prelevata da un oggetto connessione esistente, provoca errore.
Questo avviene perché su sistema Operativo Windows Vista la stringa restituita non contiene le necessarie informazioni inerenti l’utente e la password con cui si effettua la login a SQL Server 2000/2005.


Esempio:
Dim ObjConnessioneA As ADODB.Connection
Dim ObjConnessioneB As ADODB.Connection
Dim strConnessione As String

strConnessione="Provider=SQLOLEDB;server=PC-SERVER;uid=sa;pwd=pwdsa;database=GAMMATEST;OLE DB
Services=-1;Application Name=StartupGE_LIC"

With ObjConnessioneA
.CommandTimeout = 100
.CursorLocation = adUseClient
.ConnectionTimeout = 100
.IsolationLevel = adXactReadCommitted
.ConnectionString = strConnessione
.Open
End With

With ObjConnessioneB
.CommandTimeout = 100
.CursorLocation = adUseClient
.ConnectionTimeout = 100
.IsolationLevel = adXactReadCommitted
‘ ERRORE
.ConnectionString = ObjConnessioneA.ConnectionString
.Open
End With
Ovviamente il caso descritto è solo a titolo di esempio.
Un caso reale potrebbe essere quello di un oggetto connessione passato (ObjConnessioneA) per riferimento ad una classe e sfruttando le sue proprietà si apre una seconda connessione (ObjConnessioneB) al server.

Esempio:
Public ObjConnessioneA As ADODB.Connection

….

Dim ObjConnessioneB As ADODB.Connection

With ObjConnessioneB
.CommandTimeout = 100
.CursorLocation = adUseClient
.ConnectionTimeout = 100
.IsolationLevel = adXactReadCommitted
‘ ERRORE
.ConnectionString = ObjConnessioneA.ConnectionString
.Open
End With

La programmazione VB6 descritta sopra, sebbene poco elegante, era comunque funzionante su sistemi operativi Windows XP o precedenti.

NOTA

La soluzione al problema consiste nel bonificare queste sezioni di codice aprendo connessioni ADO sempre e solo dalla stringa di connessione completa.

Alla luce di questa considerazione l’esempio precedentemente riportato diventa:

Esempio:
Public ObjConnessioneA As ADODB.Connection
Public strConnessione As String

….

Dim ObjConnessioneB As ADODB.Connection

With ObjConnessioneB
.CommandTimeout = 100
.CursorLocation = adUseClient
.ConnectionTimeout = 100
.IsolationLevel = adXactReadCommitted
.ConnectionString = strConnessione
.Open
End With

Il gruppo di sviluppo Gamma Enterprise/Sprint da parte sua ha aggiunto ai parametri della stringa di connessione un attributo che permette alle informazioni di login di essere persistenti.
In particolare si aggiunge alla consueta stringa di connessione:
Persist Security Info=True





SQL Server 2005

I problemi riscontrati su SQL SERVER 2005 si aggirano sulle modalità tecnica adottate per l’invocazione delle Stored Procedure. In particolare riguarda la modalità di preparazione dei parametri come mostra l‘esempio seguente :



Set cmd = New ADODB.Command
With cmd
Set .ActiveConnection = cn
.CommandText = "SPMG_CALCOSTI_UN"

.CommandTimeout = 0
.CommandType = adCmdStoredProc
.NamedParameters = True
Set objParameter = New ADODB.Parameter
'aggiunto @TRETURN_VALUE
With objParameter
.Name = "@DITTA"
.Type = adNumeric
'.Type = adDecimal
.Precision = 5
.NumericScale = 0
.Direction = adParamInput
End With
.Parameters.Append objParameter

La modalità sopra descritta comporta lo scatenarsi dell’errore che l’immagine seguente mostra, ed è dovuto alla incompatibilità che SQL 2005 offre verso il tipo dati adDecimal. Infatti, se viene modificato il tipo dato da adDecimal e trasformandolo in adNumeric, l’errore scompare e la stored procedure viene eseguita, in apparenza, correttamente. Infatti dopo ulteriori verifiche abbiamo notato altri problemi,sempre dovuti ad una differente modalità di trattamento dei parametri.













In attesa di una soluzione da parte di Microsoft, abbiamo provveduto ad individuare una soluzione intervenendo sul codice che ci permette di poter eseguire correttamente le stored procedure su entrambi gli ambienti, SQL 2000 e SQL 2005. La soluzione è descritta dall’esempio seguente :


Set PCmdSP = New ADODB.Command
With PCmdSP
Set .ActiveConnection = Connessione
.CommandTimeout = 0
.CommandText = "CoordinaImpegnoDisimpegno"
.CommandType = adCmdStoredProc
.Parameters("@CodiceDitta") = Ditta
.Parameters("@FlagInternoEsterno") = rInternoEsterno
.Parameters("@TipoOperazione") = rTipoOperazione
.Parameters("@CodiceErrore") = 0
.Execute



Giamp72 Profilo | Junior Member

io ho provato diverse applicazioni che ho sviluppato in vb6 su vista, e non ho avuto problemi.. detto questo: verifica che i componenti che necessitano alla tua applicazione (dll e ocx) siano stati registrati correttamente.
Tieni presente che il 90% dei problemi su vista sono dovuti al controllo account utente, perciò basta disattivarlo e tutto comincia a funzionare per il meglio...
ciao
Giamp72

Mimmozzo87 Profilo | Junior Member

hai provato anche la connettività al database??

Teech Profilo | Expert

Ho lo stesso identico problema...
Da verifiche effettuate mi risulta che il problema si verifica quando istanzio un componente da me creato.

Ho un componente pippo.dll referenziato nel mio progetto
Quando eseguo l'istruzione
Dim myPippo as CLSPIPPO
Set myPippo = New CLSPIPPO

esce l'errore istanziando la classe. Non capisco però da dove deriva il problema... Qualcuno può aiutarmi? Premeto che non conosco minimamente Vista...

Grazie
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

tonymask Profilo | Newbie

A proposito di Visual Basic 6 sotto VISTA.
Tempo fa avevo letto che non si poteva utilizzare il "sendkeys" in fase di debug...(infatti l'ho provato e non funziona).
Tanto che ho dovuto tenere 1 HD con XP per poter utilizzare VB6.

Ripeto in fase di DEBUG perchè il programma compilato poi funziona perfettamente sotto VISTA.

Sapete se hanno ovviato a questo inconveniente ?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5