This code is totaly wrong! If it does not crash the device that DOES NOT mean it's working!

/*WRONG*/
the struct is
typedef struct PacienteStruc
{
 Char *Nombre ;
 Char *Apellidos;
 Char *Dia ;
 Char *Mes ;
 Char *Anio ;
 Char *Sexo ;
 Char *PatPrev;
} PacienteStruc ;

/*RIGHT*/
the struct is
typedef struct PacienteStruc
{
 Char Nombre[50] ;
 Char Apellidos[50];
 Char Dia[50] ;
 Char Mes[50] ;
 Char Anio[50] ;
 Char Sexo[50] ;
 Char PatPrev[50];
} PacienteStruc ;
//These numbers are only for example, or use str packeting

typedef PacienteStruc* PacienteStrucPtr;

/*WRONG*/
static Err AddNewRecord(DmOpenRef db)
{
 UInt16        recordIndex = DmNumRecords(db) + 1 //dmMaxRecordIndex;
   PacienteStruc  newRecord;
   MemHandle     myRecordHandle;
   PacienteStruc  *newRecordPtr;
   Err      err;
   newRecord.Nombre = "Bill";
   newRecord.Apellidos = "Mother";
   newRecord.Dia = "1";
   newRecord.Mes = "1";
   newRecord.Anio = "1";
   newRecord.Sexo = "M";
   newRecord.PatPrev = "I Heat DmNewRecord";

  myRecordHandle = DmNewRecord(db, &recordIndex, sizeof(newRecord));
  newRecordPtr = MemHandleLock(myRecordHandle);
  err = DmWrite(newRecordPtr, 0, &newRecord, sizeof(newRecord));
  MemHandleUnlock(myRecordHandle);
  return err;
}

/*RIGHT*/
static Err AddNewRecord(DmOpenRef db)
{
 UInt16        recordIndex = dmMaxRecordIndex; //let it be...
   PacienteStruc  newRecord;
   MemHandle     myRecordHandle;
   PacienteStruc  *newRecordPtr;
   Err      err;

StrCopy(newRecord.Nombre,"Bill");
//... do the rest as this one
// newRecord.Nombre = "Bill";
// newRecord.Apellidos = "Mother";
// newRecord.Dia = "1";
// newRecord.Mes = "1";
// newRecord.Anio = "1";
// newRecord.Sexo = "M";
// newRecord.PatPrev = "I Heat DmNewRecord"; // shuld be "I *hate* DmNewRecord" :))


myRecordHandle = DmNewRecord(db, &recordIndex, sizeof(newRecord));
//No validation... no good
newRecordPtr = MemHandleLock(myRecordHandle);
err = DmWrite(newRecordPtr, 0, &newRecord, sizeof(newRecord));
//In the previous one you writed a couple of useless pointers in the record LOL
MemHandleUnlock(myRecordHandle);
//call DmReleaseRecord after making DmNewRecord.
return err;
}
R Moon wrote:


I have a problem,
this function add a record to Database
but when i execute DmNewRecord the MemHandle obtain 0x00000000
and error is MemHandle NULL
I have a fucntion, open DB

Boolean other function
{
OpenDatabase(&Database);
AddNewREcord(Database); //call the function to add record
}

static Err AddNewRecord(DmOpenRef db)
{
 UInt16        recordIndex = DmNumRecords(db) + 1 //dmMaxRecordIndex;
   PacienteStruc  newRecord;
   MemHandle     myRecordHandle;
   PacienteStruc  *newRecordPtr;
   Err      err;
   newRecord.Nombre = "Bill";
   newRecord.Apellidos = "Mother";
   newRecord.Dia = "1";
   newRecord.Mes = "1";
   newRecord.Anio = "1";
   newRecord.Sexo = "M";
   newRecord.PatPrev = "I Heat DmNewRecord";

  myRecordHandle = DmNewRecord(db, &recordIndex, sizeof(newRecord));
  newRecordPtr = MemHandleLock(myRecordHandle);
  err = DmWrite(newRecordPtr, 0, &newRecord, sizeof(newRecord));
  MemHandleUnlock(myRecordHandle);
  return err;
}

the struct is
typedef struct PacienteStruc
{
 Char *Nombre ;
 Char *Apellidos;
 Char *Dia ;
 Char *Mes ;
 Char *Anio ;
 Char *Sexo ;
 Char *PatPrev;
} PacienteStruc ;

typedef PacienteStruc* PacienteStrucPtr;

-- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/

Reply via email to