Newsgroup: it.comp.lang.visual-basic
Titolo: DataEnviroment + DataReport ed installazione su pc

Ciao a tutti,
ho reallizzato un'applicativo collegato ad un database MDB e contenente 
oltre alle varie Form anche un DataEnviroment ed un DataReport.
Nel pc in cui ho il VB6 ed ho realizzato l'applicativo tutto funziona alla 
perfezione.
Quando però vado ad installarlo su un pc diverso e quindi anche su una 
cartella diversa all'apertura del datareport mi dice che non trova il 
database.
Questo è abbastanza ovvio in quanto quando ho realizzato la connessione nel 
DataEnviroment, con la procedura guidata ho dovuto realizzare un file DNS 
che nel nuovo pc non c'è....
La stringa di connessione che ho relizzato con il DataEnviroment è la 
seguente:
DBQ=C:\ZZ_Sorgenti\database.mdb;DefaultDir=C:\ZZ_Sorgenti;Driver={Driver do 
Microsoft Access (*.mdb)};DriverId=25;FIL=MS 
Access;FILEDSN=C:\Programmi\File comuni\ODBC\Data 
Sources\ConnessioneProva.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;
Immagino che io debba inserire questa stringa di connessione da codice 
modificando il percorso "C:\ZZ_Sorgenti" con quello in cui verrà installato 
l'applicativo, ma per il file DNS cosa devo fare? lo devo scrivere da 
codice? Sei si come?
Una volta scritta la stringa di connessione è corretto impostarla nel 
seguente modo?
DataEnviroment1.Connection1.ConnectionString = 
StringaDiConnessionePersonalizzata
Spero voi possiate aiutarmi perchè è un po' di giorni che non ne vengo fuori 
da questo problema....
Grazie in anticipo. 

Dopo dura riflessione, LupoNero ha scritto :

Il fatto che nessuno utilizzi *seriamente* il dataenvironment, ma 
faccia tutto da codice fin dall'inizio, doveva metterti sull'avviso da 
tempo (e ti era anche già stato fatto notare).
Comunque, la connectionstring può essere impostata come indichi, ma 
dipende se poi nel dataenvironment utilizzi proprio quella connessione 
ecc...
Non capisco inoltre come mai utilizzi ODBC, quando per Access in genere 
si utilizza OleDb, ma avrai avuto le tue ragioni (chissà, forse per 
quel problema del recordset gerarchico hai avuto problemi con OleDB?).
Utilizzando ODBC, hai aggiunto la complicazione di dover creare un DSN. 
Che i DSN utente vengono anche facili, ma tu l'hai fatto di sistema, 
quindi devi crearlo durante il setup (che esegue con alte credenziali) 
e non puoi crearlo alla prima esecuzione (che potrebbe eseguire con 
basse credenziali NT). Come minimo, utilizza un DSN utente, così puoi 
spippolarci a runtime anche con utenti ristretti.
Oppure, ascolta un consiglio, e fai il recordset gerarchico da codice e 
associalo al DataReport da codice, così fai quel che vuoi.
C'erano dei miei vecchi post con anche tutto il codice pronto. Vedi se 
google gruppi ti aiuta.
Ciao
Alberto
-- 
Karl Marx: Le circostanze fanno l'uomo non meno di quanto l'uomo faccia 
le circostanze.

 associalo al DataReport da codice, così fai quel che vuoi.
Forse mi sono intestardito su una cosa non corretta, ma.... mi sembra strano 
non possa  funzionare e faccio fatica a cambiare strada....
Ho trovato diversi esempi su questo NG ed in rete, ma tutti parlano di Query 
gerarchica tra due tabelle.
Il mio caso che risolvo in modo positivo sia con Access che con il 
DataEnviroment è diverso in quanto possiedo una sola tabella e vorrei fare
un raggruppamento dei dati...
La stringa che ne risulta con il DataEnviroment è la seguente:
"SHAPE {SELECT * FROM 'TABAPPOGGIO'} AS Command1 COMPUTE
Command1 BY 'Sigla','TitoloTavola'", cn
Come vedi c'è una sola tabella i cui campi "Sigla" e "TitoloTavola" vengono 
raggruppati e quindi utilizzati come intestazione e sotto vengono elencati 
tutti i record i cui campi Sigla e TitoloTavola sono uguali...
Funzionando correttamente con il DataEnviroment ho pensanto di trasportare 
il tutto da codice nel seguente modo:
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim cm As New ADODB.Command
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pathdatabase &
";Persist Security Info=False"
    rs.Open "SHAPE {SELECT * FROM TABAPPOGGIO}  AS Command1 COMPUTE Command1
BY SiglaModificata,TitoloTavola", cn
    ReportElencoTavoleTrasmesse.Show
    Set ReportElencoTavoleTrasmesse.DataSource = rs
Ma non funziona in quanto nei vari tentativi ho visto intervallarsi i 
seguenti errori:
"Errore di sintassi nella query. Proposizione della query incompleta"
"Fonte dati non valida"
"Le sezioni non sono coerenti con i dati... o qualcosa del genere"
A questo punto, visto che con DataEnviroment funziona vorrei trovare il modo 
di eseguire un'installazione corretta su tutti i pc....
Grazie 

 di eseguire un'installazione corretta su tutti i pc....
