Project

General

Profile

The dbo::collection iterator does retuns the same value on interation, please let me know how fix it.

Added by Rathnadhar K V over 9 years ago

Namasthe,

My mysql table is as follows:

-----------------------------------------------------------------------------------------------------------+

| Field | Type | Null | Key | Default | Extra |

-----------------------------------------------------------------------------------------------------------+

| country_iso_3166_numeric_code | smallint(6) | NO | PRI | 0 | |

| country_iso_3166_a2_code | varchar(2) | YES | MUL | ZZ | |

| country_iso_3166_a3_code | varchar(3) | YES | | ZZZ | |

| country_name | varchar(48) | YES | | UNDEFINED | |

| country_legal_name | varchar(128) | YES | | UNDEFINED | |

| country_native_name | varchar(256) | YES | | UNDEFINED | |

| currency_iso_4217_number_code | smallint(6) | YES | MUL | 999 | |

| country_calling_code | int(11) | YES | | 0 | |

| country_internet_extension | varchar(3) | YES | | .zz | |

| country_follows_dst | tinyint(1) | YES | | 0 | |

-----------------------------------------------------------------------------------------------------------+

country_iso_3166_numeric_code content is as follows (first 10 values):

AF

AL

AQ

DZ

AS

AD

AO

AG

AZ

AR

my ORM class is as follows:

#include

#include

namespace dbo = Wt::Dbo;

class sambhaashane_country_iso_3166_orm;

namespace Wt

{

namespace Dbo

{

template<>

struct dbo_traits : public dbo_default_traits

{

static const char *id()

{

return "country_iso_3166_numeric_code";

}

static const char *surrogateIdField()

{

return 0;

}

static const char *versionField()

{

return 0;

}

};

}

}

class sambhaashane_country_iso_3166_orm

{

public:

int country_iso_3166_numeric_code;

std::string country_iso_3166_a2_code;

std::string country_iso_3166_a3_code;

std::string country_name;

std::string country_legal_name;

std::string country_native_name;

int currency_iso_4217_number_code;

int country_calling_code;

std::string country_internet_extension;

bool country_follows_dst;

template

void persist(Action& a)

{

dbo::id(a,country_iso_3166_numeric_code,"country_iso_3166_numeric_code");

dbo::field(a, country_iso_3166_numeric_code, "country_iso_3166_numeric_code");

dbo::field(a, country_iso_3166_a2_code, "country_iso_3166_a2_code");

dbo::field(a, country_iso_3166_a3_code, "country_iso_3166_a3_code");

dbo::field(a, country_name, "country_name");

dbo::field(a, country_legal_name, "country_legal_name");

dbo::field(a, country_native_name, "country_native_name");

dbo::field(a, currency_iso_4217_number_code, "currency_iso_4217_number_code");

dbo::field(a, country_calling_code, "country_calling_code");

dbo::field(a, country_internet_extension, "country_internet_extension");

dbo::field(a, country_follows_dst, "country_follows_dst");

}

};

typedef dbo::collection< dbo::ptr> Countries;

Countries countries;

The snippet of my code to get data from the above table is as follows:

session.mapClass("country_iso_3166_tbl");

dbo::Transaction transaction1(session);

countries = session.find();

Countries::const_iterator country = countries.begin();

while(country != countries.end())

{

std::cout << "Country: " << (*country)->country_iso_3166_a2_code;

country;

}

The output is as follows:

1] Country: AF

2] Country: AF

3] Country: AF

4] Country: AF

5] Country: AF

6] Country: AF

....

247] Country: AF

the collection has same value for all 247 entries ..which is wrong. The iterator exits after 247 interations which is correct.

But the vaues shown for the country_iso_3166_a2_code is same for all 247 iterations, which is wrong.

Where am I going wrong? How to fix the issue so that interator iterates over 247 values with different values for country_iso_3166_a2_code.

Regards

Rathna


Replies (17)

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Rathnadhar K V over 9 years ago

Namasthe,

On debugging I found that

Countries::const_iterator country

was not iterating on country; directive.

So the iterator was struck at a particular value. But strangely (country != countries.end()) was exiting after 246 loops as expected. That means the country value should have changed....bit puzzling....

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Alex V over 9 years ago

I don't see how this isn't working for you.

This code works perfectly for me (Wt version 3.3.3)

@Wt::Dbo::collection<Wt::Dbo::ptr> files = session_.find();

Wt::Dbo::collection<Wt::Dbo::ptr>::const_iterator i = files .begin();

while(i != files.end())

{

std::cout << "Country: " << (*i)->size;

i;

}@

