Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensätze in TStringlist einfügen (https://www.delphipraxis.net/106409-datensaetze-tstringlist-einfuegen.html)

Sternenmaedchen 10. Jan 2008 12:40

Datenbank: Paradox • Version: 7 • Zugriff über: SQL

Datensätze in TStringlist einfügen
 
Hallo.

Ich bin mir nicht sicher ob dies der richtige Thread ist, aber ein Versuch ist es wert.

Ich habe seit ein paar Tagen mit der Delphie Programmierung begonnen und habe ein kleines
Anfängerproblem.

Ich lese per wwquery Datensätze aus einer Paradox Tabelle aus und lasse diese in einem Datagrid ausgeben, sie können per checkbox ausgewählt werden. Diese möchte ich nun beim Klick auf einen Button in eine
TStringliste eintragen lassen (allerdings nur die ausgewählten), um diese danach als Datei speichern zu können.
Dies ist nötig, da diese Datei von einer weiteren Schnittstelle im Projekt benötigt wird.

Kann mir jemand helfen?
Das wäre sehr nett.

Danke schonmal und einen schönen Tag noch :o)

PS: Dieser Beitrag ist ebenfalls im
DSDT Forum und im
Delphie Forum zu finden

Kroko1999 10. Jan 2008 12:44

Re: Datensätze in TStringlist einfügen
 
Toll, ein riesige Internet und überall das gleiche M... udn dann nicht einmal verlinkt, was soll das?
Hier und hier und hier !

Sternenmaedchen 10. Jan 2008 13:00

Re: Datensätze in TStringlist einfügen
 
Ähm entschuldigung dafür, aber musst du gleich so reagieren?
Meine Anfrage war höflich sowie nett gestellt und hat gleiches verdient.

Ich werde einen entsprechenden Edit mit Links einfügen.
Ich bin so gut wie nie in Foren aktiv und daher nicht sehr erfahren, daher danke ich dir für den Hinweis.

Noch einmal sorry.

marabu 10. Jan 2008 13:08

Re: Datensätze in TStringlist einfügen
 
Herzlich willkommen in der Delphi-PRAXiS, Sternenmädchen.

Kroko hat das bestimmt nicht so böse gemeint wie es bei dir angekommen zu sein scheint.

Verbirgt sich hinter deinem Datagrid ein TDBGrid?
Ist die Schnittstelle zum fremden Projekt bereits spezifiziert?
Werden die zu exportierenden Datensätze per Kriterium oder manuell ausgewählt?

Freundliche Grüße vom marabu

Sternenmaedchen 10. Jan 2008 13:12

Re: Datensätze in TStringlist einfügen
 
Hallo Marabu vielen Dank für die Antwort.

Ja es handelt sich hierbei um TDB Grid speziell um ein TwwDBGrid (hat aber nur ein paar Funktionen mehr etc.)

Ich frage die Daten aus der DB in einer Query mit SQL ab, Kriterium ist dass die in der TStringlist zu speichernden Daten per Checkbox ausgewählt sein müssen (bei Aktivität steht ein 'J' in einem entsprechenden Datenfeld) mir ist nur nicht klar wie ich die Daten nun in diese TStringliste bekomme.

Mfg Sternenmädchen

s-off 10. Jan 2008 13:13

Re: Datensätze in TStringlist einfügen
 
Hallo Sternenmaedchen,
Zitat:

Zitat von Kroko1999
Toll, ein riesige Internet und überall das gleiche M... udn dann nicht einmal verlinkt, was soll das?
Hier und hier und hier !

[OT]
War Dein Mittagessen zu zäh?
[/OT]
Es kann nicht jeder wissen, dass Crossposts nicht gerne gesehen sind.
Freue mich schon auf einen Fauxpas deinerseits.

===
Rest gelöscht, da Fragen bereits vom marabu aufgegriffen.

marabu 10. Jan 2008 13:31

Re: Datensätze in TStringlist einfügen
 
Wenn der CheckBox ein Datenfeld unterlegt ist, dann ist der Zugriff auf die Feldwerte der ausgewählten Datensätze einfach: Entweder du iterierst über den DataSet, ignorierst alle nicht relevanten Datensätze und überträgst die Feldwerte der gewünschten Datensätze in die StringList:

Delphi-Quellcode:
procedure ExportFields(fields: TFields; recs: TStrings);
var
  i: Integer;
begin
  with TStringList.Create do
  try
    for i := 0 to Pred(fields.Count) do
      Add(fields[i].AsString);
  finally
    Free;
  end;
  recs.Add(CommaText);
