- Je suis en train de construire un programme qui stocke les paramètre météo et permettra de les ressortir sous formes de courbes et autres.
Je prend les données sur internet.
Mon programme:
Dans une première partie, j'ai deux table, une avec des stations et leur adresse associé puis une autre dans laquelle je met les stations dont je veut récupérer les données.
Lorsque j'ajoute une station, pas de problème.
Mais lorsque je veut en supprimer une, j'ai un soucis:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 //Ajout d'une station à mettre à jour void __fastcall TPrincipale::cmdAjClick(TObject *Sender) { //Modification de la Table Station //Mise en écriture de la table. DBTable->Edit(); //Sélection et écriture de l'enregistrement. DBTable->FindField(NumAj); DBTable->Fields->Fields[2]->AsString="1"; DBTable->Post(); DBTable->Refresh(); //Création d'un nouvel enregistrement DBTable2->AppendRecord(ARRAYOFCONST((NumAj,DBTable->Fields->Fields[1]->AsString,Date.DateString()))); DBTable2->Close(); DBTable2->Open(); //Création d'une table pour cet enregistrement. DBTable3->Active= false; DBTable3->TableName = NumAj; if (!DBTable3->Exists) { DBTable3->FieldDefs->Clear(); //Pointeur pour créer champ TFieldDef *pNewDef = DBTable3->FieldDefs->AddFieldDef(); pNewDef->Name= "Date"; pNewDef->DataType=ftDate; pNewDef=DBTable3->FieldDefs->AddFieldDef(); pNewDef->Name= "TempMaxi"; pNewDef->DataType=ftInteger; pNewDef=DBTable3->FieldDefs->AddFieldDef(); pNewDef->Name= "TempMini"; pNewDef->DataType=ftInteger; pNewDef=DBTable3->FieldDefs->AddFieldDef(); pNewDef->Name= "Temp12"; pNewDef->DataType=ftInteger; pNewDef=DBTable3->FieldDefs->AddFieldDef(); pNewDef->Name= "Hygrometrie12"; pNewDef->DataType=ftInteger; pNewDef=DBTable3->FieldDefs->AddFieldDef(); pNewDef->Name= "Pluviometrie"; pNewDef->DataType=ftInteger; //Création de la table DBTable3->CreateTable(); } else MessageBox(0, "La table de donnée existe déja. Erreur N°1", "Erreur N°1", MB_ICONERROR|MB_OK); }
En effet, le codesuivant ne marche pas comme je voudrais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 //suppression d'une station à mettre à jour. void __fastcall TPrincipale::cmdSpClick(TObject *Sender) { //modification de la Table StationMAJ //suppression d'un enregistrement DBTable2->FindField(NumSp); DBTable2->Delete(); //Modification de la Table Station //Mise en écriture de la table. DBTable->Edit(); //Sélection et écriture de l'enregistrement. DBTable->FindField(NumSp); DBTable->Fields->Fields[2]->AsString="0"; DBTable->Post(); DBTable->Refresh(); //Suppresion de la table associé à l'enregistrement. DBTable3->Active = false; DBTable3->TableName = NumSp; if (DBTable3->Exists) DBTable3->DeleteTable(); else MessageBox(0, "Le table ne peut être supprimé car elle n'existe pas. Erreur N°2", "Erreur N°2", MB_ICONSTOP|MB_OK); }
(Extrait de la partie suppession du programme)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DBTable->FindField(NumSp); DBTable->Fields->Fields[2]->AsString="0";
La fonction FindFieldme sert à sélectionner l'enregistrement.
La ligne suivante modifie une valeur de cet enregistrement. Or mon problème est le suivant:
La ligne ne modifie pas l'enregistrement que je veut mais le suivant.
Partager