Mystisk output i C++|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
Mystisk output i C++
Dani
Kommer du hit ofta?
Medlem
Forum Posts: 1854
Member Since:
February 17, 2004
sp_UserOfflineSmall Offline
1
May 31, 2005 - 8:43 pm
sp_Permalink sp_Print

Hittade till slut ett skript som passar till min uppgift, dvs att läsa en excelfil. Det är en MFC applikation i C++ med en knapp(läs) och ett textfönster. När man trycker på knappen läser den kolumner i excel-filen och skriver ut det i textfönstret. Detta fungerar bra när man endast läser 2 kolumner (genom en sql-query) i excel filen. När jag försöker skapa en query där den läser 3 kolumner klagar den på att för få parametrar angavs minst 1 krävs. Detta felmeddelande kommer när jag trycker på knappen läs. Alltså inget fel på koden. Mycket märkligt fel att hitta då felmedd är kryptiskt.
En sak till är märkligt; när jag utökar raderna i excel-filen skriver den bara ut 3 rader även fast filen ej är slut, while( !recset.IsEOF() )

Här är koden när man trycker på knappen:

void CReadExcelDlg::OnButton1()
{
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = "C:ReadExcel.xls"; // the file name.

// Clear the contents of the listbox
m_ctrlList.ResetContent();

// Retrieve the name of the Excel driver. This is
// necessary because Microsoft tends to use language
// specific names like "Microsoft Excel Driver (*.xls)" versus
// "Microsoft Excel Treiber (*.xls)"
sDriver = GetExcelDriver();
if( sDriver.IsEmpty() )
{
// Blast! We didn´t find that driver!
AfxMessageBox("No Excel ODBC driver found");
return;
}

//Create a pseudo DSN including the name of the Driver and the Excel file
// so we don´t have to have an explicit DSN installed in our ODBC admin
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);

TRY
{
// Open the database using the former created pseudo DSN
database.Open(NULL,false,false,sDsn);

// Allocate the recordset
CRecordset recset( &database );

// Build the SQL string
// Remember to name a section of data in the Excel sheet using "Insert->Names" to be
// able to work with the data like you would with a table in a "real" database. There
// may be more than one table contained in a worksheet.
sSql = "SELECT field_1, field_2 FROM demo_table ORDER BY field_1";

// Execute that query (implicitly by opening the recordset)
recset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);

// Browse the result
while( !recset.IsEOF() )
{
// Read the result line
recset.GetFieldValue("field_1",sItem1);
recset.GetFieldValue("field_2",sItem2);

// Insert result into the list
m_ctrlList.AddString( sItem1 + " --> "+sItem2 );
m_ctrlList.AddString("hallo");

// Skip to the next resultline
recset.MoveNext();
}

// Close the database
database.Close();
}
CATCH(CDBException, e)
{
// A database exception occured. Pop out the details...
AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;
}

I sql-satsen vill jag läsa in en kolumn till, dvs field_3 men då ger den det mystiska felet. Är detta ett statiskt skript som bara kan läsa 3 rader och 2 kolumner tro?

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 260
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL