infra:NET User
 
×
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
  • 0: Keine Sperre des Datensatzes
  • 1: Datensatz wird gelesen und mit einem Single Lock versehen. Der Single Lock wird durch infraDBUpdate, infraDBDelete und infraDBUnlock aufgehoben.
Rückgabewerte
lRc == 0
Kein Fehler
lRc == 10
Kein Satz zum Schlüssel gefunden. Im Puffer befindet sich der nächste oder der letzte Datensatz.
lRc == 32
Datenbankdatei ist leer
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;}