Newsgroup: it.comp.lang.visual-basic
Titolo: Non capisco ADO + VB6

Salve a tutti,
io nn so più a che santo votarmi... Mi capita questo...
Solita form, controllo Data ADODC e le text collegate all'adodc già
dalle proprietà e nn da codice.
Allora, mi succede questo...
Se modifico il valore di una text a manina,  e poi faccio
Upgradebatch... esco e rientro dalla form e il dato viene
memorizzato...
se invece, modifico il valore della text no a manina ma prendendo il
dato da una listbox, piuttosto che da un tview, lancio l'upgradebatch,
esco e rientro dalla form e il dato inserito nn c'è, come se nn avessi
inserito nulla... Cosa cuoriosa, clicco sulla Listbox per selezionare
il dato, subito dopo, faccio un textbox.setfocus e upgradebatch, esco
e rientro, dadàaaaa il dato l'ha preso...
Ora, è qualcosa che si può risolvere o mi direte che è un Bug di Adodc
e nn c'è nulla da fare?
Grazie per l'aiuto.. saluti.

 e nn c'ï¿œ nulla da fare?
Potresti anche risolvere questo specifico caso.
Ma Ado in modalitï¿œ Bound non ha mai funzionato. Oggi risolvi questo, 
domani ne trovi un altro.
Passa alla modalitï¿œ Unbound, e vivrai sereno pur scrivendo qualche riga 
di codice in piï¿œ...
Alberto
-- 
Georges Pompidou: Un uomo di stato ï¿œ un politico che dona se stesso al 
servizio della nazione. Un politico ï¿œ un uomo di stato che pone la 
nazione al suo servizio.

 nazione al suo servizio.
Ciao Buon vecchio Albe,
in modalità unbound nn l'ho mai usato... mi spieghi a lunghe linee
cosa devo scrivere?
DB è un SQL2000...
Grazie ancora e a presto.

 DB ï¿œ un SQL2000...
Crei la connessione, attacchi la connectionstring, apri la connessione, 
ci attacchi un recordset, ci metti un source, lo apri, crei un command, 
lo attacchi alla connessione, ci inserisci il comando Sql, lo esegui.
Ciao
Alberto
-- 
La forza di volontï¿œ ï¿œ guardare negli occhi una ragazza in topless.

 La forza di volontà è guardare negli occhi una ragazza in topless.
