Bonjour,
J'essaie de créer un script pour une fenêtre de dialogue qui invite l'utilisateur à sélectionner 2 tables de données à partir d'une paire de zones de liste qui affichent tous les noms de table actuellement ouverts.La fenêtre de dialogue, la zone de liste et le processus de sélection fonctionnent tous comme prévu, mais une fois que j'ai les 2 noms de table sélectionnés comme variables, je me heurte à un obstacle lorsque j'essaie de les associer à des références de table de données.Les références de table de données sont nécessaires pour effectuer des travaux sur les tables sélectionnées ultérieurement dans le code.
Des problèmes surviennent au niveau des deux dernières lignes avec l'erreur suivante pour dt1.
L'argument doit contenir une référence de table de données dans l'accès ou l'évaluation de 'Current Data Table' , Current Data Table/*###*/(SourceData)
Je me rends compte que SourceData et TargetData sont des objets de liste avec seulement 1 élément chacun, j'ai donc essayé de convertir en chaîne avant de les associer en tant que nom de table de données, mais cela n'a pas fonctionné.
Toute aide est grandement appréciée. Veuillez vous référer à la section script ci-dessous.
tables ouvertes = {} ;
Pour ( t = 1 , t <= NTable () , t ++, Insérer dans ( tables ouvertes , Tableau de données ( t ) << ObtenirNom )) ;
SelectDataWindow = Nouvelle fenetre ( "Sélectionner les tables de données" , << Modal ,
Panneau source = Panneau électrique ( "Tableau des données sources" ,
SourceListBox = Zone de liste ( tables ouvertes , Maximum sélectionné ( 1 ))) ,
Panneau cible = Panneau électrique ( "Tableau des données cibles" ,
TargetListBox = Zone de liste ( tables ouvertes , Maximum sélectionné ( 1 ))) ,
Boîte d'alignement ( sous-col ( 2 ) , Boîte à boutons ( "D'accord" ,
Données source = SourceListBox << Obtenir la sélection ;
TargetData = TargetListBox << Obtenir la sélection ) ,
Boîte à boutons ( "Annuler" , Arrêt () ))
) ;
dt1 = CurrentDataTable ( Données source ) ;
dt2 = CurrentDataTable ( TargetData ) ;
Cela a parfaitement fonctionné.Merci Dave!
Vous voulez d'abord utiliser la fonction Tableau de données et non Current Data Table dans les deux dernières lignes.
L'argument de la table de données doit être le nom de la chaîne. Si vous affichez le contenu de SourceData et TargetData, vous verrez qu'il s'agit de listes. En effet, en général, les listes déroulantes permettent à un utilisateur de sélectionner plusieurs éléments. Ainsi, même si vous limitez le nombre d'éléments sélectionnés à un, la sélection est toujours renvoyée sous forme de liste.
Vous pouvez remplacer les deux dernières lignes par ceci :
dt1 = Data Table( SourceData[1] );
dt2 = Data Table( TargetData[1] );
Alors maintenant, le premier élément des listes est utilisé.
Cela suppose bien sûr que l'utilisateur ait sélectionné au moins un élément dans chaque liste. Vous pouvez ajouter une validation à une fenêtre modale. Après la ligne contenant le message modal, ajoutez :
<<ONVALIDATE>0 & NItems(TargetData)>0,
isValid = 1
,
isValid = 0;
Beep()
);
isValid
),</ONVALIDATE>
Évidemment vous pourriez étendre cette validation (par exemple pour vérifier que les noms source et destination n'étaient pas identiques).