[C] meerdere cursors

Pagina: 1
Acties:

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
Zoals jullie zien roept de functie hieronder printWeekScheduleForSimulatorEx aan, in deze functie wordt er weer een Lda_Def en Cda_Def gedeclareerd, en ook weer wordt sqllda(&lda); gedaan in die functie.
Echter, daarop crasht hij. Is er enige manier waarop ik dat kan omzeilen of waarop het beter kan ?!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void
printWeekScheduleForSimulator( FILE *Printer, int Monday, unsigned SimIndex )
{
    char select[] = "SELECT distinct company from si_userref_t1";
    char *company;
    Lda_Def lda;
    Cda_Def cursor;

    sqllda(&lda);
    if( !OpenCursor(&lda, &cursor))
    {
     if( !ParseToCursor( &lda, &cursor, select ) &&
         !DefineString( &lda, &cursor, 1, company, 5) &&
         !ExecuteStatement( &lda, &cursor )   &&
         !FetchSingle(&lda, &cursor)
       )
       while( !FetchSingle( &lda, &cursor))
       {
           printWeekScheduleForSimulatorEx(Printer, Monday, SimIndex, company);
       }
    }
    CloseCursor(&lda, &cursor);
}

edit:

Wat overigens ook prima zou zijn is als ik de cursor kan sluiten, dan die funcite uitvoeren, en vervolgens gewoon de cursor were kan openen en doorgaan met de query waar hij gebleven was... Alleen ik weet niet hoe.

Verwijderd

Wat hoort sqllda() te doen? Je zegt dat ie daarop crasht, maar als we niet wetne wat die functie doet is het moelijk gokken. ;).

Wat wel zo is, is dat je een ongeinitialiseerde variabele (dus eentje die wel geheugen heeft, maar die geen waarde heeft) aan sqllda() meegeeft - het lijkt me dat dat de oorzaak is. Moet je niet een van de waardes in die struct eerst een waarde geven voordat je de struct als pointer aan sqllda() meegeeft?

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
sqllda is onderdeel van de OCI (oracle call interface).
Er staat in de documentatie onder purpose:
The sqllda() routine is for programs that mix precompiler code and OCI calls. A pointer to an LDA is passed to sqllda(). On return from sqllda(), the fields in the LDA are filled in.

Overigens crasht hij niet bij deze sqllda aanroep die ik heb laten zien, maar in die van de aangeroepen functie in de while-loop. Als je wilt wil ik die ook wel laten zien, is alleen een stukje groter.

edit:
Ik vermoed dat hij crasht omdat ik de cursor niet sluit voordat ik de andere open. Vandaar ook dat het nuttig zou zijn als ik op de een of andere manier de cursor kan sluiten en dan als hij weer terug is gekeerd van de andere functie toch verder kan gaan met het uitlezen van de companies

Verwijderd

Op donderdag 20 juni 2002 13:40 schreef Dash2in1 het volgende:
edit:
Ik vermoed dat hij crasht omdat ik de cursor niet sluit voordat ik de andere open. Vandaar ook dat het nuttig zou zijn als ik op de een of andere manier de cursor kan sluiten en dan als hij weer terug is gekeerd van de andere functie toch verder kan gaan met het uitlezen van de companies
Zou ook kunnen. Probeer eens een cursor tegelijk open te houden - dan zul je dus je lus ietsje anders moeten opbouwen.