Valeur de colonne pour l'entrée SQLJ'ai l'impression que cela devrait être simple, mais après avoir essayé diverses méthodes au cours des derniers jours, recherché des discussions précédentes et fait référence à l'index de script, je suis vide.
Je souhaite parcourir les valeurs de la table de données et les utiliser comme entrées pour la requête SQL, où les valeurs de la table de données sont des "codes de lot" et la requête SQL fait référence à "où vcLotCode comme ...".Je m'occuperai de la boucle plus tard, j'ai du mal à faire fonctionner même la première valeur.J'ai essayé différentes itérations de "select", "set", "get", etc...Toute aide est appréciée.
// 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"})
),
);
// One attempt to set lot code to values from table
dt<<SELECT rows=""></SELECT>Re : Valeur de la colonne pour l'entrée SQLParfait.Merci beaucoup!
Re : Valeur de la colonne pour l'entrée SQLJe suis d'accord que dans ce cas, il y a un avantage à diviser les trois étapes en actions distinctes lorsque vous interagissez sur les requêtes.
En utilisant cette approche, vous pouvez également simplement utiliser Substitute() sur le passe-partout sqlstr.
Re : Valeur de la colonne pour l'entrée SQLUn autre commentaire - vous utilisez l'opérateur LIKE mais n'utilisez pas de caractères génériques.Peut-être que vous vouliez dire quelque chose comme ça ?
"select vcLotCode, vcWaferCode, dAvg
from fr.database
where vcLotCode like '%^lotcode^%'");
Re : Valeur de la colonne pour l'entrée SQLQuelques choses:
o Vous utilisez Open Database.je préfère créer une connexion à la base de données + exécuter SQL + fermer la connexion à la base de données .L'avantage de exécuter SQL est que vous créez une connexion à la base de données et que vous pouvez exécuter plusieurs instructions SQL avec.La base de données ouverte crée une nouvelle connexion pour chaque instruction SQL
o Vous n'avez pas besoin d'utiliser toutes ces évaluations, ces substituts, etc.De plus, il existe des variables qui ne sont pas définies comme datasource et sqlcode.
Essayez ce code :
// 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 : Valeur de la colonne pour l'entrée SQLIl y a deux points à considérer. Tout d'abord, le code peut être grandement simplifié. Ce changement réduira les risques d'erreurs et les rendra plus faciles à trouver. Deuxièmement, vous manipulez des chaînes de caractères pour les arguments de la fonction Open Database(). Le guillemet double est le délimiteur des chaînes. Les guillemets doubles incorporés doivent donc être identifiés par la séquence d'échappement "\!" (barre oblique inverse, bang).
Testez ce script. (Je ne peux pas.)
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]
)
)
)
);