Ma si, alla fine ci si salta fuori anche così. Ma dipenderai sempre dal 
DataEnvironment, quindi sarai appeso per i testicoli alla versione di 
MDAC presente sulla macchina target, quindi dovrai sempre (ma questo 
andrebbe fatto comunque) distribuire un MDAC di versione minima 
compatibile con quella che utilizzi per lo sviluppo, ecc...
Ciao
Alberto
-- 
Karl Marx: Uno scrittore è produttivo non nella misura in cui produce 
idee, ma nella misura in cui arricchisce l'editore che pubblica le sue 
opere.

 quella che utilizzi per lo sviluppo, ecc...
Perchè dici che devo installare sempre MDAC?
Il mio applicativo su Win2000,XP,Vista (completamente puliti: cioè solo 
S.O.) funziona bene e si collega perfettamente al database senza dover 
installare nessun MDAC
Ancora grazie.
Ciao.

 nessun MDAC
Caro amico, un buon sviluppatore è in primis un sistemista, ossia 
conosce i sistemi operativi su cui i software dovranno girare.
Saprai quindi che alcuni sistemi operativi escono con versioni diverse 
di MDAC preinstallate.
Alcuni si, alcuni no, alcuni ricevono MDAC con i SP, ecc...
Tu cerchi di distribuire Ado2.7.
Bene. Sul W2000 pulito c'è MDAC2.5. Quindi Ado.27 non gira. Se dici che 
gira, allora non è pulito, ma è un W2000 SP4, che è una cosa diversa.
Quindi, a scanso di equivoci, MDAC e JET si distribuiscono sempre, in 
versione sufficiente a supportare la versione che abbiamo scelto di 
utilizzare nel progetto. Del resto, la tua stessa scelta di utilizzare 
ADO2.7 pur sviluppando su una macchina che dispone di ADO2.8, è una 
scelta che si giustifica solo col saggio desiderio di richiedere MDAC 
su un un numero minore di macchine.
Alberto
-- 
Charles Baudelaire: C'è un solo modo di dimenticare il tempo: 
impiegarlo.

 numero minore di macchine.
In effetti ho scelto ADO 2.7 perchè ho installato l'ambiente di sviluppo 
anche su un pc con WinXP+Office il quale non supportava, per ovvie ragioni, 
la versione 2.8.
Adesso penso di avere le idee molto più chiare, e tralasiando al momento il 
problema del report (approffitterò del lungo weekend per cercare di 
risolverlo...), mi rimane un'altra domanda:
Premesso per per girare il mio applicativo ha bisogno di MDAC 2.7 e JET 
(SP8??) come faccio verificare se sono già installati nella macchina in cui 
dovrà essere installato il programma? intendo dire: come faccio, con 
InnoSetup a controllare se occorre o meno installare MDAC e il motore JET?
Nomino InnoSetup per lo utilizzo da diverso tempo e mi trovo abbastanza 
bene...
Grazie ancora per la preziosa disponibilità! 

 bene...
Non so se Innosetup possa capirlo.
Ma i setup stessi di Jet40 e MDAC2.8, salutano e si spengono se 
scoprono di essere già installati. Quindi, tu lanciali, al massimo non 
serve a niente.
Alberto
-- 
Max Beerbohm: Tutto ciò che è degno di essere fatto è stato fatto 
ripetutamente. Dalle cose mai fatte bisognerebbe tenersi, sospetto, 
molto alla larga.

 Veramente io uso XP Pro SP2 con Office, e uso da sempre Ado2.8...
Ma io uso per le prove WinXP (senza SP).... :-)
Ho comunque risolto tutti i miei problemi!!
Infatti senza modificare nulla nell'applicativo e nel database, senza 
modificare nemmeno la query ho riscontrato che il problema era unicamente 
nell'installazione!
Infatti come ti avevo detto nel pc in cui era installato l'ambiente di 
sviluppom tutto era ok, utilizzando il DataEnviroment.
Negli altri PC non funzionava in quanto nel pacchetto di installazione non 
avevo inserito la libreria "MSDERUN.DLL"; una distrazione che mi è costata 
cara...
A questo punto devo dire che, a mio avviso, il DataEnviroment, non è così 
male come ho letto in diversi post...
c'è chi lo usa e chi no.... a me è sembrato un ottimo vantaggio, sia durante 
il "disegno" del datareport, sia perchè mi ha evitato di scrivere righe e 
righe di codice.
Questa ovviamente è la mia esperienza, magari in futuro cambieroò idea...
Non so proprio come ringraziarti per la tua pazienza e disponibilità!
GRAZIE!!!

 reinstallarlo?
sono assolutamente certo di essere ammattito anni fa perche' una versione 
piu' recente di ado (es. 2,8) non riconosceva un evento del datacontrol 
inserito con una versione precedente (es. 2.6) se non dietro leggere 
modifiche nei parametri, seno' dava errore in compilazione.
ciao, a.