Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBEdit Felder auslesen, wieso geht das nicht? (https://www.delphipraxis.net/103469-dbedit-felder-auslesen-wieso-geht-das-nicht.html)

toyoman 16. Nov 2007 08:41

Datenbank: Interbase • Zugriff über: DbExpress / ClientDataset

DBEdit Felder auslesen, wieso geht das nicht?
 
Delphi-Quellcode:
form1.ClientDataSetName.FieldByName('DB_ID').AsInteger:=strtoint(dbedit1.text);
Das Edit Feld DBEdit1 ist mit einem Wert gefüllt. Wie kriege ich diesen zurück?
Dieser Befehl oben liefert "" bzw. 0 obwohl der Wert gefüllt ist.

Mache ich das ganze so:

Delphi-Quellcode:
form1.ClientDataSetName.FieldByName('DB_ID').AsInteger:=form1.ClientDataSetName.FieldByName('DB_ID').AsInteger;
erhalte ich ebenfalls 0 obwohl auf dem aktuellen Datensatz der Wert 52 angezeigt wird..

Versteh ich im Moment grad überhaupt nicht mehr...

Es geht darum einen Datensatz zu kopieren mit den identischen Werten wie bereits vorhanden. Oder gibt es einen schlaueren Lösungsansatz?

sega84 16. Nov 2007 08:49

Re: DBEdit Felder auslesen, wieso geht das nicht?
 
Guten Morgen,
stand selber mal vor dem selber Problem, habe es allerdings über eine SQL-Query gelösst.
Beispiel:
Delphi-Quellcode:
procedure KopiereDatensatz();
var Query:TSQLQuery;
var iMaxID:Integer;
begin
Query := TSQLQuery.Create(self);
Query.SQLConnection := self.SQLConnection1;
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('select max(id)+1 as MaxxID from Tabelle');
Query.Open;
iMaxID := 1;
While not Query.Eof do
begin
  iMaxID := query.FieldByName('MaxxID').AsInteger;
  Query.Next;
end;
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('insert into tabelle (id, wert, wert1) values');
query.sql.add('('+IntToStr(iMaxID)+', '''+self.ClientDataSet1.FieldByName('wert').AsString+''', '''+self.ClientDataSet1.FieldByName('wert1').AsString+''')');
Query.ExecSQL(true);
Query.Close;
self.ClientDataSet1.CancelUpdates;
self.ClientDataSet1.Refresh;
end;
Hoffe ich konnte dir helfern....

alzaimar 16. Nov 2007 08:54

Re: DBEdit Felder auslesen, wieso geht das nicht?
 
Du willst einen Datensatz kopieren?

So etwa:

Delphi-Quellcode:
Procedure CopyCurrentDataset (MyDataset : TDataset);
Var
  fFields : Array Of Variant;
  i : Integer;

Begin
  SetLength (fFields, MyDataset.FieldCount);
  For i:=0 to MyDataSet.FieldCount - 1 do fFields[i] := MyDataSet.Fields(i).Value; // Alle Feldinhalte merken
  MyDataset.Append;
  For i:=0 to MyDataSet.FieldCount - 1 do MyDataSet.Fields(i).Value := fFields[i]; // Feldinhalte wieder zurückschreiben
  MyDataset.Post;
End;
Die Prozedure fügt den aktuellen Datensatz ans Ende der Datenmenge ein.

Vorsicht bei Blobs (geht das dann?), bei AutoInc- und berechneten Feldern.. Die Sonderbehandlung musst Du noch einbauen (Case FieldType of ....)

Sharky 16. Nov 2007 09:05

Re: DBEdit Felder auslesen, wieso geht das nicht?
 
Hai toyoman,

ich glaube da liegt ein Verständnissproblem vor?

Die DBxxxx Komponenten dienen nicht nur zur Anzeige von Daten aus dem DataSet. Sobald Du in diesen etwas änderst und ein Post ausgeführt wird (das passiert z.B. schon beim scrollen in einem DBGrid) stehen die Änderungen auch in dem Datensatz der Tabelle.

Ausserdem solltest Du vermeiden einen Wert aus einer DBxxxx Komponente zu holen. Lese diesen besser aus dem DataSet.

toyoman 16. Nov 2007 09:19

Re: DBEdit Felder auslesen, wieso geht das nicht?
 
Nein nicht noch ein Verständnisproblem am Freitag sharky :)
Ist mir schon alles klar.
Ich versuchs grad mal mit der vielversprechenden Funktion von alzaimar und sega84.

Danke euch allen erstmal...


Zitat:

Zitat von Sharky
Hai toyoman,

ich glaube da liegt ein Verständnissproblem vor?

Die DBxxxx Komponenten dienen nicht nur zur Anzeige von Daten aus dem DataSet. Sobald Du in diesen etwas änderst und ein Post ausgeführt wird (das passiert z.B. schon beim scrollen in einem DBGrid) stehen die Änderungen auch in dem Datensatz der Tabelle.

Ausserdem solltest Du vermeiden einen Wert aus einer DBxxxx Komponente zu holen. Lese diesen besser aus dem DataSet.


shmia 16. Nov 2007 10:01

Re: DBEdit Felder auslesen, wieso geht das nicht?
 
Zitat:

Zitat von alzaimar
Du willst einen Datensatz kopieren?
So etwa:
Delphi-Quellcode:
Procedure CopyCurrentDataset (MyDataset : TDataset);
...
Begin
  ...
  MyDataset.Post; // <= der Post sollte rausgenommen werden, da man ja noch Daten ändern möchte
End;

In der Code-Library ist ein Betrag, der das noch genauer erklärt:
http://www.delphipraxis.net/internal...ct.php?t=19594


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz