| 12
 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