Hola todos,
Tengo un problema con la creación de variables (o referencias) después de conectarme a una base de datos. Quería crear variable control que podría usar más tarde para ejecutar diferentes consultas. Sin embargo, al principio necesitaba crear 2 conexiones ya que necesitaba datos de diferentes bases de datos, pero en el mismo servidor SQL (se requiere el mismo nombre de usuario y contraseña). Para ambas conexiones, necesito proporcionar dos contraseñas para un nombre de usuario determinado. Me gustaría proporcionarlo una vez y preferiblemente durante la creación de la variable conn.
Más tarde, quise ejecutar la consulta INSERT para actualizar solo una celda usando la variable conn creada anteriormente y sin éxito. El registro de JMP dice que hubo un problema al establecer la conexión a la base de datos con el nombre de usuario "ingeniero" e indica la línea donde estoy creando la variable de conexión:
[Microsoft][Controlador ODBC SQL Server][SQL Server] Error durante el inicio de sesión del usuario "ingeniero".
Sin embargo, con el mismo nombre de usuario puedo ejecutar con éxito ambas "Nuevas consultas SQL" (después de proporcionar la contraseña para cada consulta).
La función evalinsert parece funcionar como se desea.
Agradecería sugerencias sobre cómo resolver el problema e indicar lo que me falta. Atentamente.
conn = Create Database Connection ("ODBC:Description=Server_Database;DRIVER=SQL Server;SERVER=Server;UID=engineer;PWD=%_PWD_%;APP=JMP;WSID=DDPC0283;DATABASE=Data_1;");
Param_Data = New SQL Query(
Version( 130 ),
//conn; //providing connection reference here instead of Connection (below) returns an error
Connection(
"ODBC:Description=Server_Database;DRIVER=SQL Server;SERVER=Server;UID=engineer;PWD=%_PWD_%;APP=JMP;WSID=DDPC0283;DATABASE=Data_1;"
),
QueryName("Data1"),
Select(
Column( "Param1", "t1"),
Column( "Param2", "t1"),
),
From( Table( "ParamData", Schema( "pi" ), Alias( "t1" ))),
);
Process_Data = New SQL Query(
Version( 130 ),
Connection(
"ODBC:Description=Server_Database;DRIVER=SQL Server;SERVER=Server;UID=engineer;PWD=%_PWD_%;APP=JMP;WSID=DDPC0283;DATABASE=Data_2;"
),
QueryName( "Data2" ),
Select(
Column( "Process1", "t2"),
Column( "Process1", "t2"),
),
From( Table( "ProcessData", Schema( "dbo" ), Alias( "t2" ))),
);
//sql query
sql_update = evalinsert(
"
UPDATE pi.ParamData
SET Param1 = '^combined_params^'
WHERE Process1 = '^selected_process^'
"
);
write(sql_update);
execute sql (conn, sql_update);
Hola pmroz,
¡gracias por tu apoyo! Funciona perfectamente y es mucho más sencillo. Sin embargo, todavía había problemas con la creación de la variable conn. Lo que hice, eliminé parte UID=ingeniero de la cadena de parámetros, ya que creo que la autenticación se basa en iniciar sesión en la red interna y recuerda la configuración anterior del nombre de usuario. Además, eliminé el nombre de la base de datos al final de la cadena, ya que se proporciona en la consulta. Atentamente.
conn = Create Database Connection ("ODBC:Description=Server_Database;DRIVER=SQL Server;SERVER=Server;PWD=%_PWD_%;APP=JMP;WSID=DDPC0283;");
Parece que el generador de consultas usa su propia conexión de base de datos.Este código usando EJECUTAR SQL podría ser más simple y solo requiere una conexión a la base de datos:
conn = Create Database Connection ("ODBC:Description=Server_Database;DRIVER=SQL Server;SERVER=Server;UID=engineer;PWD=%_PWD_%;APP=JMP;WSID=DDPC0283;DATABASE=Data_1;");
sql1 =
"SELECT t1.Param1, t1.Param2
FROM pi.ParamData t1";
param_data = execute sql(conn, sql1, "Data1");
sql2 =
"SELECT t2.Process1, t2.Process2
FROM dbo.ProcessData t2";
process_data = execute sql(conn, sql2, "Data2");
//sql query
// Need to load values in for combined_params and selected_process variables
sql_update = evalinsert(
"
UPDATE pi.ParamData
SET Param1 = '^combined_params^'
WHERE Process1 = '^selected_process^'
"
);
write(sql_update);
execute sql (conn, sql_update);
close database connection(conn);