Ciao a tutti,
Ho un problema con la creazione della variabile (o riferimento) dopo la connessione a un database. Volevo creare variabile conn che potrei usare in seguito per eseguire query diverse. All'inizio, però, avevo bisogno di creare 2 connessioni poiché avevo bisogno di dati provenienti da database diversi, ma sullo stesso server SQL (sono richiesti lo stesso nome utente e password). Per entrambe le connessioni devo fornire due volte la password per un determinato nome utente. Vorrei fornirlo una volta e preferibilmente durante la creazione della variabile conn.
Successivamente, ho voluto eseguire la query INSERT per aggiornare solo una cella utilizzando la variabile conn creata in precedenza e senza alcun successo. Il registro JMP dice che si è verificato un problema con la creazione della connessione al database con il nome utente "ingegnere" e indica la riga in cui sto creando la variabile conn:
[Microsoft][Driver ODBC SQL Server][SQL Server] Errore durante il login per l'utente "ingegnere".
Tuttavia, con lo stesso nome utente posso eseguire correttamente entrambe le "Nuove query SQL" (dopo aver fornito la password per ciascuna query).
La funzione evalinsert sembra funzionare come desiderato.
Gradirei suggerimenti su come risolvere il problema e indicare cosa mi manca. Distinti saluti.
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);
Ciao pmroz,
Grazie per il vostro sostegno! Funziona perfettamente ed è molto più semplice. Tuttavia, c'erano ancora problemi con la creazione della variabile conn. Quello che ho fatto, ho rimosso una parte UID=ingegnere dalla catena dei parametri, poiché penso che l'autenticazione sia basata sull'accesso alla rete interna e ricordi le precedenti impostazioni del nome utente. Inoltre, ho rimosso il nome del database alla fine della catena, poiché è fornito nella query. Distinti saluti.
conn = Create Database Connection ("ODBC:Description=Server_Database;DRIVER=SQL Server;SERVER=Server;PWD=%_PWD_%;APP=JMP;WSID=DDPC0283;");
Sembra che il generatore di query utilizzi la propria connessione al database.Questo codice usando ESEGUIRE SQL potrebbe essere più semplice e richiede solo una connessione al database:
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);