PDA

View Full Version : recio: Problem mit _Rreadk()



chm
26-09-07, 13:59
Hallo zusammen,

ich versuche schon seit mehreren Tagen eine Tabelle (erste drei Felder sind der PK) mittels der Record I/O API zu lesen. Das sequenzielle Auslesen funktioniert auch, nur wenn ich mit einem Key darauf zugreifen will, erhalte ich meistens errno = 3101 oder 3102 (mehr dazu weiter unten nach dem Code).

Ich kann mir nicht wirklich erklären, was ich falsch mache, daher hoffe ich hier Hilfe zu bekommen.

Mein Progamm sieht in etwa so aus (auf das wichtigste zusammengefasst):

Die Tabelle ist GGFBX003
GGFBX003r und GGFBX003k werden in einer Header-Datei per #pragma mapinc (und anschließedendem typedef) erzeugt. r ist die Satz-Struktur (record), k ist die struct auf die Schlüsselfelder.


...
#include <recio.h>

int main( int argc, char **argv ) {
_RFILE *fp;
_RIOFB_T *fb;

GGFBX003r ggfbx003r;
GGFBX003k ggfbx003k;

memset( &ggfbx003r, ' ', sizeof( ggfbx003r ) );
memset( &ggfbx003k, ' ', sizeof( ggfbx003k ) );

if( ( fb = _Ropen( "*LIB/GGFBX003", "rr, nullcap=Y" ) ) == NULL )
exit( EXIT_FAILURE );

// Nachfolgend nur beispielhafte Daten!
snprintf( ggfbc003k.LKZ, sizeof( ggfbc003k.LKZ ), "ABC000" ); // char 10
snprintf( ggfbc003k.GRPID, sizeof( ggfbc003k.GRPID ), "DEF123" ); // char 10
snprintf( ggfbc003k.UIDX, sizeof( ggfbc003k.UIDX ), "GHI456" ); // char 20

_Rformat( fp, "GGFBX003" );

fb = _Rreadk( fp, &ggfbx003r, sizeof( ggfbx003r ), __KEY_EQ,
&ggfbx003k, sizeof( ggfbx003k ) );

printf( "UIDX: %d %.*s\n", errno, sizeof(ggfbx003r.UIDX), ggfbx003r.UIDX );

...
}
- Wenn ich __KEY_EQ in _Rreadk() nutze, bekomme ich immer den errno = 3102 -> EIORECERR "Behebbarer E/A Fehler aufgetreten".

- Übergebe ich hingegen __KEY_GE/GT/NEXTUNQ, bekomme ich keinen Fehler, es wird dann immer der erste Satz in der Tabelle ausgegeben.

- __KEY_NEXTEQ gibt errno = 3101 "Nicht behebbarer E/A-Fehler aufgetreten."

Danke schonmal im Vorraus!

Grüße, Christian</recio.h>