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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
...//Création de la nouvelle table avec les champs nécessaires
StarDataModule->LocalQuery->SQL->Clear(); // efface existant
StarDataModule->LocalQuery->SQL->Add("CREATE TABLE " + TableName + " (");
Memo = "CREATE TABLE " + TableName + " (";
StarDataModule->OutilStoredProc->GetFieldNames(ListeChamps); //Remplit avec liste de Champs
for(int i = 0; i < ListeChamps->Count ; i++)
{
DefChamps = StarDataModule->OutilStoredProc->FieldDefList->FieldDefs[i]->DataType;
LongChamps = StarDataModule->OutilStoredProc->FieldDefList->FieldDefs[i]->Size;
CompoChamps = ListeChamps->Strings[i];
switch (DefChamps) {
case ftString:
case ftFixedChar:
case ftWideString:
CompoChamps += " CHAR("+ IntToStr(LongChamps) + ")";
break;
case ftSmallint:
case ftWord:
CompoChamps += " SMALLINT";
break;
case ftBoolean:
CompoChamps += " LOGICAL";
break;
case ftCurrency:
CompoChamps += " CURRENCY";
break;
case ftInteger:
CompoChamps += " INTEGER";
break;
case ftFloat:
CompoChamps += " FLOAT";
break;
case ftBCD:
case ftFMTBcd:
//CompoChamps += " NUMERIC"; // Normalement c'est Numéric mais dans ce cas n'affiche pas les décimales
CompoChamps += " CURRENCY";
break;
case ftDate:
CompoChamps += " DATE";
break;
case ftTime:
CompoChamps += " TIME";
break;
case ftDateTime:
case ftTimeStamp:
CompoChamps += " DATETIME";
break;
case ftBytes:
CompoChamps += " BYTE";
break;
case ftMemo:
case ftFmtMemo:
CompoChamps += " MEMO";
break;
case ftGraphic:
CompoChamps += " IMAGE";
break;
case ftTypedBinary:
CompoChamps += " BINARY";
break;
case ftLargeint:
CompoChamps += " DOUBLE";
break;
default:
CompoChamps += " DOUBLE";
break;
}
if(i != ListeChamps->Count -1)
{
CompoChamps += ","; // entre les champs
StarDataModule->LocalQuery->SQL->Add(CompoChamps);
}
else
{
CompoChamps += ")"; // en fin de création
StarDataModule->LocalQuery->SQL->Add(CompoChamps);
}
Memo += CompoChamps; // nes sert qu'en débug pour voir et copier dans requête Access et tester en cas de PB
}
StarDataModule->LocalQuery->ExecSQL(); // Création de la table
// Recopie les enregistrtements dans la table Tampon afin de lancer ensuite la seconde procédure
StarDataModule->LocalQuery->SQL->Clear(); // efface existant
StarDataModule->LocalQuery->SQL->Add("SELECT * FROM " + TableName); //Sélectionne la table destination
StarDataModule->LocalQuery->Active = true; // Active le dataset
StarDataModule->OutilStoredProc->First();
// Recopie tous les records
for(int i = 0; i < StarDataModule->OutilStoredProc->RecordCount ; i++)
{
StarDataModule->LocalQuery->Append();
for(int u = 0; u < StarDataModule->OutilStoredProc->FieldCount; u++) // tous les champs
{
StarDataModule->LocalQuery->Fields->Fields[u]->Value = StarDataModule->OutilStoredProc->Fields->Fields[u]->Value;
}
StarDataModule->LocalQuery->Post();
StarDataModule->OutilStoredProc->Next();
}
StarDataModule->LocalQuery->Requery(); // permet de bien forcer la mise à jour des enregistrements!!! sinon pas à jour pour la suite
StarDataModule->LocalQuery->Active = false;
delete ListeChamps;
} |
Partager