Base d edonnee / probleme si un champs est vide

callaghan1981 Messages postés 9 Date d'inscription dimanche 25 avril 2004 Statut Membre Dernière intervention 25 août 2004 - 24 août 2004 à 15:38
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 25 août 2004 à 13:55
Please il y aurai un gentil admin qui pourrai ;e proposer une solution??

mon programme se connecte a une base de donnee... tt est parfais,..

mon programme lis et consulte la base de donnee
tt est parfais..

mais maintena je veux selectionner certaine donnee et les sauvegarder ds un doc txt.
tt est PRESQUE parfais.

il arrive qu une base de donne ne soit pas tt le temp complete ( genre il y a un champs vide) bref, j ai une chaine d ecaractere, et lorsque le champs est vide, mon programme saute..
bref comment faire comprendre a ma chaine d ecaractere que
"c est vide et que c est pas grave "

bst = pRstList->Fields->GetItem((long)1)->Value; // jobname
if (!bst == NULL)
{ strcpy(q->jobname,bst);}
else {strcat(q->jobname, " " );}
printf ( " %s", q->jobname);

voila ce que cela maffiche ds ma console qd je fais tourner le programme

js0551Luzerne, Switzerland 2004-0315-12-001
js0552Arnult Park, Munich 2004-0315-14-001
js0554

a js0554 tt s arrete le programme passe a la second procedure..
car ds la base de donnee il n ay a pas de jobname pour le jobnumber Js0554 bref
les eutres donne suivante ( js0555) ne sont pas lu ce qui est "emmerdant "lol
commen faire?
merci

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 août 2004 à 16:13
Les champs NULLABLES sont a prendre dans un:
_variant_t var;
var = pRstList->Fields->GetItem((long)1)->Value;
if(var.vt != VT_NULL) etc...

ciao...
BruNews, Admin CS, MVP Visual C++
0
callaghan1981 Messages postés 9 Date d'inscription dimanche 25 avril 2004 Statut Membre Dernière intervention 25 août 2004
24 août 2004 à 18:43
merci d avoir repondu si vite mais j ai un nouveau probleme

effectivement tt marche..
bref si c est une valeur null la chaine n aura pas de valeur..
mais le truc
si tu veux j ai une liste chaine et pour certaine donne je les met dans certaine variable de ma liste chaine..
et qd jenregistre ma liste ds un fichier texte le truc c est que le job number comprend 2 valeur

