Newsgroup: it.comp.appl.access
Titolo: gestire un intervallo di record

Questo è il problema: un'associazione acquista un lotto di tessere da
utilizzare successivamente. E' conosciuto il costo di ognuna e il numero
iniziale e quello finale che sono unità.
Es: dalla 324 alla 567 tutte al prezzo singolo di 80.000
Come posso implementare una bella mascherina dove l'utente inserisce il
numero iniziale, quello finale ed il prezzo? Ovvimente l'esito di questa
operazione è che in una tabella vengano creati i rispettivi record, da
assegnare successivamente a chi si iscrive all'associazione.
Insomma, mi puzza di ciclo di for, ma non sono ferrato......
ciao grazie

(.....)

Suppongo che la tabella Tessere destinata a contenere i record sia
strutturata così:
TESSERE
----------------
ID_Record (Contatore)
N_Tessera
Prezzo
Nella form dove l'utente inserisce i dati necessari al caricamento
delle tessere, suppongo che ci siano tre controlli di tipo textbox
denominati 
txtN_Ini		(numero iniziale)
txtN_Fin		(numero finale)
txtPrezzo	(prezzo)
ed un pulsante cmdCarica.
Nella routine associata all'evento suclick del pulsante, scrivi questo
codice:
dim i as integer, rs as recordset
set rs = currentdb.openrecordset("TESSERE")
for i = me.txtN_Ini to me.txtN_Fin
  ' controlla se nella tabella esiste già una tessera con il numero
  ' che verrebbe inserito
  if nz(Dlookup("ID_Record","TESSERE","ID_Record = " & i), 0) = 0 then
     ' inserisce un nuovo record
     rs.addnew
     rs![N_Tessera] = i
     rs![Prezzo] = me.txtPrezzo
     rs.update
  endif
next i
rs.close
set rs = nothing
Vincenzo Turturro
---------------------------------------------------------
Se no diventiamo tutti **** dai portatili o peggio ancora 
provetti poeti fiorentini come vturturro.
(Così disse 
ivan....@tiscalinet.it
 Ven 25 Aug 2000 09:34:52 +0200)

 ciao grazie
puoi provare 
p.es
. sull'evento di click di un bottone di ok
Sub cmdctl_click
dim i as long
dim rs as recordset
set rs = currentdb.openrecordset("nometabella")
for i=controllonumeroiniziale to controllonumerofinale
	with rs
		.addnew
		!camponumerotessera = i
		!campoimporto = controlloimporto
		.Update
	end with
next
rs.close
set rs = nothing
end sub
questo  va bene per il DAO - (acc97)

"VT@work" ha scritto:

scusa la domanda, ma perchè usi un dlookup per verificare se il record
esiste? non sarebbe più opportuno aprire la il recordset in modalità dynaset
e eseguire un findfirst, dato che il recordset lo apri comunque? da quello
che so il dlookup, per sua struttura, apre il recordset, esegue la ricerca, e
poi lo richiude. Oltretutto, ho letto da qualche parte (MSDN?) che è
sconsigliato l'uso di queste funzioni a causa delle basse prestazioni,
soprattutto se si hanno tabelle collegate.
ciao
Paolo Aulisio

grazie per l'aiuto e per il tempo che ci avete dedicato. Purtroppo ho
provato entrambe le routine ma all'istruzione
set rs = currentdb.openrecordset("TESSERE")
ricevo TIPO NON CORRISPONDENTE
Sto smazzando l'Help in linea, ma se nel frattempo qualcuno avesse la dritta
giusta sarebbe certamente gradita....... grazie
P.S. uso Access2000

 P.S. uso Access2000
ma "Tessere" č una tabella o una query realmente esistente sul tuo db? i
riferimenti (menů stumenti-> riferimenti) sono corretti?
prova a postare il codice che usi
ciao

 ciao
questo è il codice che sto scrivendo:
Private Sub Comando10_Click()
Dim i As Integer
Dim rs As Variant  '---- COSI' FUNZIONA
'Dim rs As ADO.Recordset '--- COSI' NON FUNZIONA (e nemmeno con DAO)
'Dim rs as Recorset '---- COSI' HO L'ERRORE POSTATO
Set rs = CurrentDb.OpenRecordset("TESSERE")
For i = Me.txt_ini To Me.txt_fine
  ' CONTROLLO ABBANDONATO PER ERRORE "TIPO DI DATI NON CORRISPONDENTI
NELL'ESPRESSIONE CRITERIO", INSERITE QUINDI LE CHIAVI IN TABELLA
  ' controllo se nella tabella esiste già una tessera con il numero che
verrebbe inserito
  ' If Nz(DLookup("N_tessera", "TESSERE", "N_tessera = " & i), 0) = 0 Then
  ' inserisco un nuovo record
     rs.AddNew
     rs![N_Tessera] = i
     rs![Prezzo_tessera] = Me.txt_prezzo
     rs![anno_tessera] = Me.txt_anno_tessera
     rs.Update
  'End If
Next i
rs.Close
Set rs = Nothing
End Sub
Oh, grazie!!!

          rs![Prezzo_tessera] = Me.txt_prezzo


 Oh, grazie!!!
a mio avviso ti manca il riferimento a Microsoft DAO Object Library, prova ad
aggiungerlo
per quanto riguarda la routine io la farei senza usare la funzione Dlookup, ma
usando il metodo findfirst, xchè personalmente ritengo sia più prestazionale e
più esportabile, molte volte ho convertito applicativi Access in VB e le
funzioni D'qualchecosa' le dovevo riscrivere perchè non supportate da VB,
comunque questo è soloun dettaglio
dim dbs as Database, Rst as Recordset, x as integer
set dbs = currentdb
set rst = dbs.openrecordset("Tessere", dbopendynaset)
for x = me.NumeroDa to me.NumeroA
    rst.findfirst "NumeroTessera=" & x
    if rst.nomatch then
        rst.addnew
    else
        rst.edit 'nel caso tu debba aggiornare il prezzo per quel numero di
tessera
    end if
    rst!NumeroTessera = x
    rst!Prezzo = me.Prezzo
    rst.update
next x
rst.close
set rst = nothing
set dbs = nothing
Ciao

 > End Sub
nel ringraziarti vorrei sapere se questa soluzione funziona correttamente
solo fino a quando i dati in tabella sono ordinati in base a "N_Tessera

 solo fino a quando i dati in tabella sono ordinati in base a "N_Tessera
non è importante l'ordine, e importante che N_Tessera sia univoco