tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
210
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    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
     
    All we have to decide is what to do with the time that is given to us.

    Gruß Chris

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Laut http://msdn.microsoft.com/en-us/libr...v=sql.90).aspx

    Haben Date/Time Literale folgende Form:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    { literal_type 'constant_value' }
     
    literal_type
    Specifies the type of the escape sequence. Timestamps have three literal_type specifiers:
     
    d = date only
     
    t = time only
     
    ts = timestamp (time + date)
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    Servus Meister,

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

    Code :
    1
    2
    
    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 :
    1
    
    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 :
    1
    
    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
     
    All we have to decide is what to do with the time that is given to us.

    Gruß Chris

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Versuch's mal so:
    Code c:
    1
    2
    3
    4
    5
    6
    7
    
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    Jo, so hats hingehaun, dank dir

    PS: achtet nebenbei immer drauf wie groß ihr eure buffer wählt hab grad einige Std damit verschissen
     
    All we have to decide is what to do with the time that is given to us.

    Gruß Chris

Ähnliche Themen

  1. SQL/Oracle date/time -> suche Date
    Von Goldman im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 20.05.09, 15:28
  2. [Oracle 8i] An Oracle 8i über Vb und ODBC anmelden/DB bearbeiten
    Von Animal21 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.06.08, 11:00
  3. MS SQL Server -> ODBC -> Oracle
    Von Don_Pazo im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 16.03.08, 18:37
  4. ODBC (Oracle light auf PDA)
    Von MWA im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 01.08.03, 11:50
  5. ODBC (Oracle light auf PDA)
    Von MWA im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 01.08.03, 11:49