Ciao,
Sto tentando di scrivere una finestra di dialogo che richiede all'utente di selezionare 2 tabelle di dati da una coppia di caselle di riepilogo che visualizzano tutti i nomi delle tabelle attualmente aperte.La finestra di dialogo, la casella di riepilogo e il processo di selezione funzionano tutti come previsto, tuttavia una volta che ho i 2 nomi di tabella selezionati come variabili, ho incontrato un blocco durante il tentativo di associarli ai riferimenti alla tabella di dati.I riferimenti alla tabella dati sono necessari per eseguire il lavoro sulle tabelle selezionate più avanti nel codice.
I problemi si verificano nelle ultime due righe con il seguente errore per dt1.
L'argomento deve contenere il riferimento alla tabella dati nell'accesso o nella valutazione di 'Current Data Table' , Current Data Table/*###*/(SourceData)
Mi rendo conto che SourceData e TargetData sono oggetti elenco con solo 1 elemento ciascuno, quindi ho provato a convertirli in stringa prima di associarli come nome di una tabella di dati, ma non ha funzionato.
Qualsiasi aiuto è molto apprezzato. Fare riferimento alla sezione dello script di seguito.
openTables = {} ;
Per ( T = 1 , T <= NTable () , T ++, Inserire ( openTables , Tabella dati ( T ) << OttieniNome )) ;
Selezionare DataWindow = Nuova finestra ( "Seleziona tabelle dati" , << Modale ,
SourcePanel = Scatola del pannello ( "Tabella dei dati di origine" ,
SourceListBox = Casella di riepilogo ( openTables , Massimo selezionato ( 1 ))) ,
TargetPanel = Scatola del pannello ( "Tabella dati di destinazione" ,
TargetListBox = Casella di riepilogo ( openTables , Massimo selezionato ( 1 ))) ,
Casella di allineamento ( NCol ( 2 ) , Scatola dei bottoni ( "OK" ,
SourceData = SourceListBox << Ottieni selezionati ;
TargetData = TargetListBox << Ottieni selezionati ) ,
Scatola dei bottoni ( "Annulla" , Fermare () ))
) ;
dt1 = CurrentDataTable ( SourceData ) ;
dt2 = CurrentDataTable ( TargetData ) ;
Questo ha funzionato perfettamente.Grazie Dave!
Per prima cosa vuoi usare la funzione Tabella dati e non Current Data Table nelle ultime due righe.
L'argomento della tabella dati deve essere il nome della stringa. Se mostri i contenuti di SourceData e TargetData vedrai che sono liste. Questo perché in generale le caselle di riepilogo consentono a un utente di selezionare più elementi. Quindi, anche se stai limitando il numero di elementi selezionati a uno, la selezione viene comunque restituita come elenco.
Puoi sostituire le ultime due righe con queste:
dt1 = Data Table( SourceData[1] );
dt2 = Data Table( TargetData[1] );
Quindi ora viene utilizzato il primo elemento degli elenchi.
Ciò ovviamente presuppone che l'utente abbia selezionato almeno un elemento da ciascun elenco. È possibile aggiungere la convalida a una finestra modale. Dopo la riga contenente il messaggio modale aggiungere:
<<ONVALIDATE>0 & NItems(TargetData)>0,
isValid = 1
,
isValid = 0;
Beep()
);
isValid
),</ONVALIDATE>
Ovviamente potresti estendere questa validazione (ad esempio per verificare che i nomi di origine e destinazione non fossero identici).