Spaltenwert für SQL-EingabeMeiner Meinung nach sollte dies einfach sein, aber nachdem ich in den letzten Tagen verschiedene Methoden ausprobiert, frühere Diskussionen durchsucht und auf den Skriptindex verwiesen habe, habe ich keine Ergebnisse gefunden.
Ich möchte die Werte aus der Datentabelle durchlaufen und sie als Eingaben für die SQL-Abfrage verwenden, wobei die Datentabellenwerte „Chargencodes“ sind und die SQL-Abfrage auf „wo vcLotCode wie …“ verweist.Ich werde mich später mit der Schleife befassen, ich habe Mühe, auch nur den ersten Wert zum Laufen zu bringen.Ich habe verschiedene Iterationen von „select“, „set“, „get“ usw. ausprobiert.Jede Hilfe wird geschätzt.
// 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>Betreff: Spaltenwert für SQL-EingabePerfekt.Vielen Dank!
Betreff: Spaltenwert für SQL-EingabeIch stimme zu, dass es in diesem Fall von Vorteil ist, die drei Schritte in separate Aktionen aufzuteilen, während Sie die Abfragen bearbeiten.
Mit diesem Ansatz könnten Sie auch einfach Substitute() auf dem Boilerplate sqlstr verwenden.
Betreff: Spaltenwert für SQL-EingabeNoch ein Kommentar: Sie verwenden den LIKE-Operator, aber keine Platzhalter.Vielleicht hast du so etwas gemeint?
"select vcLotCode, vcWaferCode, dAvg
from fr.database
where vcLotCode like '%^lotcode^%'");
Betreff: Spaltenwert für SQL-EingabeEin paar Dinge:
o Sie verwenden Open Database.ich bevorzuge Datenbankverbindung erstellen + SQL ausführen + Datenbankverbindung schließen .Der Vorteil von SQL ausführen besteht darin, dass Sie eine Verbindung zur Datenbank herstellen und damit mehrere SQL-Anweisungen ausführen können.Die offene Datenbank erstellt für jede SQL-Anweisung eine neue Verbindung
o Sie müssen nicht alle diese Bewertungen, Ersatz usw. verwenden.Darüber hinaus gibt es Variablen, die nicht definiert sind, wie z. B. Datenquelle und SQLcode.
Probieren Sie diesen Code aus:
// 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);
Betreff: Spaltenwert für SQL-EingabeEs sind zwei Punkte zu beachten. Erstens kann der Code stark vereinfacht werden. Durch diese Änderung wird die Möglichkeit von Fehlern verringert und das Auffinden dieser Fehler erleichtert. Zweitens manipulieren Sie Zeichenfolgen für die Argumente der Funktion „Open Database()“. Das doppelte Anführungszeichen ist das Trennzeichen für Zeichenfolgen. Eingebettete doppelte Anführungszeichen müssen daher mit der Escape-Sequenz „\!“ gekennzeichnet werden. (Schrägstrich, Knall).
Testen Sie dieses Skript. (Ich kann nicht.)
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]
)
)
)
);