end;



with DBGrid.DataSource.DataSet do
var
  bm: TBookMark;
begin
  bm := GetBookmark;
  DisableControls;
  First;
  while not Eof do
  begin
    if FieldByName('CHECKED').AsBoolean then
      ExportFields(Fields);
    Next;
  end;
  GotoBookmark(bm);
  FreeBookmark(bm);
  EnableControls;
end;
Die Vorgehensweise zur Erstellung einer (über recs voll gepufferten) CSV-Datei ist hier nur angedeutet.

Oder du liest dich mal in die Komponente TBatchMove ein. Damit kannst du die CSV-Datei fast ohne eigenen Code erstellen.

Freundliche Grüße

s-off 10. Jan 2008 13:32

Re: Datensätze in TStringlist einfügen
 
Also ich würde folgendermaßen vorgehen (obwohl der marabu gleich bestimmt mit einer besseren Lösung um die Ecke kommen wird) :mrgreen:

Also - da Du Deine Daten ja sowieso per Query abfragst, kannst Du die Ergebnismenge ja schonmal eingrenzen, indem Du nur die Datensätze einfliessen lässt, in denen Dein Aktivitäten-Feld den Wert 'J' hat.

Anschliessend gehst Du die Ergebnismenge der Query durch, setzt die einzelnen Felder je Datensatz zusammen und übergibst sie an Deine Stringliste. Das Ganze könnte in etwa so aussehen:
Delphi-Quellcode:
Procedure TForm1.QueryToList;
Var
   sTemp: String;
   lstResult: TStringlist;
   i: Integer;
Const
   cSeparator = ';';
Begin
   lstResult := TStringlist.Create;
   Try
      While Not DeinQuery.Eof Do Begin
         For i := 0 To DeinQuery.FieldCount - 1 Do Begin
            sTemp := sTemp + cSeparator + DeinQuery.Fields[i].AsString;
         End;
         lstResult.Add(sTemp);
         sTemp := '';
         AdsTable1.Next;
      End;
   Finally
      FreeAndNil(lstResult);
   End;
End;
Edit: ich sag's ja...

Edit2: Methodenname und abschl. 'End;' eingefügt

Sternenmaedchen 10. Jan 2008 14:23

Re: Datensätze in TStringlist einfügen
 
Ersteinmal vielen Dank euch beiden :)

Zu Marabu... ich benutze Delphie vers. 3 und irgendwie meint er er kennt "FieldByName" nicht...
Ich weiß auch nicht wirklich was ich genau übergeben soll.

Zu S-Off
bei deiner Lösung bekomme ich leider nur Fehlermeldungen ?!
FreeAndNil kennt er nicht...
Ihm fehlt auf einmal irgendwo ein "End."
Er sagt es sind zu viele Parameter ?!
Und bei der Variable der For-Schleife schimpft er auch

Woran kann das liegen?

PS: es ist eine Ttable keine Tquery an dieser Stelle ich hatte mich verguckt

s-off 10. Jan 2008 14:54

Re: Datensätze in TStringlist einfügen
 
Zitat:

Zitat von Sternenmaedchen
Zu Marabu... ich benutze Delphie vers. 3 und irgendwie meint er er kennt "FieldByName" nicht...
Ich weiß auch nicht wirklich was ich genau übergeben soll.

Bei FieldByName übergibst sprichst Du ein Feld über seinen Namen an. In Deinem Fall wäre diese der Name des Feldes, welches den Aktivitätsstatus ggf. mit 'J' angibt.

Zitat:

Zitat von Sternenmaedchen
FreeAndNil kennt er nicht...

Dann benutze stattdessen bitte
Delphi-Quellcode:
lstResult.Free;
Zitat:

Zitat von Sternenmaedchen
Ihm fehlt auf einmal irgendwo ein "End."
Er sagt es sind zu viele Parameter ?!

Tschuldigung; hatte den Methodenrumpf nicht mit eingefügt - habe aber den Beitrag oben editiert.

Zitat:

Zitat von Sternenmaedchen
Und bei der Variable der For-Schleife schimpft er auch

Was sagt er denn? 'i' sollte er eigentlich kennen

Zitat:

Zitat von Sternenmaedchen
PS: es ist eine Ttable keine Tquery an dieser Stelle ich hatte mich verguckt

Schade, aber dann ist meine Lösung doch nicht so umsetzbar.
Das bedeutet, dass Du die komplette Ergebnismenge durchgehst, was vom Prinzip her nichts anderes ist - es dauert halt nur länger.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Seite 1 von 2  1 2      

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