You are showing us your first 10 rows for the field: country_iso_3166_numeric_code

but you are iterating over the database and printing the field: country_iso_3166_a2_code

are you sure that country_iso_3166_a2_code field is not full of AF values?

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Rathnadhar K V over 9 years ago

Namasthe Alex,

The problem got worse now. I am getting exception !!

Here is my code:

int main(int argc, char **argv)

{

/*

  • Setup a session, would typically be done once at application startup.
    */
    dbo::backend::MySQL sambhaashane("sambhaashane",
    "sambhaashane",
    "secret",
    "localhost",
    3306,
    "/var/run/mysql/mysql.sock");
    sambhaashane.setProperty("show-queries", "true");
    dbo::Session session;
    session.setConnection(sambhaashane);
    session.mapClass("country_iso_3166_tbl");
    dbo::Transaction transaction(session);

typedef Wt::Dbo::collection< dbo::ptr > Countries;

Countries countries = session.find();

bool flag = transaction.isActive();

{

Wt::Dbo::collection< dbo::ptr >::const_iterator country = countries.begin();

int index = 0;

while(country != countries.end())

{

std::cout << index

<< "] Country: "

<< (*country)->country_iso_3166_numeric_code

<< '\n';

country;

}

}

}

===

When I run, the output is:

start transaction

select "country_iso_3166_numeric_code", "country_iso_3166_a2_code", "country_iso_3166_a3_code", "country_name", "country_legal_name", "country_native_name", "currency_iso_4217_number_code", "country_calling_code", "country_internet_extension", "country_follows_dst" from "country_iso_3166_tbl"

terminate called after throwing an instance of 'Wt::Dbo::Exception'

what(): Dbo load(): no active transaction

Press to close this window...

I see that the tranasction_ variable is 0x0. Giving raise to above exception.

Here is additional info:

Linux : OpenSuse 13.1

Db: maria db : mysql Ver 15.1 Distrib 5.5.33-MariaDB, for Linux (i686) using readline 5.1

Boost: Boost 1_53_0

Wt: 3.3.3.

I downloaded boost and compiled it into /usr/local/lib/boost_1_53_0 directory

I downloaded wt 3.3.3 and compiled it into /usr/local/lib/wt_3_3_3 directory (linked to the above boost libs).

Please let me know where I am going wrong.

I have given the complete source code.

The country_iso_3166_tbl: Is fully populated with country information. there are no null cells in the table.

Regards

Rathna

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Rathnadhar K V over 9 years ago

Namasthe,

The session.transaction_ is 0x0 after the session.find<sambhaashane_country_iso_3166_orm>(); operation.

This is being checked in the countries.begin();

In the method:

template

void Session::implLoad(MetaDbo& dbo, SqlStatement *statement, int& column)

{

if (!transaction_)

throw Exception("Dbo load(): no active transaction");

LoadDbAction action(dbo, *getMapping(), statement, column);

C *obj = new C();

try {

action.visit(*obj);

dbo.setObj(obj);

} catch (...) {

delete obj;

throw;

}

}

the exception is "thrown"....

What is the issue here... Please help me resolve this.

Regards

Rathna

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Rathnadhar K V over 9 years ago

Namasthe,

I have already published the entire code.... Please have a look at it.

The code snippet is here:

Wt::Dbo::Session session;

session.setConnection(sambhaashane);

session.mapClass("country_iso_3166_tbl");

Wt::Dbo::Transaction transaction(session);

