hallo an alle,
ich schreibe ein progamm in dem datenbanken angelegt werden.
(zu meiner person: c newbie, palm programming newbie)
in einer extra datenbank werden die datenbanknummern nach dem anlegen gespeichert.
nun will ich auch die datenbanken wieder loeschen koennen.
dazu soll spaeter eine liste erstellt werden die untereinander die datenbanknummern zeigt.
aber ich kann nicht einmal die eintraege aus der datenbank auslesen.
beim kompilieren erhalte ich folgende fehlermeldung:
[admin@emma kartei]$ make
m68k-palmos-gcc -g -O2 -o kartei kartei.c
kartei.c: In function `StartApplication':
kartei.c:28: warning: passing arg 2 of `StrIToA' makes integer from pointer without a cast
kartei.c: In function `KarteiLoeschenFrmHandleEvent':
kartei.c:241: incompatible types in assignment
make: *** [code0000.kartei.grc] Fehler 1
mein programm beinhaltet folgende einschlaegige programmteile:
[PHP]
// Wenn der Button "Anlegen" gedrückt wurde
case KarteiAnlegen:
// Das aktive Formular wird als Zeiger der Variable "formular" bekannt gemacht
formular = FrmGetActiveForm();
// Zeiger auf den Feldinhalt holen
feldZeiger = FrmGetObjectPtr(formular,
FrmGetObjectIndex(formular, KarteiName));
// Den Inhalt des Feldes "KarteiName" in den String textZeiger kopieren
textZeiger = FldGetTextPtr(feldZeiger);
// Einen Zeiger auf die Liste "KarteiFarbe" anlegen
listenZeiger = FrmGetObjectPtr(formular,
FrmGetObjectIndex(formular, KarteiFarbe));
// Den gewählten Popup-Listeneintrag ermitteln
KarteiFarbeAuswahl = LstGetSelectionText(listenZeiger,
LstGetSelection(listenZeiger));
// Wenn eine Name für die Datenbank eingegeben wurde
if(textZeiger != NULL) {
// Hinweisfenster mit Frage ausgeben und mit hilfe der switch-Anweisung
// ermitteln welcher Button bei der Frage gedrückt wurde
switch(FrmCustomAlert(KarteiFrageAnlegen, textZeiger, KarteiFarbeAuswahl, NULL)) {
// Wenn "Ja" gedrückt wurde
case 0:
// Anlegen der Datenbank
fehler = DmCreateDatabase(speicherKarte,
textZeiger, 'KTEI', 0, false);
// Überprüfen ob das Anlegen der Datenbank fehlschlug
if(fehler) {
// Hinweis ausgeben, daß das Anlegen fehlschlug
FrmCustomAlert(KarteiFehler,
"Fehler beim anlegen der Datenbank:", StrIToA(fehlercode, fehler), NULL);
} // Ende der if-Abfrage auf fehler unleich NULL
// Wenn das Anlegen der Datenbank erfolgreich war
else {
position = 0;
// Nummer der Benutzerdatenbank ermitteln
datenbankNr = DmFindDatabase(speicherKarte, textZeiger);
// Nummer der Systemdatenbank ermitteln
KarteiDB_datenbankNr = DmFindDatabase(speicherKarte, "KarteiDB_KTEI");
// Systemdatenbank öffnen, im schreib-lese Modus
datenbankZeiger = DmOpenDatabase(speicherKarte,
KarteiDB_datenbankNr, dmModeReadWrite);
if(datenbankZeiger == 0)
WinDrawChars("Line 161",8, 0, 15);
// Neuen Datenbank-Eintrag-Bereich in der Systemdatenbank reservieren
// indem nach freiem Speicherplatz gefragt wird
datensatzHandle = DmNewRecord(datenbankZeiger, &position,
sizeof(KarteiDB_datenbankNr));
// Wenn das Reservieren des freien Speicherplatzes fehlschlug
if(datensatzHandle == 0)
WinDrawChars("Fehler beim Einfuegen",20, 0, 50);
// Den neuen Datenbank-Eintrag-Bereich sperren
// um das eigene Schreiben zu sichern
datensatzZeiger = MemHandleLock(datensatzHandle);
// Nummer der Datenbank in die Systemdatenbank KarteiDB_KTEI schreiben
DmWrite(datensatzZeiger, 0, &datenbankNr,
sizeof(KarteiDB_datenbankNr));
// Hinweis ausgeben, daß das Anlegen erfolgreich war
FrmCustomAlert(KarteiHinweis, "Die Datenbank", textZeiger, "konnte angelegt werden.");
} // Ende der if-Alternative auf fehler ungleich NULL
handled = true;
break;
// Wenn "Nein" gedrückt wurde
case 1:
handled = true;
break;
} // Ende der switch-Abfrage welcher Button bei der Frage gestellt wurde
handled = true;
break;
} // Ende der if-Abfrage ob "textZeiger" ungleich 0[/PHP]
[PHP]
// Funktion zum Abfragen der Formularevents von KarteiLoeschen
Boolean KarteiLoeschenFrmHandleEvent(EventPtr event) {
typedef struct {
UInt16 Datenbanknummer;
UInt16 leer;
} Datensatz;
char ausgabe[3];
FormPtr formular;
Boolean handled = false;
Err fehler = 0;
LocalID datenbankNr;
LocalID datenbankNrAusgabe;
UInt16 speicherKarte = 0;
DmOpenRef datenbankZeiger;
UInt16 datenbankAnzahlEintraege;
UInt16 i;
MemHandle lesenHandle;
Datensatz* lesenZeiger;
// switch-Abfrage zum ermitteln des Formularevents von "KarteiLoeschenFrmHandleEvent"
switch(event->eType) {
case frmOpenEvent:
// Das aktive Formular wird als Zeiger der Variable "formular" bekannt gemacht
formular = FrmGetActiveForm();
// Zeichnen des Formulars "KarteiNeuFormular"
FrmDrawForm(formular);
// Ermitteln der Datenbanknummer der Systemdatenbank KarteiDB_KTEI
datenbankNr = DmFindDatabase(speicherKarte, "KarteiDB_KTEI");
// Öffnen der Systemdatenbank KarteiDB_KTEI
datenbankZeiger = DmOpenDatabase(speicherKarte,
datenbankNr, dmModeReadWrite);
// Anzahl der Datensätze ermitteln
datenbankAnzahlEintraege = DmNumRecords(datenbankZeiger);
// Speicher für nummerische Ausgabe
for(i = 0; i < datenbankAnzahlEintraege; i++) {
// Datenbank abfragen nach Records
lesenHandle = DmQueryRecord(datenbankZeiger, i);
// Testen ob es einen ermittelt wurde
if(lesenHandle != NULL) {
// Pointer auf den Datensatz ermitteln
lesenZeiger = (Datensatz *) MemHandleLock(lesenHandle);
// Datenbanknummer ausgeben
ausgabe=StrIToA(ausgabe, lesenZeiger->Datenbanknummer);
WinDrawChars(ausgabe,StrLen(ausgabe), 0, i*10);
// Speicher freigeben
MemHandleUnlock(lesenHandle);
} // Ende der if-Abfrage "lesenHandle gleich Null"
} // Ende der for-Schleife "i kleiner datenbankAnzahlEintraege"
handled = true;
break; // break für "case frmOpenEvent"[/PHP]
gerne schicke ich auch das ganze programm.
was ich auch mache ich bekomme das programm nicht kompiliert.
dabei habe ich viele programmteile aus dem buch von dirk noeldner "palm os programmierung" entnommen. ein buch mir vielen fehlern.
nun kann es sein das auch hier ein fehler im buch mein programm schrottet.
aber ich kenne mich auch wenig mit c aus
und habe schwierigkeiten das zeigersystem zu verstehen.
zwar habe ich einfuerungen in c gelesen, aber wirklich damit arbeiten kann ich noch nicht. also kann auch der fehler vor meinem rechner sitzen.
ueber antworten freue ich mich natuerlich.