Io finora ho utilizzato ADO in questa maniera per popolare Combo e
Listbox:
Set Dbs = New ADODB.Connection
Set Rs = New ADODB.Recordset
Dbs.Open (";Provider=SQLOLEDB.1;Persist Security Info=False;User
ID=userPassword=password;Initial Catalog=IniDB;Data Source=DB_SVR")
With Rs
    .Open "SELECT Campo1 FROM Taella1 order by Campo1;", Dbs, 3, 3
    .MoveFirst
    Do While Not .EOF
        If .Fields(0) <> "" Then Combo1.AddItem .Fields(0)
        .MoveNext
    Loop
End With
Questa è la strada giusta?
Per collegare le text della Form a questo Recordset, basta un:
set text1(0).DataSource = Rs
?
E poi, manca altro (A parte i tasti per il movenext ecc.ecc.)?
Grazie albe...

 E poi, manca altro (A parte i tasti per il movenext ecc.ecc.)?
Manca l'update/insert, da farsi col command o con l'execute della 
connection.
Se usi SqlServer, come dicevi, valuta la possibilitï¿œ di usare View e 
Stored Procedure, anzichï¿œ l'accesso diretto alle tabelle, sia in 
estrazione che in scrittura.
Non puoi immaginare gli immani benefici, sia in termini di prestazioni 
che soprattutto di manutenibilitï¿œ e flessibilitï¿œ, che te ne 
deriveranno.
Alberto
-- 
Dentro la mia testa
ci son piï¿œ bestie che nella foresta
[Jovanotti]


Si credo che sarebbe mooolto più svelto, anche perchè mi rendo conto
che solo per riempire le combo e le listbox ci metto un pò ad aprire
la form, proverò ad utilizzarle anche se, nn ne ho la pià pallida di
come creare un SP....
Ancora grazie...

 come creare un SP....
Non ï¿œ piï¿œ veloce nello sviluppo, ï¿œ piï¿œ veloce come performance a 
runtime, e soprattutto ï¿œ infinitamente piï¿œ flessibile se devi 
modificare qualcosa nella struttura del db (visto che disconnetti la 
struttura del db dal codice client).
Ma inizialmente per impostare tutto ci vuole piï¿œ tempo.
Alberto
-- 
Alessandro Bergonzoni: Il tempo vola e noi no. Strano sarebbe se noi 
volassimo e il tempo no, il cielo sarebbe pieno di uomini con 
l'orologio fermo.

Ciao ho letto le vs considerazioni innanzitutto.
Ho bisogno, se puoi o "qualcuno" potesse, nel darmi una dritta di come fino
ad oggi mi sono comportato e come mi dovrei comportare dal punto di vista di
approccio di codice.
Mi spiego meglio, fino ad oggi ho sempre sviluppato progetti in VB6
collegati a DB in Access '97 o 2000 e/o con interazioni ai pacchetti di
Office.
Dal punto di vista di codice faccio cosï¿œ:
Set WS = DBEngine.CreateWorkspace("", "admin", "", dbUseJet)
Set DB = WS.OpenDatabase( & percorso db & , False, False, "MS Access;
UID=admin; PWD=xxxxxx")
nei vari forms poi uso i componenti :dbgrid e datacontrol (collegati tra
loro) (dbgrid.datasource = data1) e da codice riempio il datacontrol dei
record risultanti della query che mi interessa:
sSql = "query...."
Data1.RecordSource = (sSql)
Data1.Refresh
Poi x visualizzare i dati da codice:
Text1(11).Text = ASSIGN_VAL(Data1.Recordset("cognome").value)
Per registrarli/modificarli:
Data1.Recordset.AddNew o Data1.Recordset.Edit
Data1.Recordset("cognome").Value = Text1(11).Text
Data1.Recordset.Update
Per eliminare:
Data1.Recordset.Delete
Per controlli o operazioni varie su tabelle:
Dim Tab_appoggio As Recordset
sSql = "query...."
Set Tab_appoggio = DB.OpenRecordset(sSql)
Utilizzo poi Tab_appoggio come fosse Data1...
----------
Questo ï¿œ come mi sono sempre comportato fino ad oggi, lavorando sempre con
clienti che non hanno + di 10pc indicativamente e non ho mai avuto problemi
insormontabili.
-------------------------
Puoi dirmi se, con il nuovo Office2007 e per ora utilizzando sempre VB6 devo
cambiare qualcosa e che cosa?
DAO funziona con db.accdb di Access2007? ho sentito e mi ï¿œ parso di vedere
NO, giusto?
Ho provato a connettermi utilizzando ADO e funziona, anche nel DataReport,
OK?
Mai nei vari forms il datacontrol non lo posso usare? Ho visto che esiste
ADODC che mi funziona e lo posso collegare ad un DATAGRID, giusto?
E per quanto concerne la sintassi del codice che fin'ora ho sempre
utilizzato, come mi dovrei comportare?
--------------------------
Se qualcuno potesse darmi una mano gliene sarei grato.
SC

Ciao ho letto le vs considerazioni innanzitutto.
Ho bisogno, se puoi o "qualcuno" potesse, nel darmi una dritta di come fino
ad oggi mi sono comportato e come mi dovrei comportare dal punto di vista di
approccio di codice.
Mi spiego meglio, fino ad oggi ho sempre sviluppato progetti in VB6
collegati a DB in Access '97 o 2000 e/o con interazioni ai pacchetti di
Office.
Dal punto di vista di codice faccio cos�:
Set WS = DBEngine.CreateWorkspace("", "admin", "", dbUseJet)
Set DB = WS.OpenDatabase( & percorso db & , False, False, "MS Access;
UID=admin; PWD=xxxxxx")
nei vari forms poi uso i componenti :dbgrid e datacontrol (collegati tra
loro) (dbgrid.datasource = data1) e da codice riempio il datacontrol dei
record risultanti della query che mi interessa:
sSql = "query...."
Data1.RecordSource = (sSql)
Data1.Refresh
Poi x visualizzare i dati da codice:
Text1(11).Text = ASSIGN_VAL(Data1.Recordset("cognome").value)
Per registrarli/modificarli:
Data1.Recordset.AddNew o Data1.Recordset.Edit
Data1.Recordset("cognome").Value = Text1(11).Text
Data1.Recordset.Update
Per eliminare:
Data1.Recordset.Delete
Per controlli o operazioni varie su tabelle:
Dim Tab_appoggio As Recordset
sSql = "query...."
Set Tab_appoggio = DB.OpenRecordset(sSql)
Utilizzo poi Tab_appoggio come fosse Data1...
----------
Questo � come mi sono sempre comportato fino ad oggi, lavorando sempre con
clienti che non hanno + di 10pc indicativamente e non ho mai avuto problemi
insormontabili.
-------------------------
Puoi dirmi se, con il nuovo Office2007 e per ora utilizzando sempre VB6 devo
cambiare qualcosa e che cosa?
DAO funziona con db.accdb di Access2007? ho sentito e mi � parso di vedere
