micamica
13th July 2011, 07:20
I have a program like this
QList <S_AIS_DB_SHIP> cAISDataBase::addCurrentShipDataWithFilter(AIS_DB_ FILTER filterType, QString searchKey)
//void cAISDataBase::addCurrentShipDataWithFilter(AIS_DB_ FILTER filterType,QString searchKey)
{
QList<S_AIS_DB_SHIP>aisList;
QString type;
if (filterType==ADF_MMSI)
type=QString("mmsi");
else if(filterType==ADF_AREAFILTER)
type=QString("areaFilter");
else if (filterType==ADF_STATUS)
type=QString("status");
else if (filterType==ADF_COG)
type=QString("cog");
else if (filterType==ADF_SOG)
type=QString("sog");
else if (filterType==ADF_IMO)
type=QString("imo");
else if (filterType==ADF_CALLSIGN)
type=QString("callsign");
else if (filterType==ADF_STERN)
type=QString("dim_stern");
else if (filterType==ADF_BOW)
type=QString("dim_bow");
else if (filterType==ADF_STARBOARD)
type=QString("dim_starboard");
else if (filterType==ADF_PORT)
type=QString("dim_port");
else if (filterType==ADF_WIDTH)
type=QString("width");
else if (filterType==ADF_LENGTH)
type=QString("length");
else if (filterType==ADF_NAME)
type=QString("name");
cMYSQLDB *mysqldb=createDbInstance();
if(mysqldb->open()){
MYSQL_RES *result;
MYSQL_ROW row;
QString query="SELECT *FROM SKM_T_AIS_CURRENTSHIPLIST where" +type+ " ='" +searchKey +";";
result=mysqldb->query(query);
if (result){
S_AIS_DB_SHIP dbShip;
while ((row=mysql_fetch_row(result))!=NULL){
S_AIS_DB_STATUSDATA statusDataTemp;
statusDataTemp.mmsi = QString(row[0]);
statusDataTemp.lat = QString(row[1]).toDouble();
statusDataTemp.lon = QString(row[2]).toDouble();
statusDataTemp.sog = QString(row[3]).toDouble();
statusDataTemp.cog = QString(row[4]).toDouble();
statusDataTemp.lastUpdate=QString(row[5]);
statusDataTemp.status=QString(row[6]);
S_AIS_DB_SHIPINFO shipInfoDataTemp;
shipInfoDataTemp.mmsi=QString(row[7]);
shipInfoDataTemp.IMO = QString(row[8]);
shipInfoDataTemp.callsign=QString(row[9]);
shipInfoDataTemp.name = QString(row[10]);
shipInfoDataTemp.width=QString(row[11]).toDouble();
shipInfoDataTemp.length=QString(row[12]).toDouble();
shipInfoDataTemp.dim_port=QString(row[13]).toInt();
shipInfoDataTemp.dim_starboard=QString(row[14]).toInt();
shipInfoDataTemp.dim_bow=QString(row[15]).toInt();
shipInfoDataTemp.dim_stern=QString(row[16]).toInt();
aisList.append(dbShip);
}
}
mysqldb->closeRslt(result);
mysqldb->close();
}
delete mysqldb;
}
this program to filter tableWidget items
void AIS::on_lineEdit_textChanged(QString )
{
QList<S_AIS_DB_SHIP>aislist;
aislist=m_db->addCurrentShipDataWithFilter(filterType,searchKey) ;
for (int i=0;i<aislist.count();i++){
int curRow =ui->tableWidget->rowCount();
ui->tableWidget->insertRow(curRow);
ui->tableWidget->setItem(curRow,0, new QTableWidgetItem (aislist.at(i).statusData.mmsi));
ui->tableWidget->setItem(curRow,1, new QTableWidgetItem (aislist.at(i).shipInfo.IMO));
ui->tableWidget->setItem(curRow,2, new QTableWidgetItem (aislist.at(i).shipInfo.name));
ui->tableWidget->setItem(curRow,4, new QTableWidgetItem (QString::number(aislist.at(i).statusData.sog)));
ui->tableWidget->setItem(curRow,5, new QTableWidgetItem (QString::number(aislist.at(i).statusData.cog)));
ui->tableWidget->setItem(curRow,6, new QTableWidgetItem (QString::number(aislist.at(i).statusData.lat)));
ui->tableWidget->setItem(curRow,7, new QTableWidgetItem (QString::number(aislist.at(i).statusData.lon)));
}
searchKey = ui->lineEdit->text();
if(ui->comboBox->currentText() == "MMSI"){
filterType = ADF_MMSI;
}
else if(ui->comboBox->currentText() == "IMO"){
filterType = ADF_IMO;
}
else if(ui->comboBox->currentText() == "Name"){
filterType = ADF_NAME;
}
m_db->addCurrentShipDataWithFilter(filterType, searchKey);
}
And this is a function that call the function above
My program exit when I type something in lineEdit...
I don't know what's wrong with my program??
If i try to debug it, it displays that the data is not synchronous...
Is my function not called properly???\
Really need help...
QList <S_AIS_DB_SHIP> cAISDataBase::addCurrentShipDataWithFilter(AIS_DB_ FILTER filterType, QString searchKey)
//void cAISDataBase::addCurrentShipDataWithFilter(AIS_DB_ FILTER filterType,QString searchKey)
{
QList<S_AIS_DB_SHIP>aisList;
QString type;
if (filterType==ADF_MMSI)
type=QString("mmsi");
else if(filterType==ADF_AREAFILTER)
type=QString("areaFilter");
else if (filterType==ADF_STATUS)
type=QString("status");
else if (filterType==ADF_COG)
type=QString("cog");
else if (filterType==ADF_SOG)
type=QString("sog");
else if (filterType==ADF_IMO)
type=QString("imo");
else if (filterType==ADF_CALLSIGN)
type=QString("callsign");
else if (filterType==ADF_STERN)
type=QString("dim_stern");
else if (filterType==ADF_BOW)
type=QString("dim_bow");
else if (filterType==ADF_STARBOARD)
type=QString("dim_starboard");
else if (filterType==ADF_PORT)
type=QString("dim_port");
else if (filterType==ADF_WIDTH)
type=QString("width");
else if (filterType==ADF_LENGTH)
type=QString("length");
else if (filterType==ADF_NAME)
type=QString("name");
cMYSQLDB *mysqldb=createDbInstance();
if(mysqldb->open()){
MYSQL_RES *result;
MYSQL_ROW row;
QString query="SELECT *FROM SKM_T_AIS_CURRENTSHIPLIST where" +type+ " ='" +searchKey +";";
result=mysqldb->query(query);
if (result){
S_AIS_DB_SHIP dbShip;
while ((row=mysql_fetch_row(result))!=NULL){
S_AIS_DB_STATUSDATA statusDataTemp;
statusDataTemp.mmsi = QString(row[0]);
statusDataTemp.lat = QString(row[1]).toDouble();
statusDataTemp.lon = QString(row[2]).toDouble();
statusDataTemp.sog = QString(row[3]).toDouble();
statusDataTemp.cog = QString(row[4]).toDouble();
statusDataTemp.lastUpdate=QString(row[5]);
statusDataTemp.status=QString(row[6]);
S_AIS_DB_SHIPINFO shipInfoDataTemp;
shipInfoDataTemp.mmsi=QString(row[7]);
shipInfoDataTemp.IMO = QString(row[8]);
shipInfoDataTemp.callsign=QString(row[9]);
shipInfoDataTemp.name = QString(row[10]);
shipInfoDataTemp.width=QString(row[11]).toDouble();
shipInfoDataTemp.length=QString(row[12]).toDouble();
shipInfoDataTemp.dim_port=QString(row[13]).toInt();
shipInfoDataTemp.dim_starboard=QString(row[14]).toInt();
shipInfoDataTemp.dim_bow=QString(row[15]).toInt();
shipInfoDataTemp.dim_stern=QString(row[16]).toInt();
aisList.append(dbShip);
}
}
mysqldb->closeRslt(result);
mysqldb->close();
}
delete mysqldb;
}
this program to filter tableWidget items
void AIS::on_lineEdit_textChanged(QString )
{
QList<S_AIS_DB_SHIP>aislist;
aislist=m_db->addCurrentShipDataWithFilter(filterType,searchKey) ;
for (int i=0;i<aislist.count();i++){
int curRow =ui->tableWidget->rowCount();
ui->tableWidget->insertRow(curRow);
ui->tableWidget->setItem(curRow,0, new QTableWidgetItem (aislist.at(i).statusData.mmsi));
ui->tableWidget->setItem(curRow,1, new QTableWidgetItem (aislist.at(i).shipInfo.IMO));
ui->tableWidget->setItem(curRow,2, new QTableWidgetItem (aislist.at(i).shipInfo.name));
ui->tableWidget->setItem(curRow,4, new QTableWidgetItem (QString::number(aislist.at(i).statusData.sog)));
ui->tableWidget->setItem(curRow,5, new QTableWidgetItem (QString::number(aislist.at(i).statusData.cog)));
ui->tableWidget->setItem(curRow,6, new QTableWidgetItem (QString::number(aislist.at(i).statusData.lat)));
ui->tableWidget->setItem(curRow,7, new QTableWidgetItem (QString::number(aislist.at(i).statusData.lon)));
}
searchKey = ui->lineEdit->text();
if(ui->comboBox->currentText() == "MMSI"){
filterType = ADF_MMSI;
}
else if(ui->comboBox->currentText() == "IMO"){
filterType = ADF_IMO;
}
else if(ui->comboBox->currentText() == "Name"){
filterType = ADF_NAME;
}
m_db->addCurrentShipDataWithFilter(filterType, searchKey);
}
And this is a function that call the function above
My program exit when I type something in lineEdit...
I don't know what's wrong with my program??
If i try to debug it, it displays that the data is not synchronous...
Is my function not called properly???\
Really need help...