Newsgroup: it.comp.appl.access
Titolo: SQL o Visual Basic ?

   Rieccomi !!
Di SQL non so praticamente nulla, invece su Visual Basic un po' di 
esperienza ce l'ho.
Adesso, le operazioni che devo eseguire nel database (che ho in Access 
2002) sono sempre riguardanti una sola tabella (i cui campi vanno 
ricalcolati secondo procedure abbastanza complesse, ma che saprei 
agevolmente tradurre in Visual Basic 6.0 se potessi vedere la mia 
tabella come una semplice matrice).
Ad esempio, una potrebbe essere:
"se i record n ed n+1 hanno coincidenti sia il campo 1 che quello 2 ed 
inoltre quello n+1 ha il campo 3 non vuoto poni uguale a 0 il campo 4 
del record n+1".
Vi chiedo un consiglio: per fare 'sta cosa devo per forza ricorrere (e 
prima imparare ... ) a SQL oppure esiste una maniera semplice per vedere
la mia tabella come una matrice da dentro un modulo di Access ?
In fondo, mi servono solo tre cose:
1. sapere come fare riferimento all'elemento h della riga k
2. sapere come fare un ciclo for su tutte le righe (record)
2. sapere come fare un ciclo for su tutte le colonne (campi)
   Grazie per la pazienza di essere arrivati fin qui (spero !)
ciao ciao ciao ciao

stefania.1988 ha scritto:

Io ti dico la mia......Tabelle e matrici sono 2 cose mooolto differenti......tantč che non ha senso in una tabella parlare "dell'elemento h nella riga h".....(tipo foglio di calcolo)
SQL č un linguaggio universale di comunicazione e gestione dei db relazionali e quindi, IMHO, andrebbe senz'altro studiato e imparato, fosse solo xchč ti permette di fare procedure a prescindere dall'ambiente in cui sei......Ovvio che lavorare poi con i recordset e i loop va sempre bene...e non tutto si puň ottenere con SQL, oppure si puň ma č molto piů complicato e pesante di un recordset....
Tornando ai tuoi esempi, provo a spiegare. Se hai x es una tabella composta da ID, NOME, VALORE, INDIRIZZO e tipo 500 record(=righe) puoi:
1 - SELECT VALORE(=el h) FROM [tabella] WHERE ID(=el k)=xxx
2 - ' dichiaro le variabili
    Dim Dbs as database
    Dim Rst as recordset
    Dim StrSql as string
 
    ' setto il database corrente
    set Dbs=currentdb
    ' Seleziono il set di record
    StrSql="SELECT ID, NOME, VALORE, INDIRIZZO FROM [tabella]"
    ' Creo il recordset
    set Rst = dbs.openrecordset(strsql)
    ' Mi porto nella posizione iniziale
    rst.movefirst
    ' Scorro il recordset (anche con for, while.....)
    do until rst.EOF
      ....tue operazioni
      rst.movenext
    loop
3 - Non so cosa vuoi dire .....parlando di tabelle.....per avere operazioni su colonne basta
    SELECT VALORE FROM [tabella] WHERE NOME='Mario*'
    x esempio....oppure apri un recordset che contenda solo il campo di cui hai bisogno...poi loopi.....
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 Io ti dico la mia......Tabelle e matrici sono 2 cose mooolto differenti......tantè che non ha senso in una tabella parlare "dell'elemento h nella riga h".....(tipo foglio di calcolo)
ma guarda....ed io che avevo l'errata convinzione  che una tabella e' 
una matrice bidimensionale ;-{)
--
ac

....
La tabella di Access, ma di qualsiasi Database è esattamente come un
foglio di Excel, ciò che cambia sono gli strumenti a disposizione per
accedere ai dati.
Mentre Excel ha un'interfaccia grafica, nel nostro caso che più che di
tabella si parla di un Recordset(tabella in memoria) direi che è
esattamente la stessa cosa.
Infatti puoi spostarti ad una determinata riga usando il metodo MOVE
che rende indicizzato l'indice di riga, e guarda un pò la collection
Fields è l'asse X della tabella che rende indicizzati i campi
all'interno della ROW.
Ne consegue che sono gestibili allo stesso modo.
Purtroppo, e me ne duole, mi tocca dare ragine ad A.C.
@Alex

 la mia tabella come una matrice da dentro un modulo di Access ?
Data una tabella Tab_1 comunque formata, questa è la matrice:
============================================
Private Sub Command0_Click()
Dim db As Database, RS As Recordset
Dim  i, j1 As Integer, j2 As Integer
Set db = CurrentDb
Set RS = db.OpenRecordset("Tab_1", dbOpenDynaset)
Do Until RS.EOF
    j1 = j1 + 1
    For Each i In RS.Fields
        j2 = j2 + 1
        MsgBox "R" & j1 & "C" & j2 & "   " & i
    Next
    j2 = 0
    RS.MoveNext
Loop
End Sub
============================================
Bruno 

@Alex
L'ho detto che dicevo la mia.......ma a parte il fatto che sono gestibili nello stesso modo, a me risulta che in una tabella se cambi l'asse x con l'asse y le cose cambiano....e parecchio......se lo fai in un foglio di excell.....



Uguale... tu credi di no solo perchè con Excel li visualizzi, ma
quello che hai detto equivale ad eseguire una Query a campi
incrociati...
Saluti
@Alex

@Alex
Ti credo sulla parola, vista la mia inesperienza in materia...... oltretutto non usando mai matrici ed array mi trovo spesso ad utilizzare tab temporanee x lo scopo di cui sopra....solo mi sembrava di ricordare in un testo che ho letto sulle basi dei db relazionali il rimarcare che le tab NON sono un foglio di calcolo (quindi una matrice) ma che vengono solo visualizzate come tali, x comodità......vado a vedere il tutto e poi magari ririspondo.....
Ciao
Roberto


 Roberto
Fai attenzione che l'equiparazione di una Tabelle ad una matrice o
foglio di Excel è limitata alla tabella come tale, non scendiamo nel
discorso Relazionale che chiaramente è  tutt'altro.
La rappresentazione in forma matriciale di una tabella è esattamente
equivalente alla rappresentazione di un foglio di Excel non ci sono
arzigogoli, è solo una questione di rappresentazione dello sviluppo
NumRecords(Y)-NumFields(X) ottenibili come ti ha mostrato
correttamente Bruno.
Ciao
@Alex

 Purtroppo, e me ne duole, mi tocca dare ragine ad A.C.
Allora vuol dire che la mia convinzione non era errata?
Fiuuu..........meno male.
Non avro' piu' incubi Matrixiali.
--
ac

 Ti credo sulla parola, vista la mia inesperienza in materia...... oltretutto non usando mai matrici ed array
male ;-{)
  mi trovo spesso ad utilizzare tab temporanee x lo scopo di cui 
sopra....solo mi sembrava di ricordare
  in un testo che ho letto sulle basi dei db relazionali il rimarcare 
che le tab NON sono un foglio di
  calcolo (quindi una matrice) ma che vengono solo visualizzate come tali,
  x comodità......vado a vedere il tutto e poi magari ririspondo.....
Uhmmmm...... anche qui ripetiamo spesso che Acces non e' Excel e che 
l'approccio e' "strategicamente" differente. Se il libro intendeva qesto 
conservalo altrimenti ti consiglio di fare per un attimo il mestiere di
Guy Montag in Fahrenheit 451.
--
ac

 ac
Laos(in barca lungo il Mae Kong)+Cambogia(Siam Reap-AngKor) ultima
offerta... 21gg
;-)
@Alex