Newsgroup: it.comp.lang.visual-basic
Titolo: iniziare con SQL

Premetto che non conosco minimamente Sql e vorrei iniziare ad impararlo,
tuttavia prima di acquistare la licenza e i libri, vorrei fare qualche
domanda a chi se ne intende.
Nei semplici programmini che ho sviluppato con VB6 ho sempre creato i
DataBase con MS Access, adesso mi chiedo:
se volessi sostituire nei programmini che ho fatto, i database Access con
altri database identici nei 'campi' e 'tabelle', ma creati con SQL, dovrei
riscrivere tutto il codice nel programma VB6?

Alfonso ha scritto:

non so in VB6 ma nel 2005 gli oggetti x accede a db access e sql sono 
diversi
saluti MVB

 ha scritto

dipende dal codice, anche se da quello che dici mi sa che un po' ci dovrai 
lavorare. io al momento uso access solo con sql, sia in connessioni dao che 
ado. diciamo che e' la logica che e' un po' diversa. con jet classico, il 
motore di access, puoi fare
    data1.recordset.index="cognome_nome"
    data1.recordset.seek "rossi, mario"
sulla tabella completa (quando al datacontrol dici che il recordsource e' la 
tabella "persone" del tuo mdb).
usando sql, metterai come recordsource qualcosa come
select [* /oppure/ cognome, nome, citta] from persone order by cognome, nome
e invece di seek userai findfirst/findnext ecc.
o meglio ancora farai
select cognome,nome,citta from persone where cognome='rossi' and 
nome='mario', che tiri su molti meno record.
en passant, in casi simili seek e' infinitamente piu' veloce. ma cosa 
succede se la tabella ha 6 mln di record? te li carichi tutti? magari 
passando da uno switch di rete?
implicazioni:
nell'esempio di sopra, col codice jet classico avrai disponibile il campo
data1.recordset!dnascita
perche' hai aperto tutta la taella con tutti i suoi campi
mentre con le query qui sopra, se non l'hai specificato nel select, ti 
manchera'.
ecc ecc.
sql se impari a maneggiarlo e' molto potente, e spesso molto piu' efficiente 
del codice jet classico:
with rs
    do while not .eof
        if !citta="corsico" then
            .edit
            !citta="milano"
            .update
        endif
        .movenext
    loop
end with
e' infinitamente piu' lento di
update persone set citta='milano' where citta='corsico'
pero' puo' essere abbastanza complesso far stare quello che faresti con vari 
cicli, condizioni e relazioni in una sola istruzione. dipende molto dalle 
situazioni. io anche in rete e con piu' utenti continuo a usare le 
connessioni dao perche' riflettono immediatamente i cambiamenti, a 
differenza di quelle ado che sono lente, macchinose e hanno bisogno di 
refresh, e non mi sembrano affatto piu' solide. ma per il codice, che per me 
di solito e' abbastanza semplice, ormai uso solo sql. e si' che al seek 
c'ero affezionato da sempre.
ripeto, dipende molto dalle situazioni. se e' il catalogo dei tuoi libri o 
telefoni, puoi beatamente farlo in dao, con gli indici e i seek, sara' 
robusto e veloce.
ma se pensi di far crescere i tuoi progetti, il mio caldo consiglio e' di 
usare gli innumerevoli tutorial in rete, a partire da quelli del w3c e (se 
non sbaglio) di 
html.it
, e ragionarci un po' su.
poi su questo ng (ma ce ne sono vari anche su sql) ci sono persone che danno 
risposte che val sempre la pena di leggere.
access stesso ha o aveva qualcosa come un jet-sql.hlp.
quanto alla complessita', parti con cose semplici e non spaventarti. usa 
l'interfaccia sql e quella grafica delle query in access per provare i 
comandi, cosi' almeno gli errori te li gestisce access. quando sei sicuro/a, 
inserisci le query nei tuoi progetti vb.
ho appena fatto corsi in cui avevo 3 giorni gio-sab per spiegare access e 
sql, e ogni volta sabato a ora di pranzo una query con gli operatori 
matematici e logici e con i wildcards erano in grado di farla decentemente. 
e ti assicuro che di informatica ne sapevano proprio poco.
quanto ad "acquistare licenza e libri":
-- tutorial su sql ce n'e' infiniti: google "sql tutorial" / "manuale sql".
-- se hai access, l'sql gia' lo conosce. se usi la sua guida te ne accorgi 
presto. se invece  intendi sql server o altri db della famiglia (oracle, 
postgres, mysql), la versione express di sql server 2005 e credo ora anche 
2008 la puoi scaricare gratis da ms, mi sembra anche senza visual basic 
2005/8, e ci puoi fare quello che vuoi. nel caso, pero', forse, tirerei giu' 
anche vs2008 e userei anche quello.
nb: sql server e' molto meno indolore di access da gestire a livello 
sistemistico. guarda le risposte di wodka e mia all'osservazione di luciano 
sul passaggio sql>access.
se vuoi solo provare, imho, quello che hai -- vb6 e access -- basta e 
abbonda.
hth, ciao, a.


Se per l'accesso ai dati hai usato DAO, sicuramente s�.
Se invece hai usato ADO, dovrai solamente cambiare la stringa di connessione 
al DB e tutte le query che usano costrutti tipici del dialetto SQL di 
Access/Jet e che sono diversi in quello di SQLServer.
Ad esempio, il formato delle date, l'uso di funzioni VBA...
Bye
Raf

Alfonso scriveva il 17/04/2008 :

