hello everybody ,
je cherche à préciser la taille de mes champs dans mon fichier .ifo.
On utilise ce fichier pour paramétrer correctement la conversion du csv en pdb et inversement. Son contenu est le suivant :
title Table1
field "num_code_barre" string
field "num_serie_esp" string
extended on
separator ;
format date "%d/%m/%y"
si quelqu'un sait comment indiquer la taille que l'on souhaite attribuer à chaque champs, qu'il me le fasse savoir !
merci.
elyro.
Patrice
10/10/2003 à 10:06
Il faudrait peut-être expliquer quel outil tu utilises pour convertir ton CSV en PDB... S'il s'agit des outils qui "accompagnent" PilotDB, tu ne pourras pas faire ce que tu souhaites pour la simple raison que le logiciel "cible" (PilotDB) ne gère pas de longueur sur les champs "string".
j'utilise simplement les db-tools, soit l'éxecutable csv2pdb. Voici la commande que j'éxecute :
csv2pdb -i Table1Debut.ifo Table1.csv Table1.pdb
donc je n'utilise pas pilot-DB (bien qu'il me semble qu'il s'agisse de la même commande !), ni pour la conversion ni pour la lecture de la base. pour la lecture j'utilise DB-Viewer, cela me permet de bien voir combien de place est allouée pour chaque champs, le problème c'est que je ne comprend pas comment se place les champs dans la base. Une fois cela prend 10 caractères, une autre 8 ?
bref, je suis un peu perdu !
Patrice
10/10/2003 à 10:23
C'est bien ce que je te dis : db-tools est un outil dédié à la construction de bases pour PilotDB. Donc il produit un format de données adapté à ce logiciel.
il faut créer une vue, rajoutes dans ton fichier .ifo:
view "ma_vue" "num_code_barre" 40 num_serie_esp 120
par exemple.
Désolé d'être aussi long mais en ce moment je n'ai qu'un petit modem à 56kbd.
Patrice
10/10/2003 à 10:30
CITATION(marc-chalain)
il faut créer une vue, rajoutes dans ton fichier .ifo:
view "ma_vue" "num_code_barre" 40 num_serie_esp 120
La vue modifie la structure de la base ??? (je pose la question parce qu'elyro exploite le résultat avec son propre programme et pas avec DB...)
la vue ne change rien, malheureusement c'était prévisible étant donné qu'en générale la vue ne modifie pas la structure, comme le dit patrice !
Donc j'en suis toujours au même point, merci qd même, marc-chalain !
Je croyais être la personne la plus à même à être au courant, mais là je ne comprend rien.
Qu'est ce qu'est DBViewer?
Comment limiter la taille d'une string?
On parle bien de dbtools downloader sur pilot-db.sourceforge.net???
On peut limiter la taille affichée d'un champ dans la liste des enregistrements, mais le nombre de caratères dans la string est limité par le programme (Pilot-DB) et est de 256.
Expliquez moi.
Patrice
16/10/2003 à 19:28
Marc, je t'explique ce que j'ai compris (et Elyro rectifiera si j'ai loupé un épisode) : il essaye d'utiliser les db-tools pour créer un pdb qu'il veut utiliser avec son propre programme, et pas avec PilotDB...
Alors je ne vois pas ce que je peux faire pour lui.
Désolé.
Tu peux éclairsir ta question, peut-être qu'il y a une solution.
sorry, je n'avais pas vu que vous aviez posté !
ce que dit patrice est exact ! je cherche à réutiliser un pdb créer avec les DB-tools dans mon propre programme palm.
Je ne trouve pas d'alternative sauf un traitement très très lourd à coder car j'ai 97 champs dans ma table...
celà dit, j'ai découvert CPDB, cela semble convenir sous tout point de vue sauf que je n'arrive pas à utiliser les fonctions dans mon programme !
je vais créer un nouveau sujet à ce propos !
merci à vous tous en tout cas !
elyro.
cancan
24/10/2003 à 17:50
Ne serait il pas plus simple de lire ta base en décrivant ta zone avec juste:
Char field1;
Char field2;
Du coup tu aurais des champs de longueur variable également dans ta base Palm.
Patrice
24/10/2003 à 18:56
CITATION(cancan)
Ne serait il pas plus simple de lire ta base en décrivant ta zone avec juste:
Char field1;
Char field2;
Du coup tu aurais des champs de longueur variable également dans ta base Palm.
Avec un format comme ça tu as des champs de longueur 1 (la taille d'un Char, très exactement) et pas du tout variables...
cancan
25/10/2003 à 17:12
Ben c'est comme ca que j'ai codé les "premiers mots" et ca marche bien. Il me semble par ailleurs que les memos et les descriptions des taches des appli standards sont également codés comme ca. Mais je peux me tromper.
Patrice
25/10/2003 à 17:33
Alors il faudrait que tu développes ce que tu fais avec ces déclarations parce que tu ne peux rien faire contre le fait qu'un Char a une longueur d'un octet et que toute tentative d'y enregistrer 2 caractères ou plus te conduira au crash à plus ou moins brève échéance...
cancan
25/10/2003 à 17:38
Ben voila la mise en place dans la table:
static Err WordsLoadItem(void *tbl, Int16 row, Int16 column,
Boolean editable, MemHandle * dataH, Int16 *dataOffset,
Int16 *dataSize, FieldPtr fld)
{
TablePtr table = (TablePtr) tbl;
MemHandle recordH;
UInt16 recordNum;
WordsDBType *p;
FieldAttrType attr;
recordNum = (UInt16) TblGetRowID(table, row);
recordH = DmQueryRecord(WordsDBRef, recordNum);
p = (WordsDBType *) MemHandleLock(recordH);
*dataOffset = &p->word - ((Char *) p);
*dataSize = StrLen(&p->word) + 1; // one for null terminator
*dataH = recordH;
MemHandleUnlock(recordH);
// Set the auto-shift to true
if (fld)
{
FldGetAttributes(fld, &attr);
attr.autoShift = true;
FldSetAttributes(fld, &attr);
FldSetMaxChars(fld, 80);
}
return(0);
}
Le champ word c'est mon fameux Char word;[/b]
cancan
25/10/2003 à 18:00
Je voulais juste rajouter que c'est mon premier programme en C, ne soyez donc pas trop vache svp O:)
Patrice
25/10/2003 à 18:39
Ok : tu le décris comme un Char mais en fait c'est bien une chaîne de longueur variable. Ce n'est pas si simple à gérer car si tu as deux champs successifs, tu ne pourras pas les décrire comme :
Char champ1;
Char champ2;
cancan
26/10/2003 à 09:31
Je n'utilise effectivement qu'un champ de longueur variable qui est le dernier champ de ma structure.
Pour avoir deux champs de longueur variables il faut voir comment est défini la bd ToDo qui contient une description (variable) + un champ note (variable).
Je n'ai pas ca sous la main en ce moment mais des que j'ai ca je vous l'envoi. Je crois que ce sont des
const Char *field1; et
const Char *field2;
J'ai en tout cas cela dans un exemple de ma Bible PalmOs Programming
Par contre du coup c'est un peu chiant à manipuler à la lecture et à l'écriture.
cancan
27/10/2003 à 10:06
Pour deux champs de taille variable consécutifs cela semble effectivement un poil lourd.
Le mieux serait de fouiller un peu dans les exemples du SDK, l'exemple DateBook me semble un cas bien concret, d'autant que dans ce cas un des deux champs peut etre optionnel.
Désolà, j'ai pas mieux.
la solution consiste à utiliser cpdb (avec la possibilité d'indiquer la taille des champs) pour importer sa base vers le palm, comme ça on sait où on va au niveau des tailles et les structures sont simples à définir !
Ensuite il faut revenir à pdb2csv pour récupérer le fichier et le traiter de manière à récupérer les données pour mettre à jour ma base sur PC .
pour l'instant je n'ai pas trouvé mieux, ça à l'air de marcher comme ça mais je n'ai pas entièrement fini ! je vous dirai si tout se passe bien pour la suite !
Voilà, merci pour votre coup de main à tous !
tchao,
elyro
Si tu connais un peu le C++ il est facile de rajouter le support d'un nouveau type de base avec db-tools.
Si tu veux je peux te donner un coup de main popur çà. Tu me donnes la structure de ta base et je vois çà.
si on pouvait arriver à se causer un poil, ça me botterai bien d'avancer dans ce sens, là je suis booker pour le mois à venir mais je garde ta proposition bien au chaud !
Merci beaucoup.... je te joind dès que je suis dispo !
tchao.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez
cliquer ici.