{

typedef Wt::Dbo::collection< dbo::ptr > Countries;

Countries countries = session.find();

bool flag = transaction.isActive();

as you cansee....I have started the transaction ...as per the wt::dbo tutorial.

Still I get an exception.... please let me know why?

I m struck. Please help me.

Regards

Rathna

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Koen Deforche over 9 years ago

Hey,

 dbo::id(a,country_iso_3166_numeric_code,"country_iso_3166_numeric_code");
 dbo::field(a, country_iso_3166_numeric_code,    "country_iso_3166_numeric_code");

You need to remove the 'field()' : you are mapping the same field twice, once as a id, and a second time as plain field.

I'm not sure how that confuses Wt::Dbo though, but it might.

I cannot explain why you would be getting a 'no transaction active' exception though.

Regards,

koen

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Rathnadhar K V over 9 years ago

Namasthe

I am using wt 3.3.3 version. I think there is a problem lurking in the wt dbo section. The transaction_ variable is not getting updated. It stays at 0x0, thus throwing an exception.

I have attached the screen shots. I have highlighted the transaction_ value.

Kindly help to fix the issue asap.

Regards

Rathna

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Wim Dumon over 9 years ago

Hi,

Is all of the code that you pasted above in the same function?

Can you submit a full example that demonstrates the problem?

BR,

Wim.

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Rathnadhar K V over 9 years ago

I am uploading all the files including the .pro that i use to build.

Please let me know the error source.

Regards

Rathna

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Koen Deforche over 9 years ago

Hey,

I tried your test case, but that works without any problem for me. I modified your test case to also add a data record, and to use SQlite3 instead of MySQL (because I do not have a MySQL on this computer now actually), see attached.

test.wt 
begin transaction
create table "country_iso_3166_tbl" (
  "country_iso_3166_numeric_code" integer not null,
  "country_iso_3166_a2_code" text not null,
  "country_iso_3166_a3_code" text not null,
  "country_name" text not null,
  "country_legal_name" text not null,
  "country_native_name" text not null,
  "currency_iso_4217_number_code" integer not null,
  "country_calling_code" integer not null,
  "country_internet_extension" text not null,
  "country_follows_dst" boolean not null,
  primary key ("country_iso_3166_numeric_code")
)
commit transaction
begin transaction
insert into "country_iso_3166_tbl" ("country_iso_3166_numeric_code", "country_iso_3166_a2_code", "country_iso_3166_a3_code", "country_name", "country_legal_name", "country_native_name", "currency_iso_4217_number_code", "country_calling_code", "country_internet_extension", "country_follows_dst") values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
commit transaction
begin transaction
select "country_iso_3166_numeric_code", "country_iso_3166_a2_code", "country_iso_3166_a3_code", "country_name", "country_legal_name", "country_native_name", "currency_iso_4217_number_code", "country_calling_code", "country_internet_extension", "country_follows_dst" from "country_iso_3166_tbl" 
0] Country: 40
commit transaction

I suspect you have some build inconsistency: are you using the same compiler (e.g. C+11 versus C+03) and are you not by any chance having multiple versions of Wt and mixing include/libraries?

Does the modified example work correctly for you?

Koen

orm.cpp (1.91 KB) orm.cpp

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Jonathan lisein 5 months ago

Hi,

I know this is an old post but I am experiencing the same problem than Rathna. It is very frustrating as the wt dbo library seems very interesting (I am using it but without iteration on dbo collection). I use sqlite3 on ubuntu, with the last Wt version from github repository.

I tried several things and I ended up by checking the building consistency, as suggested by Koen. But I am not sure I checked properly, it is a bit out of my skill. I have multiple version of Wt but apperently my app is using the proper one. Does anyone has a solution for this issue? I can share my code, but as Koen tested the code of Rathna and have not reproduced the bug on its computer, I suppose it is not usefull to share the code right now.

Jo

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Matthias Van Ceulebroeck 5 months ago

Hello Jonathan,

sharing code is always useful. You set-up is slightly different. I would appreciate a minimal example, so that I can try to reproduce the issue.

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Jonathan lisein 5 months ago

Hi Matthias,

Here is a reproductible example:

header.h

#ifndef HEADER_H
#define HEADER_H
#include <sqlite3.h>
#include <map>
#include <string>
#include <Wt/Dbo/Dbo.h>
#include <Wt/Dbo/backend/Sqlite3.h>

#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wreorder"

namespace dbo = Wt::Dbo;
using namespace std;

class caracteristiqueCS{
public:
    caracteristiqueCS():zbio(0),station_id(0),VCP(0),SES(0),SCC(0),RCS(0),PB(0),tass_sol(0),N2000(""),N2000_maj(""),Wal(""),Wal_maj(""){}
    int VCP,SES,SCC,RCS,PB,tass_sol;
    int zbio,station_id;
    std::string Wal,Wal_maj,N2000,N2000_maj;
    template<class Action>
    void persist(Action& a)
    {
        dbo::field(a, zbio,     "zbio");
        dbo::field(a, station_id, "station_id");
        dbo::field(a, VCP,     "VCP");
        dbo::field(a, SES,    "SES");
        dbo::field(a, SCC,    "SCC"); //sensibilité aux changement climatique, plus de microclimat
        dbo::field(a, RCS,    "RCS");
        dbo::field(a, PB,    "PB");
        dbo::field(a, Wal,    "Wal");
        dbo::field(a, Wal_maj,    "Wal_maj");
        dbo::field(a, N2000,    "N2000");
        dbo::field(a, N2000_maj,    "N2000_maj");
        dbo::field(a, tass_sol,    "tass_sol");
    }
    caracteristiqueCS(const caracteristiqueCS * c):zbio(c->zbio),station_id(c->station_id),VCP(c->VCP),SES(c->SES),SCC(c->SCC),RCS(c->RCS),PB(c->PB),Wal(c->Wal),Wal_maj(c->Wal_maj),N2000(c->N2000),N2000_maj(c->N2000_maj),tass_sol(c->tass_sol){}
private:
};

