Delphi Tips & Tricks softsale > Delphi Tips & Tricks      

< poprzednia rada następna rada >

Edytor pól w trybie run-time

Często zdarza się, że należy zmienić np. długość pola w bazie, z której korzystamy w aplikacji. Jeżeli korzystaliśmy z edytora pól, wtedy próba uruchomienia "chodzącej" dotąd naszej aplikacji spotka się z nieprzyjemnym i nie do końca zrozumiałym komunikatem o błędzie "Field nazwa_pola is not of the expected type". Rozwiązaniem w tym momencie jest usunięcie z edytora pól pola, którego długość uległa zmianie i powtórne jego dopisanie i ponowna kompilacja. Jak uniknąć tego kłopotliwego rozwiązania, zmuszającego nas do powtórnej kompilacji i instalacji aplikacji?

Jeżeli na etapie projektowania wybierzemy te pola, które w przyszłości będą miały zmienianą np. długość, to, za pomocą procedury podanej niżej, można przypisać długości danego pola aktualną długość pola z tablicy przed otwarciem tej tablicy.

var tt :TdataSet;
procedure Koryguj_pole(DataSet: TDataSet);
var
   numer_pola,poz_def: Integer;
   // poz_def - określa pozycję definicji pola
   // na podstawie nazwy pola,
   // patrz dalej - poz_def:=FieldDefs.IndexOf(FieldName);
begin
   with DataSet do 
   begin

   if Active then Close;
   FieldDefs.Update;

   {szukaj wszystkich predefiniowanych
   {TField w DataSet.FieldDefs}

   for numer_pola:= FieldCount-1 downto 0 do
      with Fields[numer_pola] do
      begin
         poz_def := FieldDefs.IndexOf(FieldName);
         // wywołaj wyjątek jeśli nie ma pola o danej nazwie
         if poz_def < 0 then
         raise Exception.CreateFmt( 'Pola o nazwie "%s" nie
                               ma w tablicy o nazwie "%s"',
                                 [FieldName,Dataset.Name]);
         {przypisz poprawną długość pola}
         Size := FieldDefs[poz_def].Size;
      end;
      Open;
   end;
end;

Można to sprawdzić na przykład w momencie tworzenia formy.

procedure TForm1.FormCreate(Sender: TObject);
   begin
      tt:=table1;
      Koryguj_pole(tt);
   end;

SOFTSALE - Oprogramowanie i Szkolenia
softsale@softsale.com.pl

03-565 Warszawa , ul. Borzymowska 43 lok. 301C
tel/fax:4084840,GSM:0607612428