6.19 infraDBSelect – Lesen eines Satzes
lRc = Object.infraDBSelect(lTable, lPath, strKeys, lLock )
IPS: infraDBSelect(lTable, lPath, strKeys, lLock, lRc)
|
Argumente
|
lTable Nummer der Tabelle, die gelesen werden soll.
lPath Nummer des Pfades über den gelesen werden soll.
strKey Schlüssel durch „,|;“ getrennt. (s.u.)
lLock
| ||||||
|
Rückgabewerte
|
sonst infra-Kernsystemfehler
| ||||||
|
Beschreibung
|
Die infra-Datenbank besteht aus maximal 255 Tabellen. Jede Tabelle entspricht einer Datei, z.B. TEILE.DAT für die Tabelle 6. Mit Hilfe von lTable wird somit die Tabelle angegeben aus der Daten zu lesen sind.
Pro Tabelle kann nur ein Satz gesperrt werden.
Multiple Lock lässt infraDBcom nicht zu.
Bei mehrfachem Aufruf mit lLock = 1 bleibt nur der letzte Satz gesperrt, die anderen Sätze werden wieder freigegeben.
Datensätze einer Tabelle werden über Indexpfade gelesen.
Es gibt maximal 8 Indexpfade pro Tabelle.
Ein Indexpfad besteht aus einer Mengen von Indexstrings, die aus Schlüsselfeldern eines Datensatzes zusammengesetzt und sortiert sind.
Diese Indexstrings haben wiederum einen Verweis auf den Datensatz aus dem die Werte stammen.
Indexpfade können eindeutig und mehrdeutig sein.
Eindeutig ist ein Indexpfad, wenn jeder Indexstring einmal pro Indexpfad vorkommt.
Bei einem mehrdeutigen Indexpfad kann es mehrere gleiche Indexstrings pro Indexpfad geben.
Der infra-Datenbankstatus beschreibt den Indexpfad und den Indexstring pro Tabelle. In der Spalte „Nr.“ ist die Nummer des Indexpfades angegeben, die der Variablen lPath mitzugeben ist. In der Spalte „Pfadname“ steht die Bezeichnung des Pfades und in der nächsten Spalte „eindeutig“ finden Sie die Antwort darauf, ob ein Indexpfad eindeutig oder mehrdeutig ist.
Die nächsten Spalten zählen die Felder auf, aus denen der Indexstring zusammengesetzt ist.
Der Variablen strKey übergibt man die Schlüssel.
Die Schlüssel bilden den Indexsuchstring der im Indexpfad mit den Indexstrings verglichen wird.
Bei der Suche werden Strings verglichen, z.B. kommt zuerst 10 gefolgt von 2, d.h. 10 < 2;
Im Ergebnis wird der Datensatz zurückgeliefert, bei dem der Indexsuchstring >= Indexstring ist.
Die Schlüssel können mit „;,|“ getrennt übergeben werden (s.u.). Die Funktion stellt die Schlüssel der Reihe nach linksbündig in den Schlüsselfeldern des Puffers ab.
Bitte beachten Sie, dass Leerzeichnen vor dem Schlüssel bzw. linksbündige Leerzeichen auch zum Schlüssel zählen.
Hinweis:
Beim Lesen über einen mehrdeutigen Pfad ist lRc, bzw. der Rückgabewert von infraDBSelect immer 10.
Diese Funktion liefert beim Lesen über einen eindeutigen Pfad 0 zurück, falls Indexsuchstring == Indexstring andernfalls 10 bei Indexsuchstring > Indexstring ist.
Weitere Sätze können mit infraDBFetchNext oder infraDBFechPrev gelesen werden.
Beispiel: Der Indexstring für den Pfad 4 der Tabelle 40 besteht aus Teilenummer + Fertigungsauftragsnummer.
Der Schlüssel besteht in diesem Fall z.B. aus “0110012;81731“. Falls sich in der Tabelle ein Fertigungsauftrag mit der Auftragsnummer “81731“ für das Teil “0110012“ befindet, stehen nach dem Aufruf von infraDBSelect die restlichen Werte im Puffer und können Feldweise mit Hilfe der Query–Funktionen (infraDBQRF*) gelesen werden.
lRc ist in diesem Fall 0.
Ist die Tabelle leer, wird in lRc 32 zurückgegeben.
Bei lRc == 10 wurde der Datensatz nicht gefunden, es stehen aber die Werte des nächsten Satzes im Puffer.
Angaben zu den Tabellen können aus dem infra-Datenbankstatus entnommen werden.
![]() Die Funktion infraDBBufSetKeys benutzt dieselben Komponenten wie infraDBSelect, jedoch wird kein Datensatz aus der Tabelle gelesen.
Trennzeichen
Die Standard-Trennzeichen (,|;) können mit dem Eintrag „Delimiter=...“ in der Sektion [INFRADBCOM] der infra-Datei SIBPPS.INI übersteuert werden, wenn diese Zeichen z.B. auch in den anzugebenden Schlüsselfeldinhalten vorkommen können.
| ||||||
|
Funktionsart
|
infraDBFunktion
Basic-Skript
Java-Skript
IPSFunktion
| ||||||
|
Beispiel Basic-Skript
|
lRc = oIDB.infraDBSelect( 6, 1, "0110012", 0 )
if( lRc = 32 ) Then
MsgBox "Tabelle Teile (6) ist leer "
Exit Sub
End IF
while( Trim( oIDB.infraDBQRF(3) ) <= "0110032" )
strValue = oIDB.infraDBQRF(3)
MsgBox " Update von: " & strValue
strKey = oIDB.infraDBQRF(3)
lRc = oIDB.infraDBSelect( 6, 1, strKey, 1 ) 'sperre Satz
If( lRc = 0 ) Then
oIDB.infraDBSRF 98, strText
lRc = oIDB.infraDBUpdate()
If( lRc ) Then
MsgBox oIDB.infraDBGetSystemMessage( lRc )
End If
Else
MsgBox( oIDB.infraDBGetSystemMessage( lRc ) )
End If
lRc = oIDB.infraDBFetchNext
if( lRc ) Then
break
End If
Wend
| ||||||
|
Beispiel Java-Skript
|
var lRc = oIDB.infraDBSelect( 6, 1, "0110012", 0 );
while( oIDB.infraDBQRF(3) <= "0110032" ){
var strValue = oIDB.infraDBQRF(3);
WScript.Echo( " Update von: " + strValue );
lRc = oIDB.infraDBSelect(6,1,oIDB.infraDBQRF(3),1 );//sperre Satz
if( lRc == 0 ){
oIDB.infraDBSRF( 74, "Durch Skript angepasst." );
lRc = oIDB.infraDBUpdate();
if( lRc )
WScript.Echo( oIDB.infraDBGetSystemMessage( lRc ) );
}
else
WScript.Echo( oIDB.infraDBGetSystemMessage( lRc ) );
lRc = oIDB.infraDBFetchNext();
if( lRc ) break;}
|

