Re: Valor de columna para entrada SQLHay dos puntos a considerar. Primero, el código se puede simplificar enormemente. Este cambio reducirá la oportunidad de errores y los hará más fáciles de encontrar. En segundo lugar, está manipulando cadenas de caracteres para los argumentos de la función Open Database (). La comilla doble es el delimitador de cadenas. Por lo tanto, las comillas dobles incrustadas deben identificarse con la secuencia de escape "\!" (barra diagonal, bang).
Prueba este script. (No puedo)
dt = New Table( "Lots",
Add Rows( 5 ),
New Column( "vcLotCode", Character, Nominal, Set Values( {"lcode.0123", "12345.4321", "dcode.0123", "54321.0123", "lotcd.4567"} ) )
);
For( r = 1, r <= N Row( dt ), r++,
Eval(
Parse(
Substitute(
"dt2 = Open Database(
\!"Driver={SQL Server}; SERVER=rpt; DATABASE=FAB; UID=rrpt; \!",
\!"select vcLotCode, vcWaferCode, dAvg from fr.database where vcLotCode like '\!"LLLLL\!"'\!",
\!"Data\!"
)",
"LLLLL", dt:vcLotCode[r]
)
)
)
);Re: Valor de columna para entrada SQLUnas pocas cosas:
o Estás utilizando Open Database. yo prefiero crear conexión de base de datos + ejecutar SQL + cerrar la conexión de la base de datos . La ventaja de ejecutar SQL es que creas una conexión a la base de datos y puedes ejecutar varias declaraciones SQL con ella. La base de datos abierta crea una nueva conexión para cada sentencia SQL
o No necesitas usar todos esos evals, sustituir, etc. Además, hay variables que no están definidas como fuente de datos y código sql.
Prueba este código:
// Data table
dt = New Table( "Lots",
Add Rows( 5 ),
New Column( "vcLotCode",
Character,
Nominal,
Set Values( {"lcode.0123", "12345.4321", "dcode.0123", "54321.0123", "lotcd.4567"} )
),
);
// Pull data from database using lot code as lookup variable
DSNString = "Driver={SQL Server}; SERVER=rpt; DATABASE=FAB; UID=rrpt; ";
// Create a connection to SQL Server
dbc = create database connection(dsnstring);
// Loop over all lot numbers
for (i = 1, i <= nrows(dt), i++,
lotcode = dt:vclotcode[i];
sqlStr = evalinsert(
"select vcLotCode, vcWaferCode, dAvg
from fr.database
where vcLotCode like '^lotcode^'");
print(sqlstr);
// Create a separate table for each lot number
dt2 = execute sql(dbc, sqlstr);
);
close database connection(dbc);
Re: Valor de columna para entrada SQLUn comentario más: está utilizando el operador LIKE pero no está utilizando comodines. Tal vez quisiste decir algo como esto?
"select vcLotCode, vcWaferCode, dAvg
from fr.database
where vcLotCode like '%^lotcode^%'");
Re: Valor de columna para entrada SQLEstoy de acuerdo en que, en este caso, hay una ventaja de dividir los tres pasos en acciones separadas a medida que se interrelaciona con las consultas.
Usando este enfoque, también podría usar Substitute () en el bloque de calderas sqlstr.
Re: Valor de columna para entrada SQLPerfecto. Muchas gracias!
Valor de columna para entrada SQLSiento que esto debería ser simple, pero después de probar varios métodos en los últimos días, buscar discusiones anteriores y hacer referencia al índice de secuencias de comandos, he quedado vacío.
Quiero recorrer los valores de la tabla de datos y usarlos como entradas para la consulta SQL, donde los valores de la tabla de datos son "códigos de lote" y la consulta SQL hace referencia a "donde vcLotCode como ...". Me ocuparé del bucle más tarde, estoy luchando para que incluso el primer valor funcione. He intentado varias iteraciones de "select", "set", "get", etc. Cualquier ayuda es apreciada.
// Tabla de datos dt = Nueva tabla ("Lotes", Agregar filas (5), Nueva columna ("vcLotCode", Carácter, Nominal, Establecer valores ({"lcode.0123", "12345.4321", "dcode.0123", "54321.0123", "lotcd.4567"})),); // Un intento de establecer el código de lote a los valores de la tabla dt << Seleccionar filas (1); lotcode =: vcLotCode << Get Selected; // Intentando extraer datos de la base de datos usando el código de lote como variable de búsqueda DSNString = "Driver = {SQL Server}; SERVER = rpt; DATABASE = FAB; UID = rrpt;"; sqlStr = "seleccione vcLotCode, vcWaferCode, dAvg de fr.database donde vcLotCode como '" || lotcode || "'"; dt2 = Eval (Sustituto (Expr (dt = Open Database (DataSource, sqlcode, "Data");), Expr (sqlcode), sqlstr, Expr (DataSource), DSNString));