Dipende da come hai fatto il software per Access.
Se hai usato DAO, devi rifare quasi tutto.
Se hai usato ADO, devi ovviamente cambiare la stringa di connessione, 
poi la sintassi Sql delle query/command che esegui sul db.
In questo senso, perï¿œ, ti 'alzi' di livello, nel senso che la sintassi 
Sql che si utilizza con Sql-Server ï¿œ a standard, quindi domani potrai 
poi collegarti a MySql, Oracle, PostGres, DB/2, e altri dbms, solo 
cambiando la stringa di connessione o poco altro. Il concetto ï¿œ che non 
ï¿œ che Sql-Server sia diverso, ma ï¿œ Access ad essere pesantemente 
diverso dal resto del mondo dei database, per cui oggi sei in una 
nicchia tecnologica e lo sforzo serve per uscirne.
Ciao
Alberto
-- 
L'economia sa tutto di te e tu non sai niente dell'economia. La tua 
banca sa tutto di te, di quanti soldi hai, e quando li spendi; ma tu 
non sai niente di cosa fa la banca dei tuoi soldi e dove li mette, e se 
ce li ha!

 Se hai usato DAO, devi rifare quasi tutto.
parliamone.

 parliamone.
OK, allora aggiungiamo "a meno che non voglia accedere con DAO a tabelle 
SQLServer collegate in un DB Access tramite ODBC, con tutto il bene e il 
male che ne consegue".
Sei pi� contento? ;-) 

 Sei pi� contento? ;-)
no :)
quello tu e albe avete detto con tanta decisione vale *solo* se intendete 
sql=dbms, ma la domanda era molto piu' ambigua, e il suo livello molto 
lontano da un'istanza di mssql.
dao o ado non vuol dire la benemerita cippa. e per quanto ho visto, anche 
con dotnet siamo li', come lo si era con cobol, con clipper, con quello che 
ti pare. con un db non e' che ci puoi fare tante cose. ci metti dentro dei 
dati, si spera bene anche se spesso sono insieriti coi piedi, e glieli 
chiedi in vari modi, pregando che la gente non abbia messo chr(160) invece 
di chr(32), e che il db sappia gestire o/oe/�/�.
certo, la stringa di connessione, i rs disconnessi: appunto per quello 
parlavo di logica. conta quella: le salmerie seguiranno col praticantato.
questo lo stavo facendo in questo preciso momento, e' puro codice dao:
Private Sub cmdSqlLuogo_Click()
    Screen.MousePointer = 11
    Dim sSql As String
    sSql = "select distinct [luogo], count([luogo]) from foto group by 
[luogo] order by count(luogo) desc"
    With Data2
        .DatabaseName = App.Path & "\abcdef.mdb"
        .RecordSource = sSql
        .Refresh
    End With
    DBG2.ReBind
    Screen.MousePointer = 0
End Sub
anche senza gestione di errore, ha funzionato al primo colpo.
in ado sarebbe sostanzialmente identico.
lo portero' quasi certamente in dotnet.
in sqlserver non credo, per i motivi che ho esposto a luciano.
dato che chi chiede sta cominciando, eviterei asserzioni generiche e 
massimaliste... gia' domani mi tocca affrontare nicola e il v-day :)
se volete terrorizzare chi comincia col linguaggio, buttatelo pure sulle 
istanze del server :PP
ciao, a. 

 livello molto lontano da un'istanza di mssql.
"se volessi sostituire nei programmini che ho fatto, i database Access con
altri database identici nei 'campi' e 'tabelle', ma creati con SQL, dovrei
riscrivere tutto il codice nel programma VB6?"
A me non pare tanto ambigua, significa: "ho un programma che usa Access come
DBMS, come devo fare per usare SQL[Server] come DBMS, posto di mantenere le
strutture dati identiche?".
Magari avrò preso un granchio, ma scommetto quel che vuoi che Alfonso con
'SQL' non intendeva 'Structured Query Language'...
Quindi il resto della tua risposta (peraltro non chiarissima) "is not
applicable", IMHO! :-D
Ciao
Raf

 livello molto lontano da un'istanza di mssql.
Ah, se cerchi bene nel testo del post iniziale c'è un indizio che toglie 
ogni ambiguità.
"Premetto che non conosco minimamente Sql e vorrei iniziare ad impararlo,
tuttavia prima di acquistare la licenza e i libri, vorrei fare qualche
domanda a chi se ne intende.
Nei semplici programmini che ho sviluppato con VB6 ho sempre creato i
DataBase con MS Access, adesso mi chiedo:
se volessi sostituire nei programmini che ho fatto, i database Access con
altri database identici nei 'campi' e 'tabelle', ma creati con SQL, dovrei
riscrivere tutto il codice nel programma VB6?"
;-)
Ciao
Raf 

 applicable", IMHO! :-D
nicola, dove sei? dopo raf, sono pronto a tutto :)
ciao, a.


Il codice, come ti hanno risposto, dipende da come l'hai scritto.
Sicuramente è un passaggio che vale la pena fare.
ti segnalo in ogni caso che non serve spendere soldi per iniziare con
sql:
http://www.microsoft.com/downloads/details.aspx?FamilyID=220549B5-0B07-4448-8848-DCC397514B41&displaylang=it
Ciao,
Lucazeo


:-) 

 :-)
il tuo indirizzo, tolto quel che c'e' da togliere, e' buono?
ho scritto una pappardella, non vorrei annoiare il gruppo e confondere l'op.
ma se leggi, mi piacere un tuo parere.
poi vedi tu se e cosa chiarire all'op. per me qualcosina ci sarebbe.
ciao, a.

 ciao, a.
Manda, manda!
Ciao
Raf 

 ciao, a.
Manda, manda!
Ciao
Raf