2010-11-16 22 views
2

J'essaie d'importer les noms de colonnes d'une table MS Access (nommée Learners) à une certaine variable (je ne sais pas laquelle utiliser). Les noms de la colonne sont des dates. Lorsque vous cliquez sur btnSave (TButton), le code doit déterminer si la colonne avec la date actuelle a déjà été créée. Sinon, il devrait le créer. C'est le code que j'ai obtenu jusqu'à présent:Comment puis-je charger des noms de colonnes à partir d'une table Access dans une variable (je ne sais pas lequel utiliser)? J'utilise un ADOTable dans Delphi7

procedure TForm1.btnSaveClick(Sender: TObject); 
var 
    bFound: boolean; 
    K: integer; 
    strColumnNames : TStringList; 
begin 
    strColumnNames := TStringList.Create; 
    tblLeerders.GetFieldNames(strColumnNames); 
    bFound := False; 

    for K := 1 to tblLeerders.IndexFieldCount 
    do 
     begin 
     if strColumnNames.Strings[K] <> FormatDateTime('dd/mm/yyyy', Date()) 
      then 
      begin 
       bFound := True; 
      end; 
     end; 

    if bFound = False 
    then 
     begin 
     with qryLearners 
      do 
      begin 
       SQL.Text := 'Alter TABLE Leerders ADD COLUMN ' + FormatDateTime('dd/mm/yyyy', Date()) + ' Boolean '; 
       ExecSQL; 
      end; 
     end; 
end; 

Aidez-nous! Tout conseil serait très apprécié.

Répondre

3

Essayez:

if Assigned(tblLeerders.FindField(FormatDateTime('dd/mm/yyyy', Date()))) then 
begin 
    qryLearners.SQL.Text := 'Alter TABLE Leerders ADD COLUMN ' + 
          FormatDateTime('dd/mm/yyyy', Date()) + ' Boolean '; 
    qryLearners.ExecSQL; 
end; 

(Code modifié selon Gerry, ci-dessous)

Vous avez également dit "Tout conseil serait apprécié." Mon conseil est de ne pas essayer d'utiliser une base de données comme une feuille de calcul. Stocker les données de manière normale (dans un tableau avec une colonne de valeur date &), puis dénormaliser pour la présentation. L'accès rend ceci facile à faire avec les requêtes croisées.

+2

Cela provoquera une exception si le champ n'existe pas. Vous devez utiliser 'if FindField (DateStr) <> nil' à la place. –

+0

Beg pardon, va corriger. –

+0

Merci beaucoup! Je suis en 11e année ... Alors oui, j'ai encore besoin d'apprendre un peu sur ce qu'il faut utiliser et ce qu'il ne faut pas faire (en termes d'utilisation de la base de données sous forme de tableur). Mais merci pour le conseil. :) –