C, odbc, oracle und Date queries

Biergamasda

Erfahrenes Mitglied
Hallo leute,

Ich suche jetzt schon den ganzen Tag, also kommt mir bitte nicht mit so einem Kram ;)

Ich möchte gerne mit C und unixODBC treibern auf eine Oracle DB connecten und queries absetzen. Alles kein Problem - so lange es sich um keine Queries handelt, bei denen Date oder Timestamp zum einsatz kommt. Sobald ich nach einträgen ab einem Gewissen Datum selecten will, findet der gar nix mehr.

Habe bereits versucht die vergleichswerte für die Felder per String mitzugeben, das ganze über SQLPrepareStmt als SQL_TIMESTAMP bzw SQL_DATE zu binden... jedoch alles ohne Erfolg.

Hoffe ihr könnt mir da weiterhelfen.

Gruß
Christoph
 
Servus Meister,

erstmal Danke für die Antwort, hab das ganze soeben ausprobiert:

Code:
snprintf(sql, sizeof(sql), "SELECT roomNo, userPass, adminPass, adminFlags, userFlags, bookId, is_locked, running_on_server FROM booking WHERE roomNo = '?' AND startTime <=  { ts '?' }  AND endTime >= { ts '?' } for update;"); 								
		stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, &gps);

die Parameter sind wie folgt definiert:
Code:
char *argv[] = { userIn->roomNo, "2011-10-04 01:23:56.123", "2011-10-04 01:23:56.123" };

des weiteren werden die Parameter als SQL_CHAR gebunden:

Code:
SQLBindParameter(stmt, i + 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(gps->argv[i]), 0, gps->argv[i], 0, NULL);


Das ganze basiert auf unixODBC (weiß jetzt nicht ob das einen Unterschied macht, vermutlich schon)

jedenfalls bekomme ich als output:
[Oct 4 16:49:35] WARNING[16454] res_odbc.c: SQL Execute returned an error -1: 42S22: [Oracle][ODBC][Ora]ORA-00904: "TS": invalid identifier
(110)

noch ne Idee? :)

lg
 
Hi.

Versuch's mal so:
C:
SQLCHAR sql_stmt[] = "select * from log where timestamp <= ?";
char date[] = "2011-10-05 09:59:45";
SQLLEN date_sz = SQL_NTS;

ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT,
			 SQL_C_CHAR, SQL_TYPE_TIMESTAMP, 23,
			 0, date, 0, &date_sz);
Gruß
 
Jo, so hats hingehaun, dank dir :)

PS: achtet nebenbei immer drauf wie groß ihr eure buffer wählt :( hab grad einige Std damit verschissen
 
Zurück