Hallo,
<br>
<br>Habe ein ADODataSet1 bei dem zwei Felder mittels Feld Editor hinzugefügt werden.
<pre>
procedure TForm1.MyValidate(Sender: TField);
begin
Edit1.Text := 'XXXXXXXXXXXX';//Sender.asString;
If Sender.asString = 'X' Then begin
Edit1.Text := 'YYYYYYYYYYY';//Sender.asString;
Sender.asString := 'XXXX';
end
else
//Edit1.Text := 'ZZZZZZZZZZZ';//Sender.asString;
Edit1.Text := Sender.asString;//Sender.asString;
end;
procedure TForm1.FormCreate(Sender: TObject);
Var
I : Integer;
begin
ADODataSet1.Fields.FindField('Name').OnValidate := MyValidate;
ADODataSet1.Open;
end;
</pre>
<br>Gibt man nun in dem Feld Name ein "X" ein , so wird daraus ein "XXXXXX".
<br>Werden jedoch die Felder des Datasets mittels FeldEditor gelöscht und der folgende Code in "TForm1.FormCreate" eingefügt, dann ...
<pre>
procedure TForm1.FormCreate(Sender: TObject);
Var
I : Integer;
begin
with ADODataSet1 do
begin
FieldDefs.Clear;
FieldDefs.Add('id', ftInteger,0,False);
FieldDefs.Add('Name', ftString,50,False);
for I := 0 to FieldDefs.Count - 1 do begin
with FieldDefs[I] do begin
CreateField(nil);
end;
end;
end;
ADODataSet1.Fields.FindField('Name').OnValidate := MyValidate;
ADODataSet1.Open;
end;
</pre>
<br>... dann wird aus der Eingabe "X" ein "X". Es scheint sogar so, das aus der Eingabe "X" ein "XXXXXX" und direkt danach wieder ein "X" wird.
<br>
<br>1) Aber was fehlt denn noch zur richtigen Definition der Felder? Das selbe Phänomen bekomme ich auch bei TClientDataset, MemoryData- Komponenten.
<br>
<br>2) Eine Temporäre Tabelle (im Ram) kann man doch auch mit einem ADO Recordset erstellen, oder? Wenn ja wie kann man denn einer DataSource sagen, das diese auf ein Recordset zugreifen soll. Kann man einem Recordset zur Laufzeit auch OnValidate Ereignisse zuordnen?
<br>
<br>3) Wieso gibt es eigentlich MemData Komponenten, wenn man doch genau das gleiche auch mit einem ADO Recordset oder einem TClientDataSet machen kann?
<br>
<br>4) Was sollte man verwenden, wenn man eine Temporäre Tabelle zur Laufzeit (im Ram) erstellen will, und bestimmten Feldern OnValidate Ereignisse zuordnen will?
<br>
<br>Danke!
<br>
<br>mfg
<br>PS
<br>
<br>Habe ein ADODataSet1 bei dem zwei Felder mittels Feld Editor hinzugefügt werden.
<pre>
procedure TForm1.MyValidate(Sender: TField);
begin
Edit1.Text := 'XXXXXXXXXXXX';//Sender.asString;
If Sender.asString = 'X' Then begin
Edit1.Text := 'YYYYYYYYYYY';//Sender.asString;
Sender.asString := 'XXXX';
end
else
//Edit1.Text := 'ZZZZZZZZZZZ';//Sender.asString;
Edit1.Text := Sender.asString;//Sender.asString;
end;
procedure TForm1.FormCreate(Sender: TObject);
Var
I : Integer;
begin
ADODataSet1.Fields.FindField('Name').OnValidate := MyValidate;
ADODataSet1.Open;
end;
</pre>
<br>Gibt man nun in dem Feld Name ein "X" ein , so wird daraus ein "XXXXXX".
<br>Werden jedoch die Felder des Datasets mittels FeldEditor gelöscht und der folgende Code in "TForm1.FormCreate" eingefügt, dann ...
<pre>
procedure TForm1.FormCreate(Sender: TObject);
Var
I : Integer;
begin
with ADODataSet1 do
begin
FieldDefs.Clear;
FieldDefs.Add('id', ftInteger,0,False);
FieldDefs.Add('Name', ftString,50,False);
for I := 0 to FieldDefs.Count - 1 do begin
with FieldDefs[I] do begin
CreateField(nil);
end;
end;
end;
ADODataSet1.Fields.FindField('Name').OnValidate := MyValidate;
ADODataSet1.Open;
end;
</pre>
<br>... dann wird aus der Eingabe "X" ein "X". Es scheint sogar so, das aus der Eingabe "X" ein "XXXXXX" und direkt danach wieder ein "X" wird.
<br>
<br>1) Aber was fehlt denn noch zur richtigen Definition der Felder? Das selbe Phänomen bekomme ich auch bei TClientDataset, MemoryData- Komponenten.
<br>
<br>2) Eine Temporäre Tabelle (im Ram) kann man doch auch mit einem ADO Recordset erstellen, oder? Wenn ja wie kann man denn einer DataSource sagen, das diese auf ein Recordset zugreifen soll. Kann man einem Recordset zur Laufzeit auch OnValidate Ereignisse zuordnen?
<br>
<br>3) Wieso gibt es eigentlich MemData Komponenten, wenn man doch genau das gleiche auch mit einem ADO Recordset oder einem TClientDataSet machen kann?
<br>
<br>4) Was sollte man verwenden, wenn man eine Temporäre Tabelle zur Laufzeit (im Ram) erstellen will, und bestimmten Feldern OnValidate Ereignisse zuordnen will?
<br>
<br>Danke!
<br>
<br>mfg
<br>PS
Comment