ODBC: Anzahl der Spalten ermitteln?



  • Hi Coders,

    weis jemand von euch wie ich über ODBC rauskriegen kann, wieviele Anzahl an Spalten mein Query-Result hat? Weil ich ja jede Spalte mit SQLBindCol() binden muss, aber nicht die Anzahl der Spalten weiss, will ich das dynamisch allokieren und realisieren.

    Danke & Grüsse,
    ~code_pilot 😉



  • SQLNumResultCols()



  • hey super!
    Und wie kann ich rausbekommen wieviel Speicher eine Spalte benötigt?



  • SQLDescribeCol() oder wahlweise SQLColAttribute()



  • hi frenki,

    hmm ich hasse funktionen die tausend pointer als parmeter erwarten... und schlauer geworden bin ich durch folgendes auch nicht:

    short namelength, datatype, digits, nullable;
                    unsigned long size;
                    char colname[80];
                    ret = SQLDescribeCol(st, i+1, colname, 80, &namelength, &datatype, &size, &digits, &nullable);
    
                    printf("1: %s\n", colname);
                    printf("2: %d\n", namelength);
                    printf("3: %d\n", datatype);
                    printf("4: %d\n", size);
                    printf("5: %d\n", digits);
                    printf("6: %d\n", nullable);
    

    Führt bei mir zu der Ausgabe

    1: id
    2: 2
    3: 4
    4: 1
    5: 0
    6: 1
    1: name
    2: 4
    3: 1
    4: 9
    5: 0
    6: 1
    1: vorname
    2: 7
    3: 1
    4: 5
    5: 0
    6: 1

    da steht aber keine länge eines feldes, nur der Typ. Bei dem Aufruf von SQLColAttribute() ist mir der Parameter FieldIdentifier irgendwie unklar, und das führt auch zu keinem Ergebnis:

    short namelength;
                    short size;
                    int numeric;
                    char colname[80];
                    ret = SQLColAttribute(st, i+1, 1, &colname, 80, &size, &numeric);
    
                    printf("1: %s\n", colname);
                    printf("2: %d\n", namelength);
                    printf("3: %d\n", size);
                    printf("4: %d\n", numeric);
    

    Und das kommt raus:

    1: id
    2: 64
    3: 2
    4: -3
    1: name
    2: 64
    3: 4
    4: -3
    1: vorname
    2: 64
    3: 7
    4: -3

    Kann mir ggf. jemand mal ein Beispiel geben? Ich möchte nämlich alle Werte als Strings erhalten, und um z.B. den Speicherplatz für einen String für ein VARCHAR(30) Feld zu erhalten bringt mir die Information, das es sich um einen String handelt (in meinem Fall in der Variablen datatype) herzlich wenig.

    Danke & Gruss,
    ~code_pilot



  • Gibts keine Funktion mit der du den SQL-Text direkt eingeben kannst?



  • imhotep schrieb:

    Gibts keine Funktion mit der du den SQL-Text direkt eingeben kannst?

    hmm? Verstehe diese Frage nicht ganz.



  • Zum Beispiel bei Java gibt es Möglichkeiten die SQL-Befehle im Programm einzugeben, die werden dann an die Datenbank gesendet und die Ergebnisse zurückgegeben.


Anmelden zum Antworten