Genera variabili di grip tabelle dati con un cicloCiao a tutti,
Ho scritto il ciclo per eseguire la tabella di dati SQL () con più nomi di tabella. Per la gestione della tabella dei dati, sto cercando di creare un grip per ogni tabella ma non è riuscito.
Hai bisogno di aiuto per tutti sul codice come di seguito
sql_code 1 = Expr( "..." );
sql_code 2 = Expr( "..." );
sql_code 3 = Expr( "..." );
list = { "sql_code 1", "sql_code 2", sql_code 3" };
For( k = 1, k <= N Items( list ), k++,
sub_list = list[k];
Eval list( Parse( "var_" || sub_list ) ) = Execute SQL( database_connection, Eval(Parse(list)), invisible, "Data Table_" || sub_list );
);Buona giornata
Ri: Genera variabili grip di tabelle dati con un ciclo @Black_Wheel ,
Ci sono stati diversi problemi con la tua sceneggiatura.
- L'SQL effettivo dovrebbe essere una variabile stringa / carattere.
- L'ultimo elemento in elenco manca un preventivo.
- Concetti mancanti nella riga di comando che si sta tentando di generare all'interno del ciclo For
Il lato sinistro di un compito JMP deve essere un L-Valore . In sostanza, un valore L deve essere una parola o un nome, non un'espressione.
Tuttavia, credo che tu stia provando a creare un comando JMP in cui il lato sinistro dell'assegnazione (il lato sinistro di
è un nome.
Di seguito è dalla finestra Registro JMP
Parse(Eval Insert( "\[var_^sub_list^ = Execute SQL( database_connection, ^list[k]^, invisible, "Data Table_^sub_list^")]\" )) ;
/*:
var_sql_code 1 = Execute SQL(
database_connection,
sql_code 1,
invisible,
"Data Table_sql_code 1"
)
La riga superiore genera un'espressione JMP valida. Se viene utilizzato come argomento per la funzione Eval () e la stringa di connessione al database e il codice SQL non presentano errori, la query dovrebbe funzionare. Vedi lo script qui sotto.
Per aiutarti a comprendere le funzioni JSL, dal menu principale di JMP> Aiuto > Indice degli script > funzioni , consultare:
- Eval Insert ()
- Parse ()
- Eval () e
- la sintassi per Execute SQL ()
sql_code 1 = "..." ;
sql_code 2 = "..." ;
sql_code 3 = "..." ;
list = { "sql_code 1", "sql_code 2", "sql_code 3" };
For( k = 1, k <= N Items( list ), k++,
sub_list = list[k];
Eval(Parse(Eval Insert( "\[var_^sub_list^ = Execute SQL( database_connection, ^list[k]^, invisible, "Data Table_^sub_list^")]\" )) ) ;
);
Spero possa aiutare. In bocca al lupo!
Ri: Genera variabili grip di tabelle dati con un cicloInvece di esaminare tutte le macchinazioni per creare un nome di variabile dinamica per ciascuna delle tabelle dei risultati SQL, perché non creare un elenco di tabelle? Soprattutto se le tue istruzioni SQL sono complesse.
sql_code 1 = Expr( "..." );
sql_code 2 = Expr( "..." );
sql_code 3 = Expr( "..." );
list = { "sql_code 1", "sql_code 2", "sql_code 3" };
dt_list = {};
For( k = 1, k <= N Items( list ), k++,
sql_statement = list[k];
dt_list[k] = Execute SQL( database_connection, sql_statement, invisible, "Data Table_" || char(k) );
);
Se si desidera che l'istruzione SQL faccia parte delle tabelle appena create, è possibile aggiungerla come variabile di tabella.
Ri: Genera variabili grip di tabelle dati con un ciclo @Black_Wheel ,
Sono pienamente d'accordo con Pete, @pmroz . Un elenco di espressioni, un elenco di colonne / variabili, un elenco di nomi o riferimenti di tabelle di dati, abbinati all'ordine degli elementi dell'elenco (k), è un codice che è più facile da leggere e mantenere e ti consiglio di usarlo.
Ri: Genera variabili grip di tabelle dati con un cicloSi. @pmroz @ gzmorgan0 sicuramente un elenco è meglio che analizzare una stringa in una variabile.
A meno che tu non stia facendo la stessa cosa con tutti e tre i tavoli, non li metterei nemmeno in un elenco. Vorrei solo nominare le variabili con nomi descrittivi. Il secondo esempio è meno righe, più facile da capire e ti dà le variabili nominate in modo da non dover ricordare quale tabella è 1, 2 e 3.
Names default to here(1);
sqllist = {
"SELECT *
FROM People",
"SELECT *
FROM Places",
"SELECT *
FROM Things"
};
table_names = {"People", "Places", "Things"};
dt_list = {};
for(i=1, i<=nitems(sqllist), i++,
dt_list[k] = Execute SQL(dbc, sqllist[i], table_names[i])
);
// vs
dt_people = Execute SQL(dbc,
"SELECT *
FROM People",
"People"
);
dt_places = Execute SQL(dbc,
"SELECT *
FROM Places",
"Places"
);
dt_things = Execute SQL(dbc,
"SELECT *
FROM Things",
"Things"
);
Se le tabelle hanno tutte lo stesso schema, avrei solo un elenco di istruzioni sql in un elenco e lo chiamerei direttamente.