На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > Опять ODBC
      Проблема в следующем:
      Выбораются данные из нескольких dbf таблиц в один RecordSet. После этого все нормально, пока не начинаю пользоваться функцией GetFieldValue. Она выдает сообщение "Positioned request cannot be performed because set was generated by a join condition". Как решить проблему, или ODBC в С++ этого не умеет?
      Если кто знает, помогите.
        :) коллега
        я тож с дбф'ом мучался ....
        короче такая фигня - мне надо было объединить несколько таблиц что я и сделал с успехом пользуясь сиквелом создается объект CDatabase, делаю запрос (ба-а-альшой) для него сиквеловский, в котором объединяю выбираю данные из  нескольких таблиц, на базе этого датабейса делаю CRecordset, и работаю уже с ним - громоздко, но другого выхода не нашел. GetFieldValue работает с индексами полей short, причем они zero-based.
        плз покажь запрос свой sql
          Вот мой SQL
          select F0101000.date,F0101000.time,F0101000.F010100092,F0101010.F010101005 from F0101000,F0101010 order by F0101000.Date,F0101000.Time where F0101000.Date=F0101010.Date and F0101000.Time=F0101010.Time
            :) пугающий запрос - скока 0 и 1  ;)
            ну-у-у вроде правильно
            ExpandedWrap disabled
              <br>SELECT Customers.cname, Salespeople.sname, <br>           Salespeople.city <br>FROM Salespeople, Customers <br>WHERE Salespeople.city = Customers.city;<br>

            дело-то наверно в том как ты читаешь данные
            для GetFieldValue по имени поля не получицца - надо по индексу - номеру поляв получившейся таблице
            в примере - в таблице 3 поля (0=Customers.cname, 1=Salespeople.sname, 2=Salespeople.city)

            во! код:
            ExpandedWrap disabled
              <br>LPCTSTR sqlOpCall = "select  a.N_L, a.C01,a.C02, a.C03, b.N_L from SHEMT AS a, SHEMT AS b \<br>     where (a.KT = 'SN' or a.KT = 'SW') and (a.C03 = b.C03) and (a.X <> b.X) and (a.Y <> b.Y) \<br>     and (   ((a.C01 is not null) and (b.C01 is not null) and (a.C01 = b.C01)) \<br>     or ((a.C01 is not null) and (b.C02 is not null) and (a.C01 = b.C02)) \<br>     or ((a.C02 is not null) and (b.C01 is not null) and (a.C02 = b.C01)) \<br>     or ((a.C02 is not null) and (b.C02 is not null) and (a.C02 = b.C02)) \<br>         ) \<br>     order by a.C03, a.C01, a.C02"<br>.......<br>mDb.OpenEx( _T(callDbase));//ДБФ файлы<br>CRecordset mRecJoinShem(&mDb);<br>mRecJoinShem.Open(CRecordset::snapshot, sqlOpCall);<br>........<br>short index;<br>while (mRecJoinShem.IsEOF())<br>{<br>// читаю значения из полей - их всео 5<br>             mRecJoinShem.GetFieldValue(index, buff1 ); //index=0<br>      index++;<br>..............<br>      mRec.GetFieldValue(index,buff5 ); //index=4<br>      index=0;<br>mRecJoinShem.MoveNext();<br>}<br>

            типа того - и все с успехом работает  :)
            Сообщение отредактировано: -Sman- -
              Цитата SergIG, 13.11.02, 12:36:15
              Вот мой SQL
              select F0101000.date,F0101000.time,F0101000.F010100092,F0101010.F010101005 from F0101000,F0101010 order by F0101000.Date,F0101000.Time where F0101000.Date=F0101010.Date and F0101000.Time=F0101010.Time


              странно как-то ты сортируешь, ордер надо после условия писать
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0274 ]   [ 16 queries used ]   [ Generated: 5.05.24, 16:50 GMT ]