User Passwort
 Passwort speichern Passwort vergessen?
 
 
 
 Alle Foren
 PDA-Dev :: Windows Mobile :: eMbedded
 C++
 eVC++ 4, WM 5.0 und die CE interne Datenbank
Autor Vorheriges Thema Thema Nächstes Thema  

ODIM

PDA-Interessierter


4 Beiträge

Erstellt am: 10.07.2009 :  10:09:14 Uhr  Profil anzeigen  Antwort mit Zitat
Hallo zusammen,
ich habe ein Problem:
wir haben ein Materialwirtschaftsprogramm in eVC++ 4.0 für unser mobiles Endgerät MC 3000 der Firma Symbol (heute Motorola) geschrieben.
Dieses Programm benutzt um arbeiten zu können die CE interne Datenbank.
Diese Datenbank wird bei Programmstart per Kommandozeile einmalig erstellt mit den Befehlen:
 
BOOL CDatabaseArtikel::create() {
m_nCountSortProps = 2;
// init search properties
m_pSortProps = new CCeDBProp[m_nCountSortProps];
m_pSortProps[0] = CCeDBProp(
CCeDBProp::Type_Long,
PROP_ARTIKEL_OFFSET+PROP_ARTIKEL_ARTIKELID);
m_pSortProps[1] = CCeDBProp(
CCeDBProp::Type_String,
PROP_ARTIKEL_OFFSET+PROP_ARTIKEL_ARTIKELNR,
CCeDBProp::Sort_Ascending);
if ( !exists() ) {
if( !createDatabase()) {
TRACE1("Error creating %s.\n", m_pName);
return FALSE;
}
TRACE1("%s created.\n", m_pName);
}
return TRUE;
}
Das "createDatabase" macht nichts anderes als diese Methode aufzurufen:
 
CEOID CAbstractDB::createDatabase() {
CEOID poid =
m_aCeDBDatabase.Create(m_pName, m_nIdent);
if(poid == NULL) {
TRACE1("Error creating database. Cause: %d", GetLastError());
ASSERT(FALSE);
return FALSE;
}
if (m_pSortProps) {
m_aCeDBDatabase.SetSortProps(m_nCountSortProps, m_pSortProps);
}
if (poid) {
m_bExist = TRUE;
}
return poid;
}
{
das "create" wiederum sieht so aus (wcedb.cpp) :
 
CEOID CCeDBDatabase::Create(LPCWSTR szName,
DWORD dwIdent /*= 0*/,
int nNumSortProps /*= 0*/,
const CCeDBProp* pSortProps /*= NULL*/)
 
die Stammdaten werden dann aus einer CSV-Datei in die Datenbank eingelesen.
Wenn ich nun einen Artikel mit ARTIKELNR suche und ich habe mehr als 13500 Artikel in meiner DB, dann schlägt die Suche jedesmal fehl mit Error Code 25 und NewCeOID ist 0, alles unter 13500 Artikel funktioniert ohne Probleme !!
ich suche mit diesem Befehl und die DB ist auch mit entsprechendem SORT_PROPERTY geöffnet !
CEOID CCeDBDatabase::SeekFirstEqual(CCeDBProp& Prop)
{
AssertValid();
DWORD dwNewIndex;
CEOID NewCeOID = CeSeekDatabase(m_hHandle,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)&Prop.m_CePropVal, &dwNewIndex);
if(NewCeOID != 0)
m_bEOF = FALSE;
return NewCeOID;
}
Die Artikel DB hat nur 2 Sortpropertys (ARTIKELID und ARTIKELNR), die Suche mit ARTIKELID klappt auch bei 15000 Artikeln, aber wie gesagt mit ARTIKELNR nur bis 13500 Artikel.
hat irgendjemand eine Idee warum das Suchen ab 13500 Artikel fehl schlägt ????
Bin mit meinem Latain am ENDE.
Der Scanner hat insgesamt 62 MB Ram und diese sind 32 MB Stored Memory und 30 MB Program Memory verteilt, also am Speicher glaube ich liegt es nicht.
Im eVC sagt Error Code 25 folgendes aus :
"Das Laufwerk kann einen bestimmten Bereich oder eine bestimmte Spur nicht finden. "
Das Gerät ist wie oben schon beschrieben der MC3000 von Symbol (heut Motorola) mit Windows Mobile 5.0
Wäre echt super wenn mir wer helfen könnte oder mit einen besseren Vorschlag unterbreiten könnten was CE und DB angeht.
Gruß ODIM

Bearbeitet von: ODIM am: 10.07.2009 10:22:08 Uhr
   

Useless user

PDA-Spezialist


465 Beiträge

Erstellt  am: 10.07.2009 :  13:41:04 Uhr  Profil anzeigen  Besuche Useless user's Homepage  Antwort mit Zitat
Ce-interne-Datenbank??? Ich habe noch nie gehört das irgendjemand die für seine Anwendungsdaten einsetzt.
Vielleicht solltest du mal über SQL Compact nachdenken. Wobei ich nicht weiß, ob die unter eVC nutzbar ist. Aber eigentlich müsste das auch irgendwie gehen...
Zum Anfang der Seite

ODIM

PDA-Interessierter


4 Beiträge

Erstellt  am: 10.07.2009 :  13:57:14 Uhr  Profil anzeigen  Antwort mit Zitat
Ich bin echt über jede hilfreiche Antwort dankbar, die mich in der Sache weiterbringen könnte.
Über sinnvolle alternativen DB Vorschläge bin ich offen.
Zum Anfang der Seite

pda-dev

pda-dev

Forum Admin


554 Beiträge

Erstellt  am: 10.07.2009 :  18:45:35 Uhr  Profil anzeigen  Autor eine Email senden  Besuche pda-dev's Homepage  Sende pda-dev eine ICQ Message  Antwort mit Zitat
Ja, nimm dringend eine andere Datenbank. Gut bewährt hat sich bei mir SQLite (http://www.sqlite.org/). Das kann man auch unter Windows CE verwenden, und sicher auch mit C++.

Ein Computer wird nie das tun, was du willst - sondern das, was du programmierst!
Zum Anfang der Seite

ODIM

PDA-Interessierter


4 Beiträge

Erstellt  am: 14.07.2009 :  12:02:16 Uhr  Profil anzeigen  Antwort mit Zitat
OK ich habe mir nun Sqlite3 herunter geladen, allerdings tue ich mir noch etwas schwer mit dem Handling in C++.
Meine Frage nun : Gibt es sowas wie Records die nach dem Fetchen die Datenzeilen wiederspiegeln ?
Hat vielleicht jemand Codebeispiele die mir einiges erleichtern könnten ?
Desweiteren habe ich mir nur die beiden header Dateien und die eine C datei herunter geladen und benutze diese in meinem Projekt.
Kann man aus dem Programm Code auch sowas anstoßen wie mit dem Commandline Tool sqlite3.exe ->
.import <Dateiname> <TABELLE> ???
oder muß man alles selber zu Fuß erledigen wenn man CSV Dateien in die DB importieren will ???
Bin für alles dankbar.

Bearbeitet von: ODIM am: 14.07.2009 12:29:23 Uhr
Zum Anfang der Seite
  Vorheriges Thema Thema Nächstes Thema  
Springe nach:
 
  Bookmark & Share  
 
 
 
  Tags  
   
 

 



pda-dev.de

Quicklinks: Foren-Übersicht | Developer-News | Suche | Impressum

© just-works! Software

Zum Anfang der Seite

Snitz Forums 2000