Generar tablas de datos de pinzamientos variables con un bucleHola a todos,
Escribí el bucle para ejecutar la tabla de datos SQL () con varios nombres de tabla. Para la gestión de la tabla de datos, estoy tratando de crear un control para cada tabla pero falló.
Necesito ayuda de todos en el código de la siguiente manera
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 );
);Tenga un buen día
Re: Generar tablas de datos de pinzamientos variables con un bucle @Black_Wheel ,
Hubo varios problemas con su script.
- El SQL real debe ser una cadena / variable de caracteres.
- El último artículo en lista falta una cita
- Faltan conceptos en la línea de comando que intenta generar dentro del ciclo For
El lado izquierdo de una asignación JMP debe ser un Valor L . En esencia, un valor L debe ser una palabra o un nombre, no una expresión.
Sin embargo, creo que está intentando crear un comando JMP donde el lado izquierdo de la asignación (el lado izquierdo de
es un nombre.
A continuación es de la ventana de 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 línea superior genera una expresión JMP válida. Si se usa como argumento para la función Eval (), y la cadena de conexión de la base de datos y el código SQL no tienen errores, entonces la consulta debería funcionar. Vea el guión a continuación.
Para ayudarlo a comprender las funciones de JSL, desde el menú principal de JMP> Ayuda > Índice de secuencias de comandos > Las funciones , buscar:
- Insert de Eval ()
- Parse ()
- Eval () y
- la sintaxis para 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^")]\" )) ) ;
);
Espero que ayude. ¡Buena suerte!
Re: Generar tablas de datos de pinzamientos variables con un bucleEn lugar de pasar por todas las maquinaciones para crear un nombre de variable dinámica para cada una de sus tablas de resultados de SQL, ¿por qué no simplemente crear una lista de tablas? Especialmente si sus declaraciones SQL son complejas.
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) );
);
Si desea que la instrucción SQL sea parte de las tablas recién creadas, puede agregarla como una variable de tabla.
Re: Generar tablas de datos de pinzamientos variables con un bucle @Black_Wheel ,
Estoy totalmente de acuerdo con Pete, @pmroz . Una lista de expresiones, una lista de columnas / variables, una lista de nombres de tablas de datos o referencias, que coinciden con el orden de los elementos de la lista (k), es un código que es más fácil de leer y mantener y le recomiendo que lo use.
Re: Generar tablas de datos de pinzamientos variables con un bucleSi. @pmroz @ gzmorgan0 Definitivamente, una lista es mejor que simplemente analizar alguna cadena en una variable.
Sin embargo, a menos que esté haciendo lo mismo con las tres tablas, ni siquiera las pondría en una lista. Simplemente nombraría las variables con nombres descriptivos. El segundo ejemplo es menos líneas, más fácil de entender y le ofrece variables con nombre para que no tenga que recordar qué tabla es 1, 2 y 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"
);
Sin embargo, si todas las tablas tienen el mismo esquema, solo tendría una lista de sentencias sql en una lista y la llamaría directamente.