Newsgroup: it.comp.appl.access
Titolo: Ricerca se il dato di un campo di tutti i record elencati su una maschera è già presente su una tabella

Ho creato una maschera con l'elenco di più record che saranno importate nella tabella pickin del mio database.
In questa maschera ho messo un campo non associato che ho chiamato status, nel quale dovrà apparire la scritta "OK" o "Già presente" in funzione al fatto che sia già presente nella tabella pickin il relativo valore del campo stock_number.
Il codice che ho messo su caricamento della maschera è questo:
 
If Not IsNull(DLookup("[Stock_number]", "pickin", "[stock_number]='" & Me!Stock_number & "'")) Then
  Me.Status = "Auto già presente"
Else
  Me.Status = "ok"
End If
 
Non funziona perchè mi restituisce il valore corretto solo per il primo record e per tutti gli altri sottostanti mi ripete il valore messo nel primo record, quindi se il primo è Ok anche in tutti gli altri mi riporta Ok, mentre se il primo è "Già presente" riporta questo su tutti gli altri.
 
Cosa mi manca?
 
Grazie.
 
Andrea

 In questa maschera ho messo un campo non associato che ho chiamato status, nel quale dovrà apparire la scritta "OK" o "Già presente" in funzione al fatto che sia già presente nella tabella pickin il relativo valore del campo stock_number.
 
un campo NON associato, in una form continua, NON può dare (avere) un valore differente per ogni record (per ogni riga), come ti aspetti che faccia.

differente per ogni record (per ogni riga), come ti aspetti che faccia.
 
Ah, e hai qualche idea di come potrei aggirare la cosa per arrivare allo scopo di evidenziare i valori già presenti?
 

Campo calcolato nella query.
 
@Alex

 @Alex
Non ho una query.
Creo una tabella temporanea importando i dati da un file di testo,
DoCmd.TransferText acImportDelim, "ImportMMTT", "t_MMTT_temp", "D:\temp\auto.txt", True, ""
e poi apro la maschera creata sulla tabella temporanea appena creata
DoCmd.OpenForm "M_MMTT_temp"
 
quindi mi suggerisci di aprire la maschera tramite query...
mi aiuti con il campo calcolato, per favore?
Cosa dovrei scrivere nella query?
Grazie.
 
Andrea

Crea una query ed usala... Non si paga... le altre cose che hai pensato le eviterei.
 
@Alex

 @Alex
 
Ci ho lavorato e ce l'ho fatta.
Grazie per avermi spronato.
 
Ho fatto in questo modo:
creato una query basata sulla tabella creata (temporanea) e la tabella permanente relazionando (con la seconda opzione) tutti i campi ID della tabella temporanea e i soli campi ID della tabella permanente.
Poi ho inserito un campo calcolato con la seguente formula 
 
Espr1: IIf(["stock_number"]=[stock_number];"Auto già presente";"Ok")
 
Funziona!
 
Andrea

La tabella temporanea secondo te serve, nel.senso che è indispensabile...?
Se la risposta che ti dai è "No"... allora hai ragionevoli certezze che possa essere evitata.
 
@Alex


Certo che è indispensabile perchè quella cartella temporanea nasce da una query di creazione tabella pescando i dati da un file testo, che viene generato a mano ogni giorno dall'utente, con le informazioni che gli arrivano via mail.
Questi dati, che gli vengono comunicati, vengono importati nel database. All'inizio avevo fatto una procedura diretta che andava ad accodare questi record alla tabella principale di tutte le auto già caricate in precedenza, ma questa procedura "nascosta" se importava dati già presenti dava messaggi di errore del tipo che venivano importati 8 record di 9 e 1 scartato per violazione di chiave, senza sapere quale era l'auto in questione scartata. Allora ho studiato questa soluzione, cioè prima di importare i dati, farli vedere all'utente creando una tabella temporanea (che poi viene cancellata automaticamente all'avvenuta importazione dei dati) in modo da fare vedere all'utente se ci sono già auto con lo stesso ID nella tabella e quindi poter intervenire subito sul problema.

Andrea Pettenon used his keyboard to write :

Usa questa query (opportunamente integrata)
come RecordSource della scheda,
dove Tab_A è la tabella sorgente.
 
SELECT Tab_A.A, Tab_B.A, IIf(IsNull([Tab_B].[A]),"","OK") AS Presente
FROM Tab_A LEFT JOIN Tab_B ON Tab_A.A = Tab_B.A;
 
Bruno