class cdicoAptBase : public std::enable_shared_from_this<cdicoAptBase>
{
public:
    cdicoAptBase(std::string aBDFile);
    void closeConnection();
    int openConnection();

protected:
    std::string mBDpath;
    sqlite3 **db_;
    sqlite3 * ptDb_;
    std::map<std::pair<int,int>,caracteristiqueCS> Dico_US2KK;
};

#endif // HEADER_H

main.cpp

#include <iostream>
#include "header.h"

int main()
{
    cout << "Hello World!" << endl;
    cdicoAptBase *dico=new cdicoAptBase("/home/jo/app/Forestimator/carteApt/data/aptitudeEssDB.db");

    return 0;
}

cdicoAptBase::cdicoAptBase(std::string aBDFile):mBDpath(aBDFile),ptDb_(NULL)
{
    db_=&ptDb_;

    if (openConnection()){
        std::cout << " bd pas ouverte!!!\n"<< std::endl;
    } else {

        /* This first part is using slite3 without Wt */

        sqlite3_stmt * stmt;
        std::string SQLstring="SELECT Ess_FR,Code_FR,prefix, FeRe FROM dico_essences ORDER BY Ess_FR DESC;";
        sqlite3_prepare_v2( *db_, SQLstring.c_str(), -1, &stmt, NULL );//preparing the statement
        while(sqlite3_step(stmt) == SQLITE_ROW)
        {
            if (sqlite3_column_type(stmt, 0)!=SQLITE_NULL && sqlite3_column_type(stmt, 1)!=SQLITE_NULL){
                std::string aNomEs=std::string( (char *)sqlite3_column_text( stmt, 0 ) );
                std::string aCodeEs=std::string( (char *)sqlite3_column_text( stmt, 1 ) );
                std::string aPrefix=std::string( (char *)sqlite3_column_text( stmt, 2 ) );
                /* I do what i want with the result*/
            }
        }

        sqlite3_finalize(stmt);

        closeConnection();

        /* Here I use Wt:dbo */
        std::unique_ptr<dbo::backend::Sqlite3> sqlite3{new dbo::backend::Sqlite3(mBDpath)};
        Wt::Dbo::Session session;
        session.setConnection(std::move(sqlite3));
        session.mapClass<caracteristiqueCS>("caracteristiqueCS");
        dbo::Transaction transaction{session};

        // first iteration without collection (working properly)

        for (int us(1);us <18;us++){
            dbo::ptr<caracteristiqueCS>  pt = session.find<caracteristiqueCS>().where("zbio = ?").bind(1).where("station_id = ?").bind(us);
            // I create a copy of caracteristiqueCS because I am not at ease with the dbo::ptr system
            caracteristiqueCS  kkCSCopy(pt.get());
            std::cout <<"caracteristiqueCS id: " << kkCSCopy.station_id <<  std::endl;
            Dico_US2KK.emplace(std::make_pair(std::make_pair(kkCSCopy.zbio,kkCSCopy.station_id),kkCSCopy));
        }

         std::cout << "second iteration with collection"<<  std::endl;

        // test collection and iteration on element of collection
        typedef dbo::collection< dbo::ptr<caracteristiqueCS> > collectionKKCS;
        collectionKKCS col = session.find<caracteristiqueCS>().where("zbio = ?").bind(1);

        std::cout << "collection size " << col.size() << std::endl;

        dbo::collection<dbo::ptr<caracteristiqueCS>>::const_iterator i = col.begin();
        while(i != col.end())
        {
            std::cout << "caracteristiqueCS id: " << (*i)->station_id<<  std::endl;
            i++;
        }

        // third iteration without collection
         std::cout << "a last run"<< std::endl;

        for (int us(1);us <18;us++){
            dbo::ptr<caracteristiqueCS>  pt = session.find<caracteristiqueCS>().where("zbio = ?").bind(1).where("station_id = ?").bind(us);
            // I create a copy of caracteristiqueCS because I am not at ease with the dbo::ptr system
            caracteristiqueCS  kkCSCopy(pt.get());
            std::cout <<"caracteristiqueCS id: " << kkCSCopy.station_id <<  std::endl;
            Dico_US2KK.emplace(std::make_pair(std::make_pair(kkCSCopy.zbio,kkCSCopy.station_id),kkCSCopy));
        }
    }
}