try
{
printf("Jobnumber Indexnumber Idcont Content \t \t box Idnote \t Note \n");
while(!pRstList->EndOfFile)
{
Project *q;
q = new Project;
q->succ = NULL;

bst = pRstList->Fields->GetItem((long)0)->Value; // jobnumber
strcpy(q->jobnumber,bst);
printf ( " %s", q->jobnumber );

var = pRstList->Fields->GetItem((long)1)->Value;
if(var.vt != VT_NULL)
{
bst = var;
strcpy(q->jobname, bst);
}
else
{
strcpy(q->jobname, " ");
}
printf ( " %46s", q->jobname);
bst = pRstList->Fields->GetItem((long)2)->Value; // indexnumber
strcpy(q->indexnumber,bst);
printf ( " %18s", q->indexnumber);

lval= pRstList->Fields->GetItem((long)3)->Value; // idcontent
q->idcontent=lval;
printf ( " %2d", q->idcontent);

bst = pRstList->Fields->GetItem((long)4)->Value; // content
strcpy(q->content,bst);
printf ( " %30s", q->content);

lval = pRstList->Fields->GetItem((long)5)->Value; // boxnumber
q->boxnumber = lval;
printf ( " %3d", q->boxnumber);

lval= pRstList->Fields->GetItem((long)6)->Value; // idnote
q->idnote = lval;
printf ( " %2d", q->idnote);

bst = pRstList->Fields->GetItem((long)7)->Value; // note
strcpy(q->note,bst);
printf ( " %15s \n", q->note );
if (L_project NULL) L_project q;
else
{
q->succ = L_project;
L_project = q;
printf("%s %s \n",L_project->jobnumber,L_project->jobname);
}
pRstList->MoveNext();
}

lorsque je demande d afficher L_project jobnumber
ds cette variable il y a a la fois le jobnumber et aussi la valeur de jobname..

affiche sur la console
js0575Arlington Arlington

js0575Arlington ca c est L_project->jobnumber
Arlington c est L_project->jobname

commen faire pour resoudre ce probleme?? c est le seul que j ai

merci bcp
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 août 2004 à 19:29
Je ne mettrai pas un recordset dans une liste chainee, impensable comme methode. Faut tamponner direct dans le fichier texte. J'ai fait exemple ici:
ADO: MDB VERS TXT STRUCTURE PAR TAB (WIN32)
http://www.cppfrance.com/code.aspx?id=11201

ciao...
BruNews, Admin CS, MVP Visual C++
0
callaghan1981 Messages postés 9 Date d'inscription dimanche 25 avril 2004 Statut Membre Dernière intervention 25 août 2004
25 août 2004 à 13:38
bjr
j ai ete voir ton exemple j arrive a prendre tt les valeur
mais apres je suis perdu, je n arrive pas a utiliser le tapon..c est a dire a mettre ds la variable l ensemble des variable pour enregistrer tt cela ds le fichier texte..comment je dois faire??
jarrive a utiliser les fonction bnstrcpy etc etc mais je vois pas tro a quoi elle me serve? et qd j utilise *psz++ = '\t'; ca fai tro bizare genre au lieu d avoir bs8008 comme indexnumber j ai s8008 (il manque le b)
j ai compris la connection, la lecture, la selection, mais je suis perdu pour enregistrer cela ds le fichier texte..
peu tu m aider? je dois rendre tt ca ds 2 jour
j ai terminer le reste des programme qui vont avec mais il me manque cela..les donne ds un fichier texte
merci

//Fld(0) Jobnumber chaine de caractere
//Fld(1)Jobname chaine de caractere peux etre nul
// Fld(2) indexnumber chaine de caractere
//Fld(3) idcontent int
//Fld(4) content chaine de caractere
// Fld(5) boxnumber int
// Fld(6) idnote int
//Fld(7) note chaine de caractere

// SaveX1 Function
//First, access and save the LIST table.
void SaveX1()
{
char szTXTJSA[] = "H:\\JSA.txt";
_ConnectionPtr pdb = 0; // pointeur database
_RecordsetPtr prs;

HANDLE hfl;
DWORD dwWrite;
long lval, lerror = 1; // presume erreur
char szbuff[160]; // tampon pour chaque ligne du txt
char *psz; // pointeur ecriture dans szbuff
_bstr_t bst;
_variant_t var;

_RecordsetPtr pRstList = NULL;
_bstr_t strCnn("Provider=Microsoft.JET.OLEDB.4.0;" "Data source = H:\\DATA.mdb;");
TESTHR(pdb.CreateInstance(__uuidof(Connection)));
TESTHR(pRstList.CreateInstance(__uuidof(Recordset)));
pdb->Mode = adModeShareExclusive;

char szCONNECT[] = "Provider=Microsoft.JET.OLEDB.4.0;Data source=DATA.mdb";

hfl = CreateFile(szTXTJSA,GENERIC_WRITE,0,0,CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, 0);
HRESULT hr = S_OK;

pRstList->Open("SELECT * FROM LIST",strCnn, adOpenDynamic,adLockBatchOptimistic,adCmdText);
try
{
printf("Jobnumber jobname Indexnumber Idcont Content \t \t box Idnote \t Note \n");
while(!pRstList->EndOfFile)
{
bst = pRstList->Fields->GetItem((long)0)->Value; // jobnumber
psz = bst;

// Les champs NULLABLES sont a prendre dans un:
// _variant_t var;
var = pRstList->Fields->GetItem((long)1)->Value;//jobname
if(var.vt != VT_NULL)
{
bst = var;
psz= bst;
}
else
{
psz = NULL;
}

bst = pRstList->Fields->GetItem((long)2)->Value; // indexnumber
psz = bst;

lval= pRstList->Fields->GetItem((long)3)->Value; // idcontent
bst = lval;
psz = bst;

bst = pRstList->Fields->GetItem((long)4)->Value; // content
psz = bst;
lval = pRstList->Fields->GetItem((long)5)->Value; // boxnumber
bst = lval;
psz = bst;

lval= pRstList->Fields->GetItem((long)6)->Value; // idnote
bst = lval;
psz = bst;

bst = pRstList->Fields->GetItem((long)7)->Value; // note
psz = bst;
// WriteFile(hfl, szbuff, psz - szbuff, &dwWrite, 0);

pRstList->MoveNext();
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2004 à 13:55
psz = bst; ???
Plonge toi dans un livre de C pour comprendre comment on ecrit dans un buffer.

ciao...
BruNews, Admin CS, MVP VC++
0
Rejoignez-nous