Bonjour tout le monde,
J'ai un problème avec la création de variable (ou de référence) après la connexion à une base de données. Je voulais créer une variable Connecticut que je pourrais utiliser plus tard pour exécuter différentes requêtes. Au début, cependant, j'avais besoin de créer 2 connexions car j'avais besoin de données provenant de différentes bases de données, mais sur le même serveur SQL (le même nom d'utilisateur et le même mot de passe sont requis). Pour les deux connexions, je dois fournir deux fois le mot de passe pour un nom d'utilisateur donné. Je voudrais le fournir une fois et de préférence lors de la création de la variable conn.
Plus tard, j'ai voulu exécuter la requête INSERT pour mettre à jour une seule cellule en utilisant la variable conn créée précédemment et sans succès. Le journal JMP indique qu'il y a eu un problème lors de l'établissement de la connexion à la base de données avec le nom d'utilisateur "ingénieur" et indique la ligne où je crée la variable conn :
[Microsoft][Pilote ODBC SQL Server][SQL Server] Erreur lors de la connexion pour l'utilisateur "ingénieur".
Cependant, avec le même nom d'utilisateur, je peux exécuter avec succès les deux "nouvelles requêtes SQL" (après avoir fourni un mot de passe pour chaque requête).
La fonction evalinsert semble fonctionner comme souhaité.
J'apprécierais des conseils sur la façon de résoudre le problème et d'indiquer ce qui me manque. Cordialement.
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);
Bonjour pmroz,
Merci pour votre soutien! Cela fonctionne parfaitement et c'est beaucoup plus simple. Cependant, il y avait toujours un problème avec la création de la variable conn. Ce que j'ai fait, j'ai enlevé une partie UID=ingénieur de la chaîne de paramètres, car je pense que l'authentification est basée sur la connexion au réseau interne et qu'elle se souvient des paramètres de nom d'utilisateur précédents. De plus, j'ai supprimé le nom de la base de données à la fin de la chaîne, car il est fourni dans la requête. Cordialement.
conn = Create Database Connection ("ODBC:Description=Server_Database;DRIVER=SQL Server;SERVER=Server;PWD=%_PWD_%;APP=JMP;WSID=DDPC0283;");
Il semble que le générateur de requêtes utilise sa propre connexion à la base de données.Ce code utilisant EXÉCUTER SQL pourrait être plus simple, et ne nécessite qu'une seule connexion à la base de données :
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);