Datum von sqlda_t Struktur auslesen

Guten Tag!
Ich bin Anfänger und möchte euch um Hilfe bitten. Ich versuche ein Datum aus sqlda_t Struktur mit C auslesen. Es kommt falsches Datum 2000-01-10, obwohl in Abfrage 2021-10-02 festgelegt ist.

Könntet ihr eine Tipp geben, woran das Problem liegt?

image

EXEC SQL BEGIN DECLARE SECTION;
char query[1024] = “select ‘2021-10-02’::date”;
char colname[1024];
EXEC SQL END DECLARE SECTION;

    // Connect to DB 
    EXEC SQL CONNECT TO db_test;
    
    EXEC SQL PREPARE stmt FROM :query;
    EXEC SQL DECLARE cur CURSOR FOR stmt;
    
    EXEC SQL OPEN cur;

    EXEC SQL FETCH NEXT FROM cur INTO DESCRIPTOR sqlda_d;

    int i;
    for (i=0 ; i < sqlda_d->sqld ; i++) 
    {
            sqlvar_t v = sqlda_d->sqlvar[i];

            strncpy( colname, v.sqlname.data, v.sqlname.length );
            colname[v.sqlname.length] = '\0';

            printf("\n"); 
            printf("Type='%d'\n", v.sqltype );
            printf("NLength='%d'\n", v.sqlname.length );
            printf("Name='%s'\n", colname );

            switch( v.sqltype )
            {
                    case ECPGt_date:

                            printf("length von v.sqldate : %u Bytes\n", v.sqllen);

                            printf("DATE von  SQLDA: PGTYPESdate_to_asc '%s'\n", PGTYPESdate_to_asc( *(char*)(v.sqldata)));

                            break;
            }
            printf("\n"); 
    }
    EXEC SQL CLOSE cur;
    EXEC SQL COMMIT;
    EXEC SQL DISCONNECT ALL;

Hallo,
kann es sein, dass dein Query Fehlerhaft ist?
Wie ist die Query komplett, wenn du es mit dein C-Code ausgibst (In Terminal, Gui “label”, txt Datei, etc…) ?
Des weiteren wie sind den alle Ausgaben, da du eine for Schleife verwendest.

VG pg0ne.

Hallo, vielen Dank für Bereitschaft zu helfen!

Dazwischen habe die Code komplett geändert und Testtabelle erzeugt, aber Datum auslesen geht so wie so nicht.

Ausgabe von Programm:

Und die Qullcode selbst:

EXEC SQL BEGIN DECLARE SECTION;
char query[1024] = “select * from okonto limit 1”;
char colname[1024];
EXEC SQL END DECLARE SECTION;

// Connect to DB
EXEC SQL CONNECT TO test_db;

EXEC SQL PREPARE stmt FROM :query;
EXEC SQL DECLARE cur CURSOR FOR stmt;

EXEC SQL OPEN cur;

EXEC SQL FETCH NEXT FROM cur INTO DESCRIPTOR sqlda_d;

int i;
for (i=0 ; i < sqlda_d->sqld ; i++) 
{
	sqlvar_t v = sqlda_d->sqlvar[i];

	strncpy( colname, v.sqlname.data, v.sqlname.length );
	colname[v.sqlname.length] = '\0';

	printf("\n"); 
	printf("Colname ='%s'\n", colname );
	printf("Type='%d'\n", v.sqltype );

	switch( v.sqltype )
	{
		case ECPGt_date:
			printf("length: %u\n", v.sqllen);
			printf("datum '%s'\n", PGTYPESdate_to_asc( v.sqldata ));
			break;

		case ECPGt_char:
			printf("length: %u\n", v.sqllen);
			printf("name '%s'\n", v.sqldata);
			break;

		case ECPGt_short:
			printf("length: %u\n", v.sqllen);
			printf("set '%u'\n", *(short*) v.sqldata);
			break;

		case ECPGt_int:
			printf("length: %u\n", v.sqllen);
			printf("id '%d'\n", *(int*) v.sqldata);
			break;

		case ECPGt_long_long:
			printf("length: %u\n", v.sqllen);
			printf("summe '%ld'\n", *(long long*) v.sqldata);
			break;

		case ECPGt_double:
			printf("length: %u\n", v.sqllen);
			printf("preis '%.2f'\n", *(double *)(v.sqldata));
			break;

		default:	
			break;
	}
	printf("\n"); 
}

Hier ist noch Tabelle:
sel-ausgabe

Und die Datentypen von der Tabelle:

tabinfo

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.