void cdicoAptBase::closeConnection(){
    int rc = sqlite3_close(*db_);
    if( rc ) {
        fprintf(stderr, "Can't close database: %s\n\n\n", sqlite3_errmsg(*db_));
    }
}

int cdicoAptBase::openConnection(){
    int rc;
    rc = sqlite3_open(mBDpath.c_str(), db_);
    if( rc!=0) {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(*db_));
        std::cout << " mBDpath " << mBDpath << std::endl;
        std::cout << "result code : " << rc << std::endl;
    }
    return rc;
}

below the content of the table caracteristiqueCS

zbio;station_id;VCP;SES;SCC;RCS;PB;Wal;Wal_maj;N2000;N2000_maj;tass_sol
1;1;4;4;4;1;1;G1.51;G1.51;91D0*;91D0*;1
1;2;3;4;4;1;2;G1.41b, G1.52;G1.41b;;;1
1;3;4;3;3;1;2;G1.81;G1.81;9190;9190;1
1;4;4;3;1;2;2;G1.81;G1.81;9190;9190;2
1;5;3;2;3;2;3;G1.61, G1.87a;G1.61;9110;9110;2
1;6;4;4;4;2;2;G1.212, G1.211;G1.212;91E0*;91E0*;1
1;7;4;4;4;2;4;G1.212, G1.A1ca;G1.A1ca;91E0*, 9160;9160;2
1;8;3;3;4;3;4;G1.A1ca, G1.61, G1.87a, G1.63a;G1.61;9110, 9130, 9160;9110;2
1;9;4;4;4;1;3;G1.A41a, G1.A41b, G1.A41c;G1.A41b;9180*;9180*;4
1;10;3;3;1;1;2;G1.87a, G1.87b;G1.87a;;;4
1;11;3;3;2;2;3;G1.61, G1.87a, G1.A1cb;G1.61;9160, 9110;9110;3
1;12;3;3;3;2;3;G1.87a, G1.61;G1.61;9110;9110;3
1;13;4;3;4;3;4;G1.61, G1.63a, G1.A1ca;G1.61;9130, 9110, 9160;9110;2
1;14;3;2;4;3;4;G1.61, G1.87a;G1.61;9110;9110;2
1;15;3;2;3;3;3;G1.87a, G1.61;G1.61;9110;9110;3
1;16;3;2;2;2;2;G1.87a, G1.61;G1.87a;;;4
1;17;4;3;1;1;1;;;;;4

I use Qt as IDE and here is my config file (.pro) which is used by qmake (instead of cmake)


TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

TARGET = test
INCLUDEPATH += .
QT -= gui
QT += sql

CONFIG += c++17

LIBS = -lwthttp -lwt -lboost_system -lboost_iostreams  -lboost_filesystem -lboost_program_options -lwtdbo -lwtdbosqlite3 -lsqlite3


SOURCES += \
        main.cpp

HEADERS += \
    header.h
---------------------------------------

a few additionnal info:
g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

ldd test
linux-vdso.so.1 (0x00007ffda9bf0000)
libwtdbo.so.4.10.2 => /usr/local/lib/libwtdbo.so.4.10.2 (0x00007f52f35ad000)
libwtdbosqlite3.so.4.10.2 => /usr/local/lib/libwtdbosqlite3.so.4.10.2 (0x00007f52f34c3000)
libsqlite3.so.0 => /lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f52f339a000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f52f31b8000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f52f319d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f52f2fab000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f52f2fa3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f52f2f80000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f52f2e31000)
/lib64/ld-linux-x86-64.so.2 (0x00007f52f3679000)

and eventually... the output of the code in the terminal:

Hello World!
caracteristiqueCS id: 1
caracteristiqueCS id: 2
caracteristiqueCS id: 3
caracteristiqueCS id: 4
caracteristiqueCS id: 5
caracteristiqueCS id: 6
caracteristiqueCS id: 7
caracteristiqueCS id: 8
caracteristiqueCS id: 9
caracteristiqueCS id: 10
caracteristiqueCS id: 11
caracteristiqueCS id: 12
caracteristiqueCS id: 13
caracteristiqueCS id: 14
caracteristiqueCS id: 15
caracteristiqueCS id: 16
caracteristiqueCS id: 17
second iteration with collection
collection size 17
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
a last run
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1
caracteristiqueCS id: 1

Thank you in advance for your help, it is much appreciated!
Jo

RE: The dbo::collection iterator does retuns the same value on interation, please let me know how fix it. - Added by Jonathan lisein 3 months ago

I am still having trouble with DBO collection, so any advice would be greatly appreciated.
Jonathan

